13.5.2. Klauzule LINE - - | celé-číslo | Formát: LINE NUMBER IS < PLUS celé-číslo > | NEXT PAGE | - - Funkce: Klauzule LINE určuje umístění řádků tiskové sestavy na stránce. Klauzule LINE smí být uvedena jak u položky s číslem úrovně 01, tak i u kterékoliv z podřízených položek. V popisu skupiny smí být i více položek s klauzulí LINE (a to v případě, že skupina má více než jeden řádek). Každá klauzule LINE vyjadřuje určitý posuv papíru v tiskárně. Při vytváření skupiny se prochází postupně popisem skupiny, přičemž každá klauzule LINE, na niž se narazí, způsobí příslušný posuv papíru. Na takto nastavený řádek se pak tisknou všechny dále popsané tiskové položky této skupiny (tj. položky s klauzulí COLUMN) až do další položky s klauzulí LINE anebo až do konce této skupiny sestavy. Pravidla: Z výše uvedené funkce klauzule LINE vyplývají následující požadavky: 1) Je-li klauzule LINE uvedena u některé položky (ať už tiskové nebo netiskové), mohou za popisem této položky následovat popisy dalších položek bez klauzule LINE; uvedená klauzule LINE se pak vztahuje na všechny tyto položky až do příští položky s klauzulí LINE anebo až do konce skupiny. Všechny tyto položky (pokud jsou ovšem tiskové) se budou tisknout na týž řádek, jehož umístění na stránce je nastaveno pomocí klauzule LINE. 2) Každá tisková položka (tj. každá elementární položka s klauzulí COLUMN) musí tímto způsobem patřit k některé klauzuli LINE. Je nepřípustné popsat tiskovou položku tak, aby ani u ní, ani u žádné dříve popsané položky v rámci téže skupiny nebyla uvedena klauzule LINE. 3) Netiskové položky (tj. položky popsané dle formátů 1 nebo 2 a dále elementární položky bez klauzule COLUMN) nemusí patřit k žádné klauzuli LINE, a i když k některé klauzuli LINE patří, je to zcela bezvýznamné. Je proto zcela rovnocenné, je-li první klauzule LINE v popisu skupiny uvedena hned u položky s číslem úrovně 01 anebo až u první její podřízené položky. 4) Pokud žádná z položek patřících ke skupině nemá uvedenu klauzuli LINE (což je přípustné pouze tehdy, když skupina neobsahuje žádnou tiskovou položku s klauzulí COLUMN), nedojde při vytváření této skupiny k žádnému posuvu papíru (s výjimkou posuvu způsobenému klauzulí NEXT GROUP, je-li uvedena) ani se nevytisknou žádné řádky. Všechny netiskové akce popsané pro tuto skupinu (sumarizace, vyvolání deklarativní sekce atd., viz popis příkazu GENERATE) se ovšem provedou normálně. 5) Je-li klauzule LINE uvedena u netiskové položky, za níž (až do příští položky s klauzulí LINE anebo až do konce skupiny) nejsou popsány žádné tiskové položky, pak tato klauzule LINE způsobí pouze odpovídající posuv papíru bez tisku a zvětšení položky LINE-COUNTER (viz dále). Může se jednat i o jedinou klauzuli LINE v celém popisu skupiny. 6) Je-li v popisu položky uvedena jak klauzule LINE, tak i klauzule COLUMN, pak na jejich vzájemném pořadí nezáleží; klauzule LINE se vždy uplatní přednostně, takže tato tisková položka se vždy tiskne již na řádek nastavený touto klauzulí LINE. Pravidla: 1) Celé-číslo uvedené v klauzuli "LINE celé-číslo" musí být kladné a smí mít nejvýše 3 cifry. Celé-číslo uvedené v klauzuli "LINE PLUS celé-číslo" musí být nezáporné (tzn. lze psát "LINE PLUS 0") a smí mít nejvýše 3 cifry. 2) Klauzule "LINE NEXT PAGE" nesmí být uvedena v popisu skupin REPORT HEADING, PAGE HEADING a PAGE FOOTING. U ostatních typů skupin smí být uvedena pouze pro první řádek skupiny (tj. pouze jako první klauzule LINE v popisu skupiny). 3) Je-li v rámci jedné skupiny uvedeno několik popisů s klauzulemi "LINE celé-číslo" (tzv. absolutní nastavení), musí být tyto popisy seřazeny tak, aby jejich celá čísla tvořila vzrůstající posloupnost. 4) Všechny popisy s klauzulemi "LINE celé-číslo" musí předcházet přede všemi popisy s klauzulemi "LINE PLUS celé-číslo" (tj. s tzv. relativním nastavením) v rámci téže skupiny sestavy. 5) Za popisem s klauzulí "LINE NEXT PAGE" (srv. bod 2) smí následovat popisy s klauzulemi "LINE celé-číslo" a za nimi ještě i popisy s klauzulemi "LINE PLUS celé-číslo". 6) Každá skupina sestavy se bez výjimky vždy tiskne celá na téže stránce, nikdy nemůže být rozdělena tak, aby její začátek ležel na jedné stránce a její konec na následující stránce. U normálních skupin (CH,DE,CF), jejichž první řádek je nastaven pomocí klauzule "LINE PLUS celé-číslo", zajišťuje splnění tohoto požadavku Generátor sestav, ve všech ostatních případech to musí zajistit uživatel sám (viz klauzuli PAGE, 13.4.2.). Je tedy vždy rozhodující pouze umístění prvního řádku skupiny (tj. účinek první klauzule LINE v popisu skupiny); další řádky skupiny vždy leží na téže stránce jako první řádek v předem určené vzdálenosti od něj a je zcela lhostejné, zda jejich umístění je určeno klauzulí "LINE celé-číslo" (která je ovšem přípustná jen tehdy, když umístění prvního řádku skupiny i všech ostatních předcházejících řádků je též určeno klauzulí "LINE celé-číslo" anebo klauzulí "LINE NEXT PAGE") anebo zda je určeno klauzulí "LINE PLUS celé-číslo" (relativně vzhledem k předcházejícímu řádku téže skupiny). 7) U skupiny REPORT FOOTING klauzule LINE pro první řádek skupiny určuje: - při tvaru "LINE NEXT PAGE", že se skupina bude tisknout sama jediná na poslední stránku tiskové sestavy; - při tvaru "LINE celé-číslo" nebo "LINE PLUS celé-číslo", že se skupina může tisknout na touž stránku, na níž byla vytisknuta poslední normální skupina (pokud se na tuto stránku ovšem ještě vejde). 8) Není-li v RD uvedena klauzule PAGE, jsou zakázány formáty "LINE celé-číslo" a "LINE NEXT PAGE"; je tedy přípustný pouze formát "LINE PLUS celé-číslo". Význam klauzule LINE: Posuv papíru určený klauzulí LINE lze názorně (leč ne zcela přesně) popsat takto: 1) Formát "LINE k" způsobí posuv papíru na k-tý řádek na této nebo na následující stránce (tzv. absolutní nastavení). 2) Formát "LINE PLUS k" způsobí posuv o k řádků od posledního vytisknutého nebo nastaveného řádku (tzv. relativní nastavení). Při formátu "LINE PLUS 0" se papír neposune a tiskne se znovu na poslední vytisknutý nebo nastavený řádek. 3) Formát "LINE NEXT PAGE" způsobí přechod na novou stránku a na ní posuv papíru na začátek oblasti odpovídající tisknuté skupině, jak je určeno klauzulí PAGE. Pro přesný popis funkce klauzule LINE označme: t=hodnota položky LINE-COUNTER na začátku vytváření skupiny (u skupin REPORT HEADING a PAGE HEADING se předpokládá t=1, přestože hodnota položky LINE-COUNTER je nulová); d=délka skupiny sestavy, tj. počet řádků skupiny od prvního do posledního vytisknutého řádku (obojí včetně; počítají se i vynechané řádky mezi prvním a posledním vytisknutým řádkem, nikoliv však vynechané řádky před prvním anebo za posledním vytisknutým řádkem způsobené první klauzulí LINE resp. klauzulí NEXT GROUP); k=kladné celé číslo uvedené v klauzuli LINE; celé-číslo-i (i=1,2,3,4,5) označuje celé-číslo-i definované pomocí klauzule PAGE (viz 13.4.2.). 1) Uvažujme formát "LINE k". a) Nechť tcelé-číslo-4 (při CH a DE) resp. t+k+d>celé-číslo-5 (při CF). Pak se přejde na novou stránku a na této nové stránce se papír posune na řádek s pořadovým číslem celé-číslo-3 (FIRST DETAIL). (Výjimka nastává, pokud předcházející normální skupina měla uvedenu klauzuli "NEXT GROUP m", přičemž byla hodnota LINE-COUNTERňm; pak se po přechodu na novou stránku papír posune až na (m+1)-ní řádek.) 3) Uvažujme formát "LINE PLUS k" pro první řádek ostatních typů skupiny (RH,PH,PF,RF). a) Při RH se papír posune na řádek s pořadovým číslem celé-číslo-2 + k na první stránce. b) Při PH se po přechodu na novou stránku papír posune na řádek s pořadovým číslem celé-číslo-2 + k. Výjimka nastává tehdy, jedná-li se o první stránku tiskové sestavy, na níž již je vytisknuto záhlaví RH (bez klauzule NEXT GROUP NEXT PAGE). Pak se papír posune na řádek s pořadovým číslem t+k. (V tomto jediném případě se záhlaví PH může tisknout na řádky s pořadovými čísly vyššími nebo rovnými celému-číslu-3 (FIRST DETAIL).) c) Při PF se papír posune na řádek s pořadovým číslem celé-číslo-5 + 1 + k. d) Při RF platí: - Je-li tócelé-číslo-5, posune se papír na řádek s pořadovým číslem celé-číslo-5 + 1 + k. - Je-li t>celé-číslo-5 (což může nastat pouze v případě, že před RF již byla na téže stránce vytisknuta skupina PF) a je-li současně t+k+dócelé-číslo-1, posune se papír o k řádků, tj. na (t+k)-tý řádek. - Je-li t>celé-číslo-5 a současně t+k+d>celé-číslo-1, přejde se na novou stránku a na ní se papír posune na řádek s pořadovým číslem celé-číslo-2 + k. 4) Při formátu "LINE PLUS k" pro nikoliv první řádek kterékoliv skupiny se papír posune o k řádků, tj. na (t+k)-tý řádek na téže stránce; předešlými pravidly je zaručeno, že se nepřekročí hranice určené klauzulí PAGE. 5) Při formátu "LINE NEXT PAGE" se přejde na novou stránku a na ní se papír posune na řádek s pořadovým číslem celé-číslo-3 (FIRST DETAIL) při normálních skupinách (CH, DE, CF) resp. na řádek s pořadovým číslem celé-číslo-2 (HEADING) při RF. (Výjimka nastává, pokud předcházející normální skupina měla uvedenu klauzuli "NEXT GROUP m", přičemž byla hodnota LINE-COUNTERňm; pak se přejde na novou stránku dvakrát za sebou, takže vznikne jedna prázdná stránka obsahující pouze skupiny PH a PF.) 6) Ve všech případech se do LINE-COUNTER uloží pořadové číslo toho řádku, na který se tiskárna posunula. Tiskové položky patřící k této klauzuli LINE se pak vytisknou na tento nastavený řádek. Posuv papíru po tisku se neprovádí, tiskárna zůstává stát na vytisknutém řádku. Další posuv papíru bude pak způsoben buďto další klauzulí LINE pro touž skupinu nebo klauzulí NEXT GROUP uvedenou v popisu téže skupiny anebo až první klauzulí LINE pro následující tisknutou skupinu. 7) Informace uvedené v tomto a v následujícím odstavci platí pouze za předpokladu, že uživatel nezměnil hodnotu položky LINE-COUNTER. 13.5.3. Klauzule NEXT GROUP - - | celé-číslo | Formát: NEXT GROUP IS < PLUS celé-číslo > | NEXT PAGE | - - Funkce: Klauzule NEXT GROUP určuje posuv papíru, který má být proveden po tisku posledního řádku této skupiny sestavy. Pravidla: 1) Celé-číslo uvedené v klauzuli "NEXT GROUP celé-číslo" anebo v klauzuli "NEXT GROUP PLUS celé-číslo" musí být kladné a smí mít nejvýše 3 cifry. 2) Klauzule NEXT GROUP smí být uvedena pouze v popisu položky s číslem úrovně 01 (neboť platí pro celou skupinu sestavy). 3) Klauzule NEXT GROUP nesmí být uvedena v popisu skupin PAGE HEADING, PAGE FOOTING a REPORT FOOTING. 4) U skupiny REPORT HEADING klauzule NEXT GROUP určuje: - při tvaru "NEXT GROUP NEXT PAGE", že se skupina bude tisknout sama jediná na první stránku tiskové sestavy; - při tvaru "NEXT GROUP celé-číslo" nebo "NEXT GROUP PLUS celé-číslo", že na téže stránce za RH mohou být vytisknuty ještě další skupiny (pokud ovšem klauzule NEXT GROUP u RH anebo klauzule LINE u první následující tisknuté skupiny tj. u skupiny PH, je-li popsána, nezpůsobí přechod na novou stránku). 5) Není-li v RD uvedena klauzule PAGE, jsou zakázány formáty "NEXT GROUP celé-číslo" a "NEXT GROUP NEXT PAGE"; je tedy přípustný pouze formát "NEXT GROUP PLUS celé-číslo". 6) V následujících případech se klauzule NEXT GROUP neuplatní a nezpůsobí žádný posuv papíru: a) Při vytváření skupiny CONTROL FOOTING, pokud nastala řídicí změna vyšší úrovně, než je úroveň řídicí položky uvedené v klauzuli TYPE za slovy CONTROL FOOTING. (Uplatní se tedy jedině klauzule NEXT GROUP od té skupiny CONTROL FOOTING, jejíž úroveň je rovna úrovni nastavší řídicí změny.) b) Pokud byl tisk této skupiny potlačen dosazením hodnoty 1 do položky PRINT-SWITCH v deklarativní sekci (pomocí příkazu "MOVE 1 TO PRINT-SWITCH" nebo příkazu "SUPPRESS PRINTING"). 7) I když skupina nemá uvedenu žádnou klauzuli LINE (a tedy nezpůsobí tisk žádných řádků), klauzule NEXT GROUP se u ní uplatní v plném rozsahu, je-li uvedena. 8) Klauzule NEXT GROUP uvedená v popisu skupiny REPORT HEADING nesmí způsobit posuv papíru na řádek s pořadovým číslem rovným celému-číslu-3 (FIRST DETAIL) nebo vyšším. 9) Je-li v popisu normální skupiny (CH,DE,CF) uvedena klauzule "NEXT GROUP celé-číslo", nesmí být toto celé-číslo menší než celé-číslo-3 (FIRST DETAIL) ani větší než celé-číslo-5 (FOOTING) z klauzule PAGE. Význam klauzule NEXT GROUP: Posuv papíru určený klauzulí NEXT GROUP lze názorně (leč ne zcela přesně) popsat takto: 1) Formát "NEXT GROUP k" způsobí posuv papíru na k-tý řádek na této nebo na následující stránce. 2) Formát "NEXT GROUP PLUS k" způsobí posuv o k řádků vzhledem k poslednímu řádku vytisknuté skupiny. 3) Formát "NEXT GROUP NEXT PAGE" způsobí přechod na novou stránku. Pro přesný popis funkce klauzule NEXT GROUP označme: t=hodnota položky LINE-COUNTER na začátku uplatňování klauzule NEXT GROUP, tj. pořadové číslo posledního vytisknutého řádku této skupiny; k=kladné celé číslo uvedené v klauzuli NEXT GROUP; celé-číslo-i (i=1,2,3,4,5) označuje celé-číslo-i definované pomocí klauzule PAGE (viz 13.4.2.). 1) Uvažujme formát "NEXT GROUP k". a) Nechť tcelé-číslo-5 (FOOTING). Pak se papír posune na řádek s pořadovým číslem celé-číslo-5 (FOOTING). Před tiskem příští normální skupiny pak nutně dojde k přechodu na novou stránku dle obvyklých pravidel pro klauzuli LINE. (Při vytváření skupiny REPORT HEADING tento případ nemůže nastat.) 3) Uvažujme formát "NEXT GROUP NEXT PAGE". a) Je-li tato klauzule uvedena v popisu skupiny REPORT HEADING, způsobí přechod na novou stránku již při vytváření této skupiny REPORT HEADING. b) Je-li tato klauzule uvedena v popisu libovolné normální skupiny s výjimkou skupiny CONTROL FOOTING FINAL, přičemž v sestavě není popsána skupina PAGE FOOTING, nedochází k žádnému posuvu papíru v tiskárně. Jediným výsledkem klauzule NEXT GROUP NEXT PAGE je pak uložení celého-čísla-5 (FOOTING) do položky LINE-COUNTER (v tomto výjimečném případě tedy nebude položka LINE-COUNTER obsahovat pořadové číslo toho řádku, na němž tiskárna právě stojí). Před tiskem příští normální skupiny pak nutně dojde k přechodu na novou stránku, a to přímo rychloposuvem z místa, kde tiskárna stála, načež se souhlas LINE-COUNTERu s aktuálním pořadovým číslem řádku zase obnoví. c) Je-li tato klauzule uvedena v popisu skupiny CONTROL FOOTING FINAL a dále v případě, že je uvedena v popisu libovolné jiné normální skupiny, přičemž však v sestavě je popsána skupina PAGE FOOTING, posune se papír na řádek s pořadovým číslem celé-číslo-5 (FOOTING) na téže stránce. Před tiskem příští normální skupiny pak nutně dojde (po vytvoření skupiny PAGE FOOTING) k přechodu na novou stránku dle obvyklých pravidel pro klauzuli LINE. 4) S výjimkou případu 3b se do položky LINE-COUNTER uloží pořadové číslo toho řádku, na který se papír v tiskárně posunul. Poznámka: U normálních skupin (CH,DE,CF) tedy klauzule NEXT GROUP nikdy nezpůsobí přechod na novou stránku v rámci vytváření té skupiny, v jejímž popisu je klauzule NEXT GROUP uvedena - je-li přechod na novou stránku potřebný, dojde k němu až na začátku vytváření následující normální skupiny (přičemž se vytvoří ještě skupina PAGE FOOTING, je-li popsána). Tato taktika je zvolena proto, aby v případě, že se jedná již o poslední tisknutou normální skupinu, za níž se budou tisknout již jen skupiny PF a RF, k přechodu na novou stránku "vyžádanému" klauzulí NEXT GROUP již vůbec nedošlo.