Na základě Role – pole Povoleno pro role [1.2]
- VIDITELNÝ PRO VŠECHNY - necháme pole prázdné.
- VIDITELNÝ pro specifickou/é skupinu/y lidí – vyplníme role lidí, kteří mají dokument vidět.
- NEVIDITELNÝ pro všechny – vytvoříme speciální roli čistě pro skrývání dokumentů, kterou nebude mít nikdo přiřazenou.
Na základě Typů dokumentů
- Aktuálně (k 13.5.2025) je možné filtrovat dokumenty na detailu Účetního dokladu podle Typu účetního dokladu, resp. jeho Typů dokumentů.
V rámci kontextu Objednávka (agenda Prodejní objednávky) máme vytvořené 2 Dokumenty. Dokument s ID 4 je dodaný parametrizací, což poznáme podle upozornění [1.5] a vyplněného kódu [1.4]. Parametrizační dokumenty neupravujeme, ale pro provedení změny zkopírujeme jejich obsah a vytvoříme nový dokument. Nový dokument zobrazíme pouze požadovaným rolím [2.2] (nebo všem) a naopak parametrizační doument, který byl dosud zobrazován všem [1.2], nastavením rolí skryjeme, takže se nebude zobrazovat na detailu vybrané agendy.
U parametrizačních dokumentů upravujeme pouze pole, která se při aktualizaci systému nepřepíší. Jedná se o Povoleno pro role, Počet, Váha řazení, Šablona e-mailu a Skript po odeslání.
Pokud existuje alespoň jeden dokument s kontextem aktuální agendy, který nám není skrytý, zobrazí se na detailu karta Dokumenty [3.1]. Dokumenty s vyšší Váhou řazení [2.3] se zobrazí dříve [3.2]. Parametrizační dokumenty jsou podbarveny modře [3.3]. V závislosti na zvolené šabloně se nám zobrazí příslušné možnosti generování/vyplnění dokumentu a jeho stažení [3.4]/zobrazení [3.5]. Každý dokument lze navíc odeslat e-mailem [3.6].
Dokument je tvořen šablonou a do ní doplněnými daty.

Pro snazší tvorbu šablon použijte funkci náhledu kliknutím na ikonu oka .
V rámci šablony rozlišujeme hlavičku, tělo a patičku. Hlavička a patička se automaticky opakují na každé stránce vygenerovaného dokumentu v záhlaví, respektive v zápatí. Tělo představuje hlavní a zároveň povinnou část dokumentu (pokud šablonu nevkládáme souborem).
Doporučujeme zachovávat vzhled hlavičky a patičky šablony napříč dokumenty. Za tímto účelem jsme pro vás vytvořily fragmenty.
Pozor, nezaměňujte hlavičku, tělo a patičku šablony s HTML tagy
<head>,<body>a<footer>. Jednotlivé části šablony NEJSOU EKVIVALENTY tagů a v rámci každé části zapisujeme potřebné tagy zvlášť.
entity získáváme další potřebná data dle pravidel Jexlu.| Název funkce | Originál | Výsledek | Komentář |
|---|---|---|---|
| formatNumber | 1234567.7891 | 1 234 567,7891 | pokud není žádné číslo, nezobrazí se nic |
| formatNumberOrZero | jako formatNumber, ale pokud není žádné číslo, zobrazí se nula | ||
| formatCurrency | 1234567.7891 | 1 234 567,79 | pokud není žádné číslo, nezobrazí se nic |
| 1234567 | 1 234 567 | ||
| formatCurrencyOrZero | jako formatCurrency, ale pokud není žádné číslo, zobrazí se nula | ||
| formatCurrencyDecimal | 1234567.7891 | 1 234 567,79 | pokud není žádné číslo, nezobrazí se nic |
| 1234567 | 1 234 567,00 | ||
| formatCurrencyDecimalOrZero | jako formatCurrencyDecimal, ale pokud není žádné číslo, zobrazí se 0,00 | ||
| formatDate | 1999-05-04 | 04.05.1999 | |
| formatMonth | 1999-05-04 | 05/1999 | |
| convertMarkdownToHtml | ## Nadpis2 | <h2>Nadpis2</h2> |
pro správné konvertování obrázků je třeba do html hlavičky vložit <base href="{{#queryString}}{{/queryString}}">, eventuelně obrázkům nastavit absolutní cestu |
| queryString | {{#queryString}}nejaky text{{/queryString}} | https://my-company-name.factorify.cloudnejaky text |
|
| storagePath | {{#storagePath}}nejaky text{{/storagePath}} | https://my-company-name.factorify.cloud/nejaky text |
|
| encodeFileToBase64 | {{#encodeFileToBase64}}adresa obrázku{{/encodeFileToBase64}} | Pro zobrazení obrázku: <img src="{{#encodeFileToBase64}}adresa obrázku{{/encodeFileToBase64}}"> |
{{currentUser}}${currentUser}| Zástupka | Popis | Použití / Odvozené zástupky* | |
|---|---|---|---|
currentUser |
entita aktuálně přihlášeného uživatele | jméno člověka: currentUser.lastnameFirstname |
y |
today |
dnešní datum | ||
myCompany |
entita mé Společnosti dle aktuálně zvolené účetní jednotky | myCompany.www, myCompany.name... |
|
myBillingAddress |
entita mé doručovací Adresy | myBillingAddress.name, myBillingAddress.addressLine, myBillingAddress.zip... |
|
myBillingAddressForAccountingUnit |
entita Adresy nastavené na Účetní jednotce | stejné jako pro myBillingAddress | |
logoUrl |
url malého loga společnosti, které je nahráno na Účetní jednotce; použito v parametrizovaných dokumentech | Mustache: <img src="{{#encodeFileToBase64}}{{logoUrl}}{{/encodeFileToBase64}}"> Jexl: <img src="${files.encodeFileToBase64(logoUrl)}"> |
|
mediumLogoUrl |
url středního loga společnosti, které je nahráno na Účetní jednotce | viz logoUrl | |
companyColor |
barva společnosti nastavená na Účetní jednotce | ||
companyFileNumberText |
hodnota pole Zápis v obchodním rejstříku na Účetní jednotce | ||
title |
název dokumentu | ||
id |
id entity, ze které se tiskne dokument | ||
entity |
entita, ze které se tiskne dokument; při použití Jexlu na základě této zástupky většinou získáváme všechna potřebná data | specifické dle entity | |
accountingUnit |
entita aktuální účetní jednotky | accountingUnit.name, accountingUnit.address, accountingUnit.company, accountingUnit.accountingJournalStartingDate, accountingUnit.isDefault ... |
*Pro zjištění, jaká pole existují u zástupek pro entity, se použije zástupka pro celou entitu (například myCompany), tak se zobrazí všechna pole i s hodnotami a následně je možné vybrat požadovaná pole.
Entita často obsahuje další vnořené entity - jejich data také můžeme zobrazit: např.
accountingUnit.address.typezobrazí typ adresy.
Na konci dotazu nepíšeme středník!
Rozlišujeme 2 druhy parametrů:
:nazevParametru; zástupky často vyžadují přidání Parametrů dotazu s předem definovanými kódy (viz sloupec Podmínka).| Parametr (zástupka) | Poskytnutá data | Podmínka | Poznámka | |
|---|---|---|---|---|
:accountingUnitId |
ID aktuální účetní jednotky | x | ||
:balanceSheet |
List<QueryAccountingStatementRow>*** |
parametry dotazu s kódy startDate a endDate, nepovinně costCenterId, projectId |
||
:balanceSheetValidation |
List<AccountDocumentBalance> = [{"accountNumber", "kind", "ignoreInStatements", "amount", "initialAmount"}]*** |
parametry dotazu s kódy startDate a endDate, nepovinně costCenterId, projectId |
||
:batchBom |
BatchBillOfMaterial = {"batchId", "carrierId", "goodsId", "goodsCode", "goodsName", "quantity", "parts"}** |
parametr dotazu s kódem batchId |
||
:batchOrder |
BatchOrder = {"orderId", "salesOrderId"}** |
parametr dotazu s kódem batchId |
||
:batchTree |
List<BatchNode>*** |
parametr dotazu s kódem batchId |
||
:economicResult |
AccountMonthBalance** |
parametry dotazu s kódy startDate, endDate, nepovinně costCenterId, projectId, currency a accountIds |
||
:employerResponsibilityInsurance |
Map<ID osoby, částka>** |
parametry dotazu s kódy year a month |
||
:id |
ID aktuální entity | pro účely testování/náhledu doplníme i jako parametr dotazu | při generování z detailu se doplní automaticky | |
:incomeStatement |
List<QueryAccountingStatementRow>*** |
parametry dotazu s kódy startDate, endDate, nepovinně costCenterId, projectId |
||
:paymentQr |
informace o platbě | pro účely testování/náhledu je třeba doplnit parametr dotazu s kódem id | funguje pro Účetní doklad, který není typu dobropis, má vyplněný bankovní účet a ten má IBAN; zobrazení QR kódu v Jexlu: <img src="${queryService.queryString() + '/barcode?code=' + paymentQrAlias + '&type=QRCODE&height=200&width=200'}"/> zobrazení QR kódu v Mustache: <img src="{{#queryString}}/barcode?code={{paymentQrAlias}}&type=QRCODE&height=200&width=200{{/queryString}}"> |
|
:remainingHolidayDays |
List<RemainingHoliday> = [{"persond", "days"}]*** |
parametry dotazu s kódy year a month |
||
:supervisorStages |
List<StageSupervisor> = [{"id", "stageGroupId", "name", "type", "batchNoteEditable", "batches", "tasks"}]*** |
x | ||
:trialBalance |
List<AccountMoveGroup>*** |
parametry dotazu s kódy startDate a endDate, nepovinně costCenterId, projectId synthetic, currency a accountIds |
||
:userId |
ID aktuálně přihlášeného uživatele | x | ||
:vatReport |
Object** |
pro účely testování/náhledu je třeba doplnit parametr dotazu s kódem id |
pro kontext Hlášení DPH |
**zobrazením objektu se nám ukážou dostupná data (soupis klíčů a hodnot), převedením na JSON ( :batchBom::JSON AS example) k nim pak můžeme přistupovat pomocí dot notation: objekt.klic; například example.carrierId
***jedná se JSON pole (více JSON objektů), podobně jako u JSON objektu ho můžeme zobrazit, abychom viděli dostupná data, abychom k nim mohli přistupovat, musíme nejdříve získat jednotlivé JSON objekty
Pro unifikaci stylů, záhlaví a zápatí dokumentu používáme HTML fragmenty dokumentů, které vytváříme ve stejnojmenné agendě.
Fragmenty tvoříme, pokud mají využití alespoň ve dvouch dokumentech (na dvou místech).
Pro použití fragmentu v dokumentu používáme specifický zápis: {{#kód-fragmentu#}}, tedy např.: {{#head#}}.
Podle obsahu se fragment vloží do html hlavičky (<head>) - pokud se jedná např. o styly - nebo do těla (<body>) - když obsahuje html kód.
Aktuálně máme připravenou sadu 3 základních zástupek, respektive jejich variant pro Mustache či Jexl:
<head> do všech částí šablony.<body> Hlavičky HTML šablony<body> Patičky HTML šablonyPokud je ve fragmentu použita zástupka, ale požadujeme jinou hodnotu (typicky pro zástupku title), přepíšeme tuto hodnotu použitím dané zástupky jakožto aliasu v SQL dotazu, eventuelně můžeme hodnotu přepsat v Jexlu.
Fragment a dokument musí zobrazovat data stejným způsobem (Mustache NEBO Jexl)!
Příklad Hlavičky HTML šablony vytvořené za použití HTML fragmentů:
Kód
<!DOCTYPE html>
<html lang="cs">
<head>{{#head#}}</head>
<body>{{#jexl-header#}}</body>
</html>
Výsledek

Výchozím formátem je americký standard Letter. Pro nastavení A4 je třeba zapsat výšku a šířku stránky (297mm a 210mm).
V případě, že vyplníme i hlavičku (patičku), je pravděpodobné, že se bude překrývat s tělem. V tom případě je třeba nastavit i vrchní (spodní) okraj stránky. Pro boční okraje používáme standardně 10mm.
Pro zobrazení stránek (a dalších parametrů) se používají třídy - ty fungují pouze v rámci HTML hlavičky a HTML patičky šablony.
Dostupné třídy: pageNumber, totalPages, date, title, url
např.: <span class="pageNumber"></span>/<span class="totalPages"></span>
V hlavičce ani patičce nesmí být použit žádný odkaz!
Styly HTML hlavičky a HTML patičky se můžou vzájemně přepisovat. Pokud tedy např. v patičce nepoužijeme žádné styly, i tak se tam promítnou ty z hlavičky.
V případě, že v hlavičce i patičce chcete použít stejné styly, vkládejte je prosím do obou polí pro zachování funkčnosti při případné změně PDF generátoru.
Řešení (pokud nechceme, aby se styly v hlavičce a patičce vzájemně ovlivňovaly):
header .title { font-weight: bold; }. Případně zvolit specifické názvy tříd, např. footer-title.