<< | Inhaltsverzeichnis | Suchen | >> |
Die Report-Verwaltung ermöglicht die Erfassung, Änderung und Dokumentation von Report-Beschreibungen. Eine Report-Beschreibung enthält die Daten zur Generierung eines Reports.
Was ist ein
Report ?
Ein Report beschreibt eine Liste (oder ein Formular), die (das) vom EBUS-Programm ausgedruckt werden soll. Die Definition eines Reports im EBUS-GENERATOR-C ist so allgemein gehalten, daß jede beliebige Liste (bzw. jedes Formular) damit erstellt werden kann.
Jeder Report besteht aus maximal fünf Arten von Blöcken. Lediglich der Datenblock muß vorhanden sein, alle anderen Blöcke können fehlen. Ein Block gilt als 'vorhanden', wenn für ihn wenigstens eine Zeile definiert wurde.
a) Kopfblock |
Der Kopfblock wird am Beginn einer jeden Seite immer an der gleichen Stelle ausgedruckt. |
b) Fußblock |
Ebenso wird der Fußblock am Ende einer jeden Seite immer an der gleichen Stelle ausgedruckt. |
c) Datenblock |
Der Datenblock ist der sich wiederholende Teil des Reports. Im Normalfall wird für jeden Datensatz einmal der Datenblock gedruckt. In der Programmiersprache stehen jedoch Befehle zur Verfügung, mit denen diese Regel beliebig durchbrochen werden kann. |
d) Gruppenwechselblock |
Der Gruppenwechselblock wird jedesmal dann vor einem Datenblock gedruckt, wenn bei einem Reportfeld des Datenblockes Gruppenwechsel = <J> angegeben wurde und ein Gruppenwechsel auftrat (d.h. wenn sich der Wert des Reportfeldes im Vergleich zum vorhergehenden Datenblock geändert hat). Der Gruppenwechselblock kann z.B. dazu verwendet werden, Zwischensummen oder Hinweise zu drucken. |
e) Reportendeblock |
Der Reportendeblock wird am Ende des Reports hinter einem eventuellen Gruppenwechselblock gedruckt. Der Reportendeblock kann z.B. dazu benutzt werden, Endsummen auf der Liste auszudrucken. |
Ablauf eines
Reports im EBUS-Programm
Zuerst wird, falls vorhanden, der Reportkopf gedruckt.
Wenn für den Report eine Indexdatei angegeben wurde, so erfolgt intern ein START bzw. STARTS (entsprechend dem angegebenen Schlüssel), und der Datenblock wird gedruckt. Anschließend wird mit READ-NEXT bzw. READS-NEXT solange in der Indexdatei weitergelesen, bis das Dateiende erreicht ist oder in einem Macro des Reports der Befehl ENDREP ausgeführt wird. Für jeden gelesenen Datensatz wird einmal der Datenblock gedruckt.
Wenn für den Report keine Indexdatei angegeben wurde, so wird in endloser Wiederholung der Datenblock gedruckt. In diesem Fall muß über die Macros des Reports gesteuert werden, ob und welche Datensätze gelesen werden sollen. Ferner muß der Report über die Anweisung ENDREP in einem Macro beendet werden, sonst läuft er endlos.
Jeder Block besteht aus einer bestimmten Anzahl von Zeilen. Die Zeilen werden einzeln aufgebaut und gedruckt. Beim Aufbau der Zeile wird von links nach rechts für jedes Reportfeld der Zeile der Wert der zugehörigen Variablen an der Stelle des Reportfeldes eingefügt. Bevor jedoch der Wert eingefügt wird, wird der zu dem Reportfeld gehörende Macro-vorher ausgeführt (falls vorhanden). In den Macros können dadurch die Werte der aktuellen Reportvariablen noch beliebig verändert werden.
Wenn zu Beginn eines Datenblocks die Bedingung für einen Gruppenwechsel erfüllt ist, so wird vor dem Datenblock der Gruppenwechselblock gedruckt. Dabei ist zu beachten, daß erst am Ende des Datenblocks, also nach der Ausführung aller zum Datenblock gehörenden Macros, festgestellt werden kann, ob ein Gruppenwechsel vorliegt. Der Datenblock ist also schon vollständig gedruckt. Programmintern werden die Druckzeilen deshalb zwischengespeichert. Wenn ein Gruppenwechsel auftrat, werden zuerst die durch den bereits abgearbeiteten Datenblock veränderten Summenwerte zurückgesetzt, dann wird der Gruppenwechselblock gedruckt. Anschließend werden die zwischengespeicherten Zeilen des Datenblocks ausgegeben und die Summenfelder wieder aktualisiert.
Am Ende des Reports wird als letzter Block, falls vorhanden, der Reportendeblock gedruckt. Abschließend wird nur noch, wie auf jeder Seite, der Fußblock gedruckt (falls vorhanden).
Bevor jeweils einer der Blöcke Datenblock, Gruppenwechselblock oder Endeblock gedruckt wird, wird intern geprüft, ob die für diesen Block spezifizierte Anzahl von Zeilen auf der aktuellen Seite noch Platz hat. Falls nicht, so wird zuerst der Fußblock gedruckt, dann wird der Seitenzähler um 1 erhöht, anschließend wird der Kopfblock der nächsten Seite gedruckt, und erst dann der entsprechende Block. Mit den Anweisungen REPORT_DATABLOCKLENGTH, REPORT_GROUPBLOCKLENGTH und REPORT_ENDBLOCKLENGTH kann die in der Report-Verwaltung festgelegte Anzahl von Zeilen des entsprechenden Blocks geändert und damit ein anderes Seitenvorschubverhalten erreicht werden.
Befehle zur Report-Steuerung
In der Programmiersprache des EBUS-GENERATOR-C stehen eine Reihe spezieller Befehle für die individuelle Steuerung des Reportausdrucks zur Verfügung.
NEXTLINE |
Die aktuelle Reportzeile wird nicht gedruckt; es wird mit der nächsten Zeile des aktuellen Blocks fortgefahren. War die aktuelle Reportzeile die letzte Zeile des aktuellen Blocks, so wird mit dem nächsten Block fortgefahren. |
REPLINE <STRING-AUSDRUCK> |
Vor der aktuellen Zeile wird eine Zeile mit dem Inhalt von <STRING-AUSDRUCK> ausgedruckt. |
NEWLINE |
Vor der aktuellen Zeile wird eine Leerzeile ausgedruckt. (entspricht REPLINE ²²) |
NEXTREPFIELD |
Das aktuelle Reportfeld wird nicht ausgedruckt; es wird zum nächsten Reportfeld gesprungen. In der Druckzeile erscheinen anstelle des Feldes Leerzeichen. |
NEXTBLOCK |
Der aktuelle Block wird abgebrochen. Fortgesetzt wird mit der ersten Zeile des nächsten Blocks. Im Fußblock werden dabei noch soviele Leerzeilen gedruckt, bis die Anzahl der Zeilen des Blockes erreicht ist. (Dadurch wird sichergestellt, daß sich der Seitenanfang der nächsten Seite nicht verschiebt.) |
REPEATLINE |
Dieser Befehl ist nur im Datenblock wirksam. Nach dem Drucken der aktuellen Zeile wird nicht mit der nächsten Zeile fortgefahren, sondern die aktuelle Zeile wird erneut gedruckt. Dies wiederholt sich solange, wie in einem Macro der aktuellen Zeile der Befehl REPEATLINE ausgeführt wird. |
Seitenvorschub
im Report
Standardmäßig werden pro Seite soviele Zeilen gedruckt, wie in der Report-Beschreibung bei Report-Länge angegeben wurden. Es wird aber kein CHR$(12) (Steuerzeichen für Seitenvorschub) an den Drucker geschickt. Stimmt die Report-Länge nicht mit der Anzahl von Zeilen überein, die der Drucker auf einer Seite drucken kann, so ist der Reportausdruck ab der 2. Seite verschoben. Soll der Seitenvorschub über CHR$(12) gesteuert werden, so ist folgendermaßen vorzugehen:
In der ersten Zeile des Kopfblockes wird ein Macro angegeben mit folgendem Inhalt:
IF PAGE > 1
THEN LPRINT CHR$(12);
ENDIF
Ab der 2. Seite wird damit der Seitenvorschub für die vorhergehende Seite erzeugt. Der Seitenvorschub für die letzte Seite wird nach dem Reportaufruf gesendet.
REPORT #100
LPRINT CHR$(12);
Bei dieser Art der Steuerung des Seitenvorschubes darf in der Report-Beschreibung kein Eintrag bei Variable mit Druckdatei vorhanden sein. Vielmehr muß das Druckausgabegerät über die Anweisung PRINTER= gesteuert werden. Wird dies nicht beachtet, so druckt die Anweisung LPRINT entweder auf ein anderes Ausgabegerät oder dasselbe Ausgabegerät wird im EBUS-Programm zweimal geöffnet. Dies führt in jedem Fall zu einem fehlerhaften Programmablauf.