Definice sestav - Pruhy v sestavě (bandy)
Každá tisková sestava se skládá z několika bloků, které jsou v editoru sestavy vyznačeny vodorovnými pruhy. Tyto nazýváme pruhy, nebo pásy sestavy (tzv. bands). V každém takovém pruhu je uvedena textová identifikace pruhu. Jinými slovy, chceme-li zadat nějaké položky do tohoto pruhu, musíme je do něj umístit.
Abychom pochopili, jak sestava funguje, musíme si uvědomit, že databáze obsahuje tabulky, tabulky obsahují záznamy, které mají nějaké položky. Tabulky tedy obsahují položky (sloupce) a záznamy (řádky). Zdrojem dat pro tiskovou sestavu je SQL dotaz do této databáze. Výsledek takového dotazu si můžeme představit jako seznam požadovaných záznamů, kde každý záznam má několik požadovaných položek (jinými slovy jako dvourozměrnou tabulku, kde v řádcích jsou požadované záznamy a ve sloupcích jejich položky). Tyto požadované záznamy a jejich položky mohou být v nejjednodušším případě přímo data z databáze, ve složitějším případě to mohou být již různé součty za vybrané záznamy v databázi. Objasníme na příkladu:
Příklad: Můžeme např. tisknout seznam faktur. Pak každá faktura je jedním záznamem v databázi a položkami této databáze jsou např. datum, firma, částka apod. SQL dotaz může vracet přímo tyto záznamy a jejich položky. V tiskové sestavě pak můžeme definovat různé součty za tyto faktury, např. dle měn.
Jiná možnost ovšem je, mít nadefinovaný složitější SQL dotaz do databáze, který již vrací příslušné součty.
V tiskové sestavě se mohou vyskytovat různé pruhy, které mohou být různým způsobem kombinované.
- Hlavička stránky - Položky zde uvedené se budou tisknout na začátku každé nové stránky. U formulářů dokladů zde typicky mohou být umístěny položky jako číslo dokladu, variabilní symbol apod. Mohou zde být i položky s podmínkou pro tisk, které se tisknou jen tehdy, je-li počet stránek více než 1, jako např. Jméno dodavatele a odběratele apod.
- Titulek - Položky v něm umístěné se budou tisknout pouze na první stránce celé tiskové sestavy. Typicky bude použit u sestav typu výpisy knih, kde do titulku bude umístěn např. název celé tiskové sestavy, jméno firmy, jejíž data jsou vypisována, Výběrové podmínky pro tisknutá data, Datum pořízení sestavy apod.
- Patička stránky - je ekvivalentní k Hlavičce stránky. Blok, v němž položky uvedené se budou tisknout vždy na konci každé stránky. Typicky se zde může tisknout např. číslo stránky.
- Hlavička sloupce - obdoba hlavičky stránky. Má význam pro sloupcové sestavy. (Počet sloupců se nastavují ve vlastnostech sestavy).
- Detail - Detail je základní částí sestavy. Lze jej chápat jako jakési "tělo" celé sestavy. V něm se vlastně zpracovávají údaje právě z té tabulky, přes kterou se v dané sestavě tiskne. Položky uvedené v pásu Detail se budou tisknout pro každý tisknutý záznam z databáze. Je to tedy základní blok, ve kterém musíte uvést seznam všech položek, které chcete o každém tisknutém záznamu vytisknout.
U sestav v něm typicky budou položky jako např. číslo dokladu, firma z dokladu, celková suma apod. Pak se projdou vybrané záznamy z databáze a pro každý se vytisknou položky Detailu, tedy číslo dokladu, firma a celková částka. Tiskneme-li např. 5 vybraných dokladů faktur, výsledkem bude seznam 5-ti řádků, v každém řádku budou údaje o jedné z tisknutých faktur. U sestav typu formuláře zde typicky budou údaje zadávané v hlavičkách tisknutých dokladů.
- Vnořené detaily (subdetaily) - Kromě Detailu se mohou v sestavě vyskytovat Vnořené detaily nebo-li Subdetaily. Používají se tehdy, pokud k jednomu tisknutému záznamu v pruhu Detail, je třeba vytisknout nějaké další záznamy, které se k němu váží a které jsou čerpány z jiného datového zdroje. Typickým příkladem jsou např. řádky faktury, které se váží k hlavičce faktury a je třeba je vytisknou ve formuláři faktury. Tedy formulář pro tisk faktury je nadefinován nad tabulkou faktur, pro každou tisknutou fakturu v Detailu vytiskne její hlavičkové údaje a v připojeném Subdetailu pak její řádky.
Vnořený detail může mít další vnořený detail a tak cyklicky dále - příkladem použití může být např. vnořený detail připojený k tisknuté skladové položce na řádku formuláře faktury pro tisk případných šarží/sériových čísel tedy napojený na tabulku Pohyby šarží/sér.č. Nebo další Vnořený detail napojený na tabulku objednávek, na kterém se vytisknou čísla objednávky, pokud nějaké byly čerpány do dané faktury , obdobně pro dodací listy apod.
Každý vnořený detail má definovaného Vlastníka. Defaultně je vlastníkem Sestava (tedy pak hlavní tabulka, přes kterou se tiskne Detail), ale vlastníkem může být i jiný Subdetail. Objasníme na příkladě:
Příklad: Mějme formulář faktury vydané. Detail je napojen na hlavní dataset, tedy MAIN, příslušného SQL dotazu.
Pod Detailem nechť je definován Subdetail1 pro tisk řádků k dané hlavičce faktury, tedy napojený na dataset ROWS. Tedy jeho Vlastník bude Sestava.
Pod Subdetailem1 s řádky nechť je umístěn další Subdetail2 pro tisk šarží k právě tisknutému řádku, tedy napojený na dataset BATCHES. Tedy jeho Vlastník bude Subdetail1.
Pod Subdetailem 2 bude dále v sestavě umístěn další Subdetail3 pro tisk dodacích listů k dané faktuře. Tedy bude napojen na dataset BillsOfDelivevery. Seznam dodacích listů chceme tisknout k faktuře, nikoliv ke každému řádku faktury, tudíž Vlastník bude sestava.
Pak tisk několika označených faktur probíhá tak, že se vezme hlavička první tisknuté faktury a vytisknou se položky na Detailu. Poté se vyhodnotí první subdetail vlastněný sestavou, tedy Subdetail1 a vytiskne se první řádek. Dále se vyhodnotí jím vlastněný Subdetail2 a vytiskne se seznam případných šarží pro první řádek. Poté se vezme další řádek a cyklus se opakuje až do zpracování všech řádků první faktury. Pak se pokračuje dalším subdetailem vlastněným sestavou, tedy Subdetailem3 a vytisknou se všechny DL navázané na danou fakturu. Pak se pokračuje až do konce sestavy. Nakonec se celý cyklus opakuje pro další fakturu až do vytištění formulářů všech označených faktur. - Hlavička vnořeného detailu - vnořený detail může mít svou hlavičku, do níž můžete umístit např. položky pro tisk nadpisu nad informacemi tisknutými dále v subdetailu, oddělující čáru apod.
- Patička vnořeného detailu - obdoba hlavičky subdetailu.
- Dále lze do sestavy přidávat další bloky – tzv. uživatelské skupiny. Každá skupina pak může mít Hlavičku skupiny a Patičku skupiny. Hlavička skupiny může být použita v sestavě samostatně bez Patičky skupiny, ale opačně to být nemůže, tj. v sestavě nemůže být Patička skupiny, aniž by tam byla Hlavička skupiny (jelikož v hlavičce skupiny se definuje, podle čeho se má skupinovat).
Pokud potřebujete mít v sestavě jen patičku, ale nemít hlavičku, lze to řešit např. tak, že hlavičce skupiny v sestavě nastavíte Podmínku pro tisk tak, aby se netiskla. Tj. hlavička skupiny se bude vyhodnocovat (tj. bude se podle její definice skupinovat), ale jen se nebude tisknout.
- Sestava může dále obsahovat pruh Shrnutí.
- Připojené pruhy - Jednotlivé pruhy zmíněné výše mohou mít jeden nebo více připojených pruhů. Připojený pruh se vyhodnocuje pro tentýž záznam z databáze ihned po vyhodnocení pruhu, k němuž je připojen. Jednotlivé připojené pruhy mohou mít různé podmínky pro tisk, pak se pro každou zpracovávanou větu vytisknou všechny, které mají splněnu podmínku pro tisk bez ohledu na svou hierarchii. Objasníme na příkladě:
Příklad: Mějme formulář faktury vydané. V něm mějme Subdetail1 (viz výše) pro tisk řádků faktury. Ve faktuře ale obecně mohou být až 4 typy řádků a my pochopitelně musíme definovat tisk položek pro každý typ jinak. Tedy např. přímo na pruh Subdetail1 můžeme umístit položky pro tisk z řádku typu 0 a Podmínku pro tisk řádku zadat tak, že se bude tisknout jedině tehdy, je-li typ roven 0.
Dále k Subdetailu1 přidáme Připojený pruh1 (např. přes Vlastnosti pruhu nebo přes lokální menu, viz Popis editoru tisk. sestav ) a do něj položky pro tisk z řádku typu 1 a Podmínku pro tisk tak, aby se pruh tiskl jedině pro řádky typu 1.
Dále k Subdetailu1 další Připojený pruh2 a do něj položky pro tisk z řádku typu 2 a Podmínku pro tisk tak, aby se pruh tiskl jedině pro řádky typu 2. Obdobně pro řádek typu 3.
Tisk pak probíhá tak, že na Detailu se vytisknou položky hlavičky faktury a začne se zpracovávat první řádek. Pro každý řádek se vyhodnotí pruh Subdetail1 a všechny jeho Připojené pruhy. Nechť je např. řádek typu 3. Tedy podmínka pro tisk pruhu Subdetail1 není splněna, žádná položka z něj se nevytiskne, podmínka Připojeného pruhu 1 není splněna, žádná položka z něj se nevytiskne, podmínka Připojeného pruhu 2 není splněna. Splněna je až podmínka Připojeného pruhu 3, tedy vytisknou se položky na něm umístěné (ty rovněž mohou mít vlastní podmínky pro tisk).
Pokud by Subdetail1 byl vlastníkem dalších subdetailů (např. pro tisk šarží, viz výše), zpracovaly by se ještě tyto subdetaily vlastněné řádkem a poté se celý cyklus opakuje pro další řádek faktury. - Cyklický pruh - Jak bylo zmíněno výše, pruhy tisk. sestavy se vykonávají postupně pro jednotlivé tisknuté záznamy z databáze. V žádném případě se nelze vracet v databázi po záznamech (tj. třeba na konci znovu všechny záznamy vyčítat apod.). Pokud je tedy třeba na závěr tisknout nějaké součty za tisknuté věty, je třeba si tyto součty průběžně načítávat a ukládat do paměťových proměnných definovaných pro danou sestavu nebo k tomuto účelu použít paměťové tabulky. Cyklický pruh je pak určen právě pro tisk z těchto paměťových tabulek.
Popis, jak jednotlivé pruhy do sestavy vložit, popis vlastností jednotlivých pruhů a vlastností prvků, které lze vkládat na pruhy, je uveden v kap. Popis editoru tiskových sestav.
Příklad: Na závěr uvedeme příklad struktury pruhů zobrazené pro sestavu v editoru sestav pomocí ikony jeho horizontálního panelu funkcí. Sestava má hlavičku (např. pro tisk čísla faktury) a k ní připojený pruh (pro tisk nadpisu k řádkům pro vícestránkové formuláře). V sestavě je použité skupinování (pro vyčíslení celkových slev na dokladu). Uvnitř skupiny je hlavní band Detail (pro tisk hlavičkových údajů faktury). K němu existuje několik subdetailů vlastněných Detailem (sestavou). Subdetail2 má několik Připojených pruhů (pro tisk řádků) (bandy související s aktuálním, na němž stojí kurzor, jsou graficky zvýrazněny). Dále je subdetail2 vlastníkem subdetailu1 (pro tisk šarží). Subdatail 3 (pro tisk zálohových listů), subdetail4 (pro tisk dodacích listů) a subdetail5 (pro tisk objednávek) mají všechny definovány své hlavičky subdetailu (pro tisk oddělující čáry). Dále patičku skupiny a k ní připojené pruhy (pro tisk sumárních informací za doklad). Pruh Shrnutí (např. pro nastavení nulování čítače stránek). Patička stránky (pro tisk informací o straně, na níž doklad pokračuje - pro vícestránkové doklady) a připojený pruh (pro tisk informací o tom, kdo doklad vystavil, kontakt na www dodavatele apod.):
Příklad struktury pruhů v sestavě pro tisk formuláře faktury.