Funktion
Die GENERATE-Anweisung veranlasst das Listenprogramm, einen Teil der Liste in Übereinstimmung mit der Listenbeschreibung aus der REPORT SECTION der DATA DIVISION zu erzeugen.
Format
GENERATE {datenname | listenname}
Syntaxregeln
Der Datenname muss in der REPORT SECTION der DATA DIVISION als Name einer Postenleiste (01-Eintrag) definiert sein.
Der Listenname muss in einer Listenerklärung in der REPORT SECTION der DATA DIVISION als solcher (RD-Eintrag) definiert sein.
Infolge einer GENERATE-Anweisung, die eine Postenleiste anspricht, wird ein Teil der Liste gedruckt (siehe Regel 5).
Die Angabe eines Listennamens in einer GENERATE-Anweisung zeigt an, dass ein Teil der Liste erstellt werden soll (siehe Regel 8).
Das Listenprogramm erzeugt auf Grund einer GENERATE-Anweisung, in der eine Postenleiste angesprochen ist, einen Teil der Liste. Wie sich dieser Teil zusammensetzt, geben die Regeln 6 und 7 an. Außerdem werden im Allgemeinen diverse Summationen (siehe „SUM-Klausel") durchgeführt.
Bei der Ausführung der (chronologisch) ersten GENERATE-Anweisung (relativ zur Ausführung der entsprechenden INITIATE-Anweisung) werden für den Fall, dass sie eine Postenleiste angibt, folgende Leisten erstellt (vorausgesetzt, sie sind definiert):
Listenkopf
Seitenkopf
alle Gruppenköpfe von der höchsten zu der niedrigsten Hierarchiestufe und
die in der GENERATE-Anweisung angegebene Postenleiste.
Wenn eine GENERATE-Anweisung, die eine Postenleiste angibt, nicht als (chronologisch) erste Anweisung ausgeführt wird, dann prüft des Listenprogrammsteuersystem zuerst, ob ein Gruppenwechsel vorliegt. Ist dies der Fall, so erstellt es in der angegebenen Reihenfolge folgende Leisten:
alle Gruppenfüße vom niedrigsten bis einschließlich jenem Rang, auf dem der Gruppenwechsel stattfand, und alle Gruppenköpfe vom Rang des Gruppenwech sels bis zum niedrigsten hierarchischen Rang.
die in der GENERATE-Anweisung angegebene Postenleiste.
Punkt a) entfällt, wenn kein Gruppenwechsel eintrat.
Aufgrund einer GENERATE-Anweisung, die eine Liste angibt, führt das Listenprogramm dieselben Aktionen bis auf die Erstellung der Postenleiste aus, die nun entfällt. Es gibt gegenüber den Regeln 5, 6, und 7 keine zusätzlichen Aktionen.
Wenn im Laufe der Listenerzeugung die aktuelle Seite voll ist, dann erzeugt das Listenprogramm automatisch einen Seitenvorschub. Vor dem Seitenvorschub wird noch der Seitenfuß (falls vorhanden) und nach dem Seitenvorschub der Seitenkopf erstellt.
Allgemeine Regeln
Zu der Zeit, in der eine GENERATE-Anweisung mit der Angabe einer Postenleiste ausgeführt wird, müssen dem Listenprogramm folgende Informationen zur Verfügung stehen:
Jede Quellinformation, die der Postenleiste und allen übrigen Leisten, die infolge der GENERATE-Anweisung erzeugt werden, durch SOURCE-Klauseln zugeordnet ist.
Die numerischen Daten jener Summanden, die das Listenprogramm benötigt, um die erforderlichen Summen zu bilden.
Die Summenlistenerzeugung hat nur für solche Listen einen Sinn, für die auch Gruppenfüße definiert sind, in deren Beschreibung SUM-Klauseln enthalten sind.
Für Listen, in deren Beschreibungen mehr als eine Postenleiste definiert ist, sollte keine Summenlistenerzeugung vorgenommen werden, da bei der Summenlistenerzeugung zu den einzelnen Postenleisten keine Beziehung hergestellt werden kann.
Das CBL-CTR-Sonderregister (siehe Abschnitt „CBL-CTR-Sonderregister") wird bei der Ausführung der (chronologisch) ersten GENERATE-Anweisung vom Listenprogramm abgefragt. Indem der Programmierer durch eine MOVE-Anweisung dieses Sonderregister zwischen den Ausführungen der INITIATE- und der (chronologisch) ersten GENERATE-Anweisung mit einem der möglichen Werte belegt, kann er eine oder sogar beide der folgenden wahlweisen Funktionen anfordern:
Die Versorgung der Gruppenfüße, des Seitenfußes und des Seitenkopfes mit den passenden Werten der Gruppenwechseldatenfelder.
Die bedingte Ausführung der NEXT GROUP-Klauseln der Gruppenfüße (siehe „CBL-CTR-Sonderregister").