Definície zostáv - Pamäťové tabuľky
Jedným z prvkov, ktoré si môžete v rámci tlačových zostáv zaviesť a v definícii zostáv potom využívať sú pamäťové tabuľky. Pamäťovú tabuľku s výhodou použijete napr. typicky v nasledovných prípadoch:
- tlače účtovného denníka so sumárom na konci zostavy, kde sumár vzniká priebežným súčtovaním spracovaných a tlačených viet
- tlače účtovného denníka súvzťažne, so sumárom za každú tlačenú súvzťažnú skupinu
- tlač prehľadového sumára napr. na konci dokladu o skladových položkách použitých v riadkoch daného dokladu
- a všetky podobné tlače charakteru rôznych napočítaných sumárov zo záznamov tlačených v danej tlačovej zostave
Riešenie týchto prípadov prostredníctvom SQL dopytov by vo väčšine prípadov bolo príliš komplikované alebo až nereálne.
Pamäťovú tabuľku si môžeme predstaviť, ako typickú tabuľku s riadkami a stĺpcami. Pamäťovú tabuľku si nadefinujete pomocou funkčného tlačidla na definíciu pamäťových tabuliek v editore tlačových zostáv. Po jeho stlačení sa ponúkne dialógové okno na definíciu tabuľky:
Príklad modálneho dialógu pre definíciu pamäťovej tabuľky v zostave Účtovný denník.
V ľavej časti definičného okna je k dispozícii zoznam pamäťových tabuliek nadefinovaných pre danú tlačovú zostavu, pričom pomocou funkčných tlačidiel Nová a Zmazať si môžete nadefinovať ďalšie, prípadne súčasné zmazať.
Názov | Popis |
---|---|
Názov tabuľky | Názov, cez ktorý sa potom na danú tabuľku odkazuje definícia tlač. zostavy. |
Popiska pre zobrazenie | Názov, pod ktorým sa daná tabuľka ponúka v zozname dostupných dátových položiek objektu. |
V pravej časti potom definujete dátové stĺpce aktuálnej tabuľky z ľavej časti.
Názov | Popis |
---|---|
Názov stĺpca | Názov, cez ktorý sa potom na danú položku odkazuje definícia tlač. zostavy. |
Popiska pre zobrazenie | Názov, pod ktorým sa daná položka ponúka v zozname dostupných dátových položiek objektu. |
Typ | Zo skrytého zoznamu vyberiete, akého je položka typu. |
Triedenie | Môžete nadefinovať, či má byť tabuľka triedená a ako. Triedená bude podľa položky (stĺpca), na ktorej v okamihu nastavenia triedenia stojí kurzor, položka bude potom zvýraznená tučne. |
![]() ![]() |
Pomocou týchto tlačidiel je možné meniť poradie stĺpcov. |
Pokiaľ je tabuľka nadefinovaná, je k dispozícii rovnakým spôsobom ako všetky ostatné tabuľky, resp. jej položky sú k dispozícii rovnakým spôsobom ako sú dátové položky zdrojov dát nadefinovaných v DynSQL. Objasníme na príklade:
Príklad: Máme tlačovú zostavu na tlač účtovného denníka, v ktorej chceme v závere uviesť tlač prehľadového sumára obratov na jednotlivých účtoch, teda tabuľku účtov a ku každému obrat MD a obrat D, napočítaný z tlačených záznamov z denníka nad tým. Teda nadefinujeme si pamäťovú tabuľku napr. s názvom MT_SUM a popiskou Sumy a so stĺpcom Account, podľa ktorého budeme radiť, a ďalej stĺpcami Credit a Debet. Potom v definícii zostavy sa tieto položky budú ponúkať štandardne ako dátové položky objektu:
Nadefinované položky pamäťovej tabuľky sa ponúkajú ako dátové položky, ktoré sú v danej tlačovej zostave k dispozícii
Ďalej si napr. prostredníctvom scriptu nadefinovanom na pruhu Detailu definujeme, ako sa budú hodnoty tabuľky v priebehu tlače plniť:
NXVALUECREATE('X'); {vytvoření proměnné X}
NXMTFIND('MT_SUM','MT_SUM.Account=MAIN.CREDITACCOUNT_ID.CODE'); {dohledání, zda tabulka už daný účet obsahuje, zastaví se na prvním vyhovujícím záznamu}
IF(NXMTEOF('MT_SUM'),NXVALUESET('X',1),NXVALUESET('X',0)); {nastavení hodnoty proměnné X, podle toho, zda je aktuální záznam tabulky poslední}
IF(NXVALUEGET('X')=1,NXMTAPPEND('MT_SUM'),0); {podmíněné přidání záznamu do tabulky v závislosti na hodnotě X}
IF(NXVALUEGET('X')=1,NXMTSET('MT_SUM','Account',MAIN.CREDITACCOUNT_ID.CODE),0); {zapsání kódu účtu D do položky Account v závislosti na hodnotě X}
NXMTSET('MT_SUM','Credit',MAIN.Amount + NXMTGET('MT_SUM','Credit')); {povýšení částky D aktuálního záznamu v tabulce}
NXMTFIND('MT_SUM','MT_SUM.Account=MAIN.DEBITACCOUNT_ID.CODE');{povýšení částky MD aktuálního záznamu v tabulce}
IF(NXMTEOF('MT_SUM'),NXVALUESET('X',1),NXVALUESET('X',0));{jako výše pro účet D}
IF(NXVALUEGET('X')=1,NXMTAPPEND('MT_SUM'),0); {jako výše pro účet D}
IF(NXVALUEGET('X')=1,NXMTSET('MT_SUM','Account',MAIN.DEBITACCOUNT_ID.CODE),0); {jako výše pro účet D}
NXMTSET('MT_SUM','Debit',MAIN.Amount + NXMTGET('MT_SUM','Debit')); {jako výše pro účet D}
NXVALUEDESTROY('X'); {jako výše pro účet D}
A na záver zostáva si pamäťovú tabuľku už len vytlačiť, tzn. na pripojený pruh pod pruh Detail s tlačou účtovných záznamov, prípadne ešte pod iný Pripojený pruh s nadpismi, si môžeme napr. definovať MT_SUM.Account, NxMTGet('MT_SUM','Debit'), NxMTGet('MT_SUM','Credit') a ich rozdiel. Výsledná tlač potom môže vyzerať nasledovne:
Príklad tlače s využitím pamäťovej tabuľky
Potom môžeme položky nadefinovanej tabuľky následne využívať v definícii tlačovej zostavy prostredníctvom funkcií, ktoré sú k dispozícii pre prácu s tabuľkami, viď Editor výrazov, časť Funkcie.
Na vlastné umiestenie tabuľky v zostave je potrebné si uvedomiť ešte nasledujúce: v zostave je vždy len jeden pruh (band) hlavný - Detail, cez ktorý sa tlačia vety z "hlavnej" tabuľky. Preto je potrebné pamäťovú tabuľku umiestniť na pripojený pruh.
Pokiaľ chcete použiť tabuľku v jednej zostave opakovane (napr. po tlači každej skupiny účtovných viet z denníka vytlačiť súhrnné sumáre za danú skupinu), je potrebné použiť opakovací pruh a stanoviť mu počet opakovaní, a to tak, aby sa odvodilo od počtu spracovaných blokov.
V týchto prípadoch použitia nesmiete zabudnúť po každej tlači pamäťovú tabuľku vynulovať (aby sa údaje za ďalšiu skupinu sumovali znovu od nuly).