Integrace a komunikace s Flexibee – 08. Účetní deník se štítky

Aktualizováno: 15.05.2019 – Změna s agregačních funkcí SUM na MIN. Řeší problém s přidáváním duplicitních řádků více-štítkovými položkami. Úprava všech odkazů k aktualizovaným souborům.

Tento článek navazuje na předchozí příspěvek o sestavení účetního deníku. Nová verze zrcadlí standardní umístění sloupců v deníku. Rozšiřuje standardní deník z Flexibee o sloupec se štítky, typ dokladu, indikaci, zda je doklad účetní, dokladovou řadu, bankovní účet, kód banky, uživatele.

Chybí stav dokladu, párovací symbol (jež je často var. symbol) a název modulu.

Nová verze nástroje je ke zkopírování zde.

Protože se štítky získávají ze vztahu m:n, bylo zapotřebí přidat agregační funkce a určení pořadí agregace GROUP BY. V uživatelských dotazech nefungují standardní textové agregační funkce pro Postgresql, ale funguje Flexibee funkce SUMTEXT (wvybklice.kod).

Tím se celý dotaz zase zkomplikoval a přidání další sloupce vyžaduje dodržet omezení a přidat ručně nový sloupec do buňky s dotazem na listu result.

Uživatelský dotaz

Dotaz lze editovat potřeby. V hotové ukázce je zadaný parametr year pro, který filtruje položky na zaúčtované v daném roce.


WHERE EXTRACT(YEAR FROM datucto) = <<year>>

Ve vnitřním dotazu na položku stále zůstává podmínka:


WHERE dpolfak.ucetni= true and dpolfak.storno = false and dpolfak.stornopol = false AND ddoklfak.zuctovano = true

Ukázka je nahraná na demo a ulož.to. Teď už stačí jen soubor xml s uživatelským dotazem stáhnout a naimportovat jako xml.

Omezení vkládaných hodnot

Protože se z textu buňky vytváří pole do GROUP BY části dotazu je začátek textu v buňce omezený na např. dpolfak.modul a nebo na podmínku “CASE WHEN “. Vzorec, který získává z buňky v base pole v GROUP BY:


if(base!E$3;IF(ISERROR(MATCH(base!E19;$A$25:$A$150;0));trim(LEFT(REGEXREPLACE(base!E19;"\(?CASE WHEN ";"");IFERROR(FIND(" ";REGEXREPLACE(base!E19;"\(?CASE WHEN ";""))-1;999)));"");"")

Vysvětlení:


if(base!E$3;X;"")

Je v base zaškrtnuto, že se má sloupec objevit v group by? Pokud ne, prázdná hodnota.


IF(ISERROR(MATCH(base!E19;$A$25:$A$150;0));X;"")

Pokud je hodnota v poli $A$25:$A$150, tak nepatří do sloupec do GROUP BY. Mezi tyto hodnoty patří: null, ‘mdannakl’, ‘msplatkal’, ‘mucetodpisy’, ‘mdanodpisy’, ‘mudalosti’, 0

Do pole GROUP BY se dostane jen první řetězec a další část je odstřihnutá. Text doplňující název pole, tak musí následovat za jménem pole a mezerou. Například:

mleasing.kod || ‘ – daňové náklady’ as nazev

Kontrola

Generovaný standardní účetní deník je porovnaný s výsledkem účetního deníku z dotazu. Porovnané jsou kontingenční tabulky agregované podle čísla dokladu.


INDEX(Dotaz_kod!$A$4:$B$87,MATCH(A4,Dotaz_kod!$A$4:$A$87,0),2)

Návod

Postupujte podle oficielního manuálu nebo dle článku o uživatelských dotazech.

Budu rád za každou konstruktivní poznámku či připomínku do komentářů pod příspěvkem nebo mě přímo kontaktujte

 

Facebook Comments

Napište komentář.

This site uses Akismet to reduce spam. Learn how your comment data is processed.