Obecné procedury a funkce pro ESO9 START
Obecné procedury a funkce pro ESO9 START
Obarvování řádků nespárovaného dokladu
Funkce je používána například v bankovních výpise nebo pokladních dokladech – zadává se v odkazu (URLEsoForm) v činnosti pro naplnění položky HDOKSTYLE, např :
HDOKSTYLE=dbo.fnBarva_NespDokladu(QHDOK_BAV.idHdok) AS MF_ROWSTYLE
CREATE OR ALTER function dbo.fnBarva_NespDokladu(
@idHdok Int
)
returns VARCHAR(7)
Obarvování řádků v činnosti 1.2.1.2 - Automatické vystavení platebního příkazu
Funkce je použita v odkazu (URLEsoForm) v činnosti pro naplnění položky HDOKSTYLE.
CREATE OR ALTER function dbo.fnBarva_PP_Splatnost2(
@dtSplatno dateTime,
@vlNeduveryhodnyPlatce SmallInt,
@vlNeduveryhodnyUcet SmallInt
)
returns VARCHAR(7)
Naplnění poznámky při tvorbě platebního příkazu
Funkce vrací hodnotu, která se má naplnit do poznámky při tvorbě platebního příkazu.
Pokud bude vrácena hodnota NULL, přebere se text z předchůdce.
Vstupním parametrem je idHdok dokladu, ze kterého PP vzniká.
CREATE OR ALTER function dbo.fnUzivTextPP (
@idHdok Int
)
returns varchar(2500)
Procedura volaná při tvorbě platebního nebo inkasního příkazu
Volá se pro každou vytvořenou položku platebního příkazu. Volání probíhá 2x – jednou před založením a jednou po založení položky platebního příkazu (viz parametr @vlAkce).
CREATE OR ALTER PROCEDURE dbo.spBaV_VytvorPP_Uziv
@vlAkce Smallint, -- 1=před založením PPP, 2=po založení PPP
@vl_PP_BaV_INK Smallint, -- 0=PP, 2=INKASO
@IDUcetZap Int, -- id účetního zápisu
@idHdok_FA Int,
@idHdok_PPP INT,
@vlVypocetSkonta SMALLINT OUT, -- 0=Skonto se zapisuje do faktury, 1=Skonto se nezapisuje do faktury, vytváří se IDU, -1=skonto se nepíše do FA ani se nevytváří IDU
@hdKUhradeVal Money, -- zadaná částka k úhradě ve valutě (částka nesnížená o skonto, PP bude vytvořen na @hdKUhradeVal - @hdSkonto)
@hdSkonto MONEY, -- částka skonta
@idLogUser Int
Uživatelsky přepsatelná funkce pro výpočet skonta - volá se při tvorbě platebního příkazu.
CREATE OR ALTER function dbo.fnVypoctiSkontoHDOK_Uziv(
@idHdok Int,
@DatumUhrady Datetime
)
returns Money
Definice číselné řady
Přepsáním této funkce je možno uživatelsky přepsat tvorbu číselné řady, kterou nelze definovat pomocí standardních možností v ESO9. Pokud vrací hodnotu NULL, použijí se pro tvorbu čísla dokladu v proceduře spNextVRade standardní pravidla, jestliže je vrácena neprázdná hodnota, pak se tato použije pro číslo dokladu.
CREATE OR ALTER function dbo.fnNextVRade_Uziv (
@IDCisRada Int, -- číselná řada
@IDUctObd Int = NULL, -- účetní období
@idBav Int = NULL, -- vazba na bankovní výpis
@idSubjekt Int = NULL, -- vazba na subjekt
@idHDokP Int = NULL, -- vazba na předchudce
@idHdok_Vzor Int = NULL,
@idStred_MD Int = NULL,
@idStred_Dal Int = NULL,
@idSklad Int = NULL,
@idPenUcet Int = NULL,
@idMena Int = NULL
)
returns varchar(30)
V definici číselné řady lze použít výraz $FNxx. V tomto případě je pak nutno definovat funkci, která pro zadané číslo xx bude vracet řetězec, kterým se nahradí výraz $FNxx.
CREATE OR ALTER function dbo.fnCisRad_NahradUziv (
@CisFN integer
)
returns varchar(30)
Úprava položek ve funkci fnDZ_FormularHDOK
Funkce je určena pro možnost uživatelského přepsání některých vyjmenovaných položek ve funkci fnDZ_FormularHDOK. Pokud je třeba provést modifikaci položky například na základě subjektu na dokladu, je nutno si data dohledat dle příslušného @idHdok.
Zatím je funkční pouze pro položky : DIC, TextPreferencniVeta.
CREATE OR ALTER function dbo.fnDZHdok_UpravPolozku (
@idHdok int, -- pro možnost dohledání dalších položek z tištěného dokladu (HDOKu)
@Jazyk varchar(10), -- pro možnost tisku v závislosti na použitém jazyce, ve kterém se tisk provádí
@NazevPolozky varchar(20), -- Název položky z výsledného datového zdroje ve funkci fnDZ_FormularHDOK
@StandardniHodnota varchar(max) -- hodnota, která bude standardně tištěna
)
returns varchar(max)
Funkce pro text referenční věty
Pro tisk preferenční věty se používá položka TextPreferencniVeta z datového zdroje - funkce fnDZ_FormularHDOK. Položka je naplňována hodnotou, kterou vrací tato funkce fnTxtPreferencniVeta, kterou je možno uživatelsky přepsat.
CREATE OR ALTER function dbo.fnTxtPreferencniVeta (
@idHdok Int,
@idSdok Int,
@mf_NeAnoPrefVeta SmallInt,
@Jazyk varchar(10)
)
returns varchar(8000)
Podmínka pro tisk QR kódu na dokladu (vydané faktuře)
Používá se v datovém zdroji (funkci) fnDZ_FormularHDOK.
CREATE OR ALTER function dbo.fnHDOK_TisknoutQRPlatbu (
@idHdok Int
)
Funkce pro definici položky TextProSlozkuEU datového zdroje fnDZ_FormularHDOK
CREATE OR ALTER function dbo.fnFaV_TextProSlozkuEU (@idHdok Int, @Jazyk varchar(10))
returns varchar(255)
Funkce pro určení podmínky, data, střediska, účtu a obecného číselníku při samovyměření DPH, procedury umožňující ovlivnit samovyměření DPH
CREATE OR ALTER function dbo.fnUzivPodm_ProDPH_FapEU (
@idHdok Int,
@idSdok Int
)
returns Int
CREATE OR ALTER function dbo.fnFapEU_DatumProDPH(
@idHdok Int,
@Vstup_Vystup SmallInt, -- 1=daň na vstupu; 2=daň na výstupu
@vlTypSloz SmallInt, -- 0=Ostatní; 1=Zboží; 2=Služba; 3=Pomůcka; 4=Operace; 5=Pracoviště; 6=Program; 7=Platidlo; 8=rezervováno; 9=rezervováno; 1000-1100=doprava;
@ProVykazDPH SmallInt,
@vlUZDatum_Sazba SmallInt -- 0=jedná se o datum pro určení data (období) DPH, 1=jedná se o datum pro výpočet kurzu a sazby DPH
-- -- pokud to není storno, tak nemá význam, ale v případě storna se pro @vlUZDatum_Sazba = 1 vrací data z předchůdce
)
returns DateTime
CREATE OR ALTER function dbo.fnFapEU_UrciStredisko(@idHdok Int)
returns Int
CREATE OR ALTER function dbo.fnFapEU_UrciUcet(
@idHdok Int,
@vlSazbaDPH SmallInt,
@Vstup_Vystup SmallInt,
@vlDuvod SmallInt,
@vlTypSloz SmallInt,
@vlKraceni SmallInt
)
returns Int
CREATE OR ALTER function dbo.fnFapEU_UrciObecCis_01(
@idHdok Int,
@vlSazbaDPH SmallInt,
@Vstup_Vystup SmallInt,
@vlDuvod SmallInt,
@vlTypSloz SmallInt,
@vlKraceni SmallInt
)
returns Int
CREATE OR ALTER procedure dbo.spHDok_FapEU_VytvorDPH_AfterExec
@idHdok INT,
@XmlParams XML
CREATE OR ALTER procedure dbo.spHDok_FapEU_ZpracujDetailUziv
@idHdok INT,
@XmlParams XML
Funkce pro určení čísla mandátní smlouvy
CREATE OR ALTER function dbo.fnMandSml_CisloSmlouvy_Uziv (
@idSubjekt Integer = NULL,
@idSubjBUcet Integer = NULL,
@idSubjAdr Integer = NULL
)
returns varchar(20)
Funkce pro změnu názvu subjektu při exportu KH DPH (PL legislativa)
CREATE OR ALTER function dbo.fnNazwaKontrahentaProDPH(
@idHdok Int
)
returns varchar(256)
Roční uzávěrka
Umožňuje nadefinovat, na jaký účet se má provádět zaúčtování kurzovního rozdílu závazků a pohledávek.
CREATE OR ALTER function dbo.fnRocUzav_ZavPohl_idUctOsn_KR (
@idHdok_KR Int, -- ID hlavičky uzávěrkového dokladu
@idUcetZap Int, -- ID účetního zápisu, pro který se provádí uzávěrka
@vlZisk_Ztrata SmallInt -- +1 = pro zisk, -1 = pro ztrátu
)
returns Int
Funkce umožňuje nadefinovat, které účty nemají vstupovat do roční uzávěrky kurzovních rozdílů závazků a pohledávek.
CREATE OR ALTER function dbo.fnRocUzav_ZavPohl_NebratUcty()
returns @SeznamUctu Table(idUctOsn Int Primary Key)
Kontroly závazků a pohledávek
Tato procedura je volána na začátku procedury spHDOK_TestTypSubj, která provádí testování závazků a pohledávek dle nastavených limitů v subjektu (volá se při uložení hlavičky nebo složky dokladu).
CREATE OR ALTER procedure dbo.spHDOK_TestTypSubj_Uziv
@idHDok Int, -- id hlavičky dokladu (Pozor - při pořizování nové hlavičky je NULL !)
@idSdok Int = NULL, -- id složky dokladu (Pozor - při pořizování nové věty je NULL !)
@vlHdok_Sdok SmallInt = NULL, -- 0=provádí se při editaci hlavičky, 1=provádí se při editaci složky
@idTypDok Int, -- id typu dokladu
@idHDok_Vzor Int = NULL, -- id vzoru dokladu
@idSubjekt Int, -- id subjektu
@idTypSubj Int,
@idPodminky_Plat Int,
@idLogUser Int,
@vlHPohledavka_Zavazek SmallInt,
@hdKUhradeKc Money, -- částka k úhradě v domácí měně
@vlNeprovadetObecnyTest SmallInt = NULL OUT, -- 0=test se bude provádět, 1=test se nebude provádět
@vlZpusobKontroly SmallInt = NULL OUT, -- způsob kontroly : 0=bez kontroly, 1=měkká kontrola, 2=tvrdá kontrola
@hdLimit Money = NULL OUT -- hodnota limitu, vůči kterému se budou závazky/pohledávky testovat
Funkce pro definici odkazu na formulář při fulltextovém vyhledávání
CREATE OR ALTER function dbo.fnFullTextUziv_Formular (
@idLogUser Int,
@TableNameMaster varchar(60),
@idTableMaster Int,
@TableNameSlave varchar(60),
@idTableSlave Int,
@Typ_Master varchar(20) ---- TypDok, VlTyp_Sloz
)
returns varchar(255)
Funkce pro vyhodnocení parametrů pro odeslání sestavy e-mailem
V rámci ESO9 Start tato funkce na základě parametru %VLSENDMAIL% vyhodnocuje, zda se daná sestava má/nemá odesílat e-mailem a v případě kladného vyhodnocení vrací parametry pro e-mail z tabulky DOK_EMAIL. Pokud by někdo vyžadoval vyhodnocení parametrů dle jiného algoritmu, než v ESO9 Start, může si funkci upravit v rámci uživatelských objektů.
CREATE OR ALTER FUNCTION dbo.fnDok_EMail
(
@VLSENDMAIL SMALLINT --Zda se (ne)bude vyhodnocovat 0/NULL=Ne 1=Ano
,@IDHDOK INT --ID dokladu
)
RETURNS @Dok_EMail TABLE
(
MF_SendMailTo VARCHAR(100)
,MF_SendMailSubject VARCHAR(255)
,MF_SendMailBody VARCHAR(max)
)
AS
BEGIN
--
DECLARE @IDDOK_EMAIL INT
,@EMAIL VARCHAR(100)
,@EMAIL_SUBJECT VARCHAR(255)
,@EMAIL_BODY VARCHAR(max)
--HDOK
DECLARE @IDSUBJOSOBA INT
,@IDTYPDOK INT
--
IF @VLSENDMAIL = 0 --Zda se (ne)bude vyhodnocovat 0/NULL=Ne 1=Ano
BEGIN
GOTO Label_OUT
END
--
SELECT @IDSUBJOSOBA = H.IDSUBJOSOBA
,@IDTYPDOK = H.IDTYPDOK
,@EMAIL = NULLIF(TRIM(O.EMAIL), '')
FROM HDOK H WITH (nolock)
LEFT JOIN SUBJOSOBA O ON O.IDSUBJOSOBA = H.IDSUBJOSOBA
WHERE H.idhdok = @IDHDOK
--
SELECT @IDDOK_EMAIL = DE.IDDOK_EMAIL
,@EMAIL = ISNULL(@EMAIL, NULLIF(TRIM(DE.EMAIL), ''))
,@EMAIL_SUBJECT = NULLIF(TRIM(DE.EMAIL_SUBJECT), '')
,@EMAIL_BODY = NULLIF(TRIM(DE.EMAIL_BODY), '')
FROM DOK_EMAIL DE WITH (NOLOCK)
WHERE DE.IDSUBJOSOBA = @IDSUBJOSOBA
AND DE.IDTYPDOK = @IDTYPDOK
--
IF @IDDOK_EMAIL IS NULL
BEGIN
SELECT @IDDOK_EMAIL = DE.IDDOK_EMAIL
,@EMAIL = ISNULL(@EMAIL, NULLIF(TRIM(DE.EMAIL), ''))
,@EMAIL_SUBJECT = NULLIF(TRIM(DE.EMAIL_SUBJECT), '')
,@EMAIL_BODY = NULLIF(TRIM(DE.EMAIL_BODY), '')
FROM DOK_EMAIL DE WITH (NOLOCK)
WHERE DE.IDSUBJOSOBA = @IDSUBJOSOBA
AND DE.IDTYPDOK IS NULL
--
IF @IDDOK_EMAIL IS NULL
BEGIN
SELECT @IDDOK_EMAIL = NULL
,@EMAIL = NULL
,@EMAIL_SUBJECT = NULL
,@EMAIL_BODY = NULL
END
END
Label_OUT:
-- pokud je vyplněný e-mail a je ve formátu HTML, je k němu třeba přidat počáteční a koncový tag
IF (@EMAIL_BODY IS NOT NULL) AND (LTRIM(@EMAIL_BODY) LIKE '<%')
BEGIN
SET @EMAIL_BODY = '<html><body>' + @EMAIL_BODY + '</body></html>'
END
--Vystup
INSERT @Dok_EMail
(
MF_SendMailTo
,MF_SendMailSubject
,MF_SendMailBody
)
SELECT MF_SendMailTo = @EMAIL
,MF_SendMailSubject = @EMAIL_SUBJECT
,MF_SendMailBody = @EMAIL_BODY
--
RETURN
END