Dieses Dokument beschreibt verschiedene Möglichkeiten, wie Sie den Seitenumbruch in einem Report sowie die Ausgabe von Seitenüberschriften am Anfang jeder Seite des Reports und die Erzeugung von Leerzeilen in einem Ausgabe-Report beeinflussen können.
Folgende Themen werden behandelt:
Natural generiert für jede über ein DISPLAY- oder
WRITE-Statement
erzeugte Ausgabeseite automatisch eine Standard-Kopfzeile. Diese Kopfzeile
enthält die Seitennummer sowie Datum und Uhrzeit.
Beispiel:
WRITE 'HELLO' END
Das obige Programm erzeugt folgende Ausgabe mit einer Standard-Kopfzeile:
Page 1 04-12-14 13:19:33
HELLO
Falls Sie Ihren Report ohne Kopfzeile ausgeben möchten, geben Sie im
DISPLAY- bzw.
WRITE-Statement das
Schlüsselwort NOTITLE an.
** Example 'DISPLX20': DISPLAY (with NOTITLE) ************************************************************************ DEFINE DATA LOCAL 1 EMPLOY-VIEW VIEW OF EMPLOYEES 2 CITY 2 NAME 2 FIRST-NAME END-DEFINE * READ (5) EMPLOY-VIEW BY CITY FROM 'BOSTON' DISPLAY NOTITLE NAME FIRST-NAME CITY END-READ END
Ausgabe des Programms DISPLX20:
NAME FIRST-NAME CITY
-------------------- -------------------- --------------------
SHAW LESLIE BOSTON
STANWOOD VERNON BOSTON
CREMER WALT BOSTON
PERREAULT BRENDA BOSTON
COHEN JOHN BOSTON
WRITE NOTITLE 'HELLO' END
Das obige Programm erzeugt folgende Ausgabe ohne Kopfzeile:
HELLO
Wenn Sie statt der Natural-Standard-Kopfzeile eine eigene Kopfzeile
ausgeben möchten, verwenden Sie dazu das Statement
WRITE TITLE.
In diesem Abschnitt werden folgende Themen behandelt:
Mit dem Statement WRITE
TITLE geben Sie (in Apostrophen) den Text Ihrer Kopfzeile
an.
WRITE TITLE 'THIS IS MY PAGE TITLE' WRITE 'HELLO' END
Mit dem obigen Programm wird die folgende Ausgabe erzeugt:
THIS IS MY PAGE TITLE
HELLO
Mit der SKIP-Option
des WRITE
TITLE-Statements können Sie bestimmen, wieviele Leerzeilen
unter der Kopfzeile ausgegeben werden sollen. Nach dem Schlüsselwort
SKIP geben Sie die Anzahl der gewünschten Leerzeilen an:
WRITE TITLE 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
Mit dem obigen Programm wird die folgende Ausgabe erzeugt:
THIS IS MY PAGE TITLE
HELLO
SKIP kann nicht nur in einem
WRITE
TITLE-Statement, sondern auch als eigenständiges Statement
verwendet werden.
Standardmäßig wird die Kopfzeile zentriert und ohne Unterstreichung ausgegeben.
Das WRITE
TITLE-Statement bietet Ihnen aber auch die Möglichkeit, eine
Seitenüberschrift linksbündig (LEFT JUSTIFIED) und/oder
unterstrichen (UNDERLINED) auszugeben.
| Option | Auswirkung |
|---|---|
LEFT JUSTIFIED |
Bewirkt, dass die Überschrift linksbündig angezeigt wird. |
UNDERLINED |
Bewirkt, dass die Überschrift unterstrichen
angezeigt wird. Das Unterstreichen legt die Breite der Zeile fest (siehe auch
Natural Profil- und Session-Parameter LS).
Standardmäßig werden Überschriften mit einem Bindestrich (-)
unterstrichen. Mit dem Session-Parameter |
Das folgende Beispiel zeigt die Auswirkungen der Optionen
LEFT JUSTIFIED und
UNDERLINED:
WRITE TITLE LEFT JUSTIFIED UNDERLINED 'THIS IS MY PAGE TITLE' SKIP 2 WRITE 'HELLO' END
Mit dem obigen Programm wird die folgende Ausgabe erzeugt:
THIS IS MY PAGE TITLE
-------------------------------------------------------------------------------
HELLO
Das WRITE
TITLE-Statement wird jedesmal ausgeführt, wenn eine neue
Reportseite initiiert wird.
In den folgenden Beispielen wird die Systemvariable
*PAGE-NUMBER in Verbindung mit dem Statement
WRITE TITLE zur Ausgabe der Seitenzahl in der Überschriftenzeile
benutzt.
** Example 'WTITLX01': WRITE TITLE (with *PAGE-NUMBER)
************************************************************************
DEFINE DATA LOCAL
1 VEHIC-VIEW VIEW OF VEHICLES
2 MAKE
2 YEAR
2 MAINT-COST (1)
END-DEFINE
*
LIMIT 5
*
READ VEHIC-VIEW
END-ALL
SORT BY YEAR USING MAKE MAINT-COST (1)
DISPLAY NOTITLE YEAR MAKE MAINT-COST (1)
AT BREAK OF YEAR
MOVE 1 TO *PAGE-NUMBER
NEWPAGE
END-BREAK
/*
WRITE TITLE LEFT JUSTIFIED
'YEAR:' YEAR 15X 'PAGE' *PAGE-NUMBER
END-SORT
END
Ausgabe des Programms WTITLX01:
YEAR: 1980 PAGE 1 YEAR MAKE MAINT-COST ----- -------------------- ---------- 1980 RENAULT 20000 1980 RENAULT 20000 1980 PEUGEOT 20000
Eine logische Seite ist die von einem Natural-Programm erzeugte Ausgabe.
Eine physische Seite ist Ihr Bildschirm, auf dem die Ausgabe angezeigt wird; oder es ist das Stück Papier, auf dem die Ausgabe ausgedruckt wird.
Falls mehr Zeilen ausgegeben werden als auf einen Bildschirm passen, ist die logische Seite länger als die physische Seite, und die restlichen Zeilen werden auf dem nächsten Schirm angezeigt.

Anmerkung:
Falls Informationen, die Sie unten auf dem Schirm anzeigen möchten
(z.B. mit einem WRITE
TRAILER- oder AT END
OF PAGE-Statement erzeugte Ausgaben), erst auf dem nächsten
Schirm ausgegeben werden, verkleinern Sie die logische Seitenlänge entsprechend
(mit dem Session-Parameter PS, wie unten
beschrieben).
Mit dem Parameter PS (Page Size for
Natural Reports) bestimmen Sie die maximale Anzahl der Zeilen einer (logischen)
Ausgabeseite.
Wenn die Anzahl der mit dem PS-Parameter
angegebenen Zeilen erreicht ist, dann erfolgt ein Seitenvorschub (es sei denn,
der Seitenvorschub wird über ein NEWPAGE- oder ein
EJECT-Statement
gesteuert; siehe unten).
Der PS-Parameter kann entweder auf Session-Ebene
mit dem Systemkommando GLOBALS
gesetzt werden oder innerhalb eines Programms mit den folgenden Statements:
FORMAT PS=nn
DISPLAY (PS=nn)
WRITE (PS=nn)
WRITE TITLE (PS=nn)
WRITE TRAILER (PS=nn)
INPUT (PS=nn)
Ein Seitenvorschub kann durch eine der folgenden Methoden erreicht werden:
Diese Methoden werden im Folgenden erörtert.
Mit dem Session-Parameter EJ (Page Eject)
bestimmen Sie, ob Seitenvorschübe ausgeführt werden sollen oder nicht.
Standardmäßig gilt EJ=ON, d.h. Seitenvorschübe werden wie
angegeben ausgeführt.
Wenn Sie EJ=OFF angeben, werden
Seitenvorschub-Informationen ignoriert. Dies kann bei Testläufen, bei denen
Seitenumbrüche keine Rolle spielen, sinnvoll sein, um Papier zu sparen.
Der Seitenvorschub-Parameter EJ kann auf
Session-Ebene mit dem Systemkommando GLOBALS
gesetzt werden:
GLOBALS EJ=OFF
Die Einstellung des EJ-Parameters wird
durch das EJECT-Statement
überschrieben.
Folgende Themen werden behandelt:
Das EJECT-Statement bewirkt einen
Seitenvorschub, ohne dass auf der neuen Seite eine Kopfzeile oder
Standard-Seitenüberschrift generiert wird. An Seitenanfang und Seitenende
gebundene Verarbeitungen wie WRITE
TRAILER oder AT END
OF PAGE, WRITE
TITLE, AT TOP OF
PAGE oder *PAGE-NUMBER
werden nicht ausgeführt.
Das EJECT-Statement hat Priorität vor
dem EJ-Parameter.
Das NEWPAGE-Statement hingegen
bewirkt einen Seitenvorschub mit Ausführung der für Seitenanfang und
Seitenende festgelegten Verarbeitungen. Eine Fußzeile wird ausgegeben, falls
spezifiziert; eine standardmäßige oder benutzerdefinierte Kopfzeile wird auf
der neuen Seite ausgegeben (es sei denn, das betreffende
DISPLAY- bzw.
WRITE-Statement enthält
die Option NOTITLE).
Wird kein NEWPAGE-Statement verwendet, so ergibt sich der
Seitenvorschub aus der mit dem Parameter PS definierten Seitenlänge (siehe
Seitenlänge - der
PS-Parameter oben).
Das NEWPAGE-
wie das EJECT-Statement
erlauben es, eine WHEN LESS
THAN n LINES LEFT-Klausel
anzugeben. Mit dieser Klausel geben Sie eine Zeilenanzahl
n an; das NEWPAGE- bzw.
EJECT-Statement wird dann nur ausgeführt, wenn zum Zeitpunkt der
Verarbeitung des Statements weniger als n Zeilen auf
der aktuellen Seite zur Verfügung stehen.
FORMAT PS=55 ... NEWPAGE WHEN LESS THAN 7 LINES LEFT ...
In diesem Beispiel ist die Seitenlänge mit 55 Zeilen angegeben.
Sind zu dem Zeitpunkt, zu dem das NEWPAGE-Statement verarbeitet
wird, auf der aktuellen Seite nur noch 6 oder weniger Zeilen übrig, wird das
NEWPAGE-Statement ausgeführt. Sind 7 oder mehr übrig, wird es
nicht ausgeführt, und der Seitenvorschub erfolgt in Abhängigkeit vom
PS-Parameter,
also nach 55 Zeilen.
** Example 'NEWPAX02': NEWPAGE (in combination with EJECT and
** parameter PS)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 JOB-TITLE
END-DEFINE
*
FORMAT PS=15
*
READ (9) EMPLOY-VIEW BY CITY STARTING FROM 'BOSTON'
AT START OF DATA
EJECT
WRITE /// 20T '%' (29) /
20T '%%' 47T '%%' /
20T '%%' 3X 'REPORT OF EMPLOYEES' 47T '%%' /
20T '%%' 3X ' SORTED BY CITY ' 47T '%%' /
20T '%%' 47T '%%' /
20T '%' (29) /
NEWPAGE
END-START
AT BREAK OF CITY
NEWPAGE WHEN LESS 3 LINES LEFT
END-BREAK
DISPLAY CITY (IS=ON) NAME JOB-TITLE
END-READ
END
Das NEWPAGE-Statement bietet
darüber hinaus eine WITH
TITLE-Option. Ohne diese Option wird entweder die
Standard-Kopfzeile ausgegeben oder ein WRITE TITLE-Statement bzw. eine
NOTITLE-Option
ausgeführt.
Mit der WITH TITLE-Option können Sie für einen mit
NEWPAGE ausgelösten Seitenvorschub eine eigene Kopfzeile ausgeben,
die dann Priorität vor allen anderen Seitenüberschrift-Anweisungen hat. Die
Syntax der WITH TITLE-Klausel entspricht der des WRITE
TITLE-Statements.
NEWPAGE WITH TITLE LEFT JUSTIFIED 'PEOPLE LIVING IN BOSTON:'
Das folgende Beispielprogramm zeigt die Verwendung des
PS-Parameters
und des NEWPAGE-Statements. Außerdem
wird hier die Natural-Systemvariable
*PAGE-NUMBER
verwendet, die jeweils die aktuelle Seitenzahl enthält.
** Example 'NEWPAX01': NEWPAGE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 CITY
2 DEPT
END-DEFINE
*
FORMAT PS=20
READ (5) VIEWEMP BY CITY STARTING FROM 'M'
DISPLAY NAME 'DEPT' DEPT 'LOCATION' CITY
AT BREAK OF CITY
NEWPAGE WITH TITLE LEFT JUSTIFIED
'EMPLOYEES BY CITY - PAGE:' *PAGE-NUMBER
END-BREAK
END-READ
END
Ausgabe des Programms NEWPAX01:
Beachten Sie, wann der Seitenvorschub erfolgt, sowie die Kopfzeile der neuen Seite:
Page 1 04-11-11 14:15:54
NAME DEPT LOCATION
-------------------- ------ --------------------
FICKEN TECH10 MADISON
KELLOGG TECH10 MADISON
ALEXANDER SALE20 MADISON
Seite 2:
EMPLOYEES BY CITY - PAGE: 2
NAME DEPT LOCATION
-------------------- ------ --------------------
DE JUAN SALE03 MADRID
DE LA MADRID PROD01 MADRID
Seite 3:
EMPLOYEES BY CITY - PAGE: 3
Folgende Themen werden behandelt:
Mit dem Statement WRITE
TRAILER können Sie einen Text in Apostrophen (') angeben, der
als Fußzeile am Ende jeder Seite ausgegeben werden soll.
WRITE TRAILER 'THIS IS THE END OF THE PAGE'
Das Statement wird ausgeführt vor einem SKIP- oder
NEWPAGE-Statement
oder am Ende einer logischen Seite.
Die Prüfung, ob das Ende einer logischen Seite erreicht ist, erfolgt
erst, nachdem ein WRITE- oder
DISPLAY-Statement
vollständig ausgeführt ist. Daher kann es vorkommen, dass der Umfang einer
logischen Seite (d.h. die Anzahl der mit einem DISPLAY- bzw.
WRITE-Statement ausgegebenen Zeilen) eine physische Seite
überschreitet, bevor das WRITE
TRAILER-Statement ausgeführt wird.
Um sicherzustellen, dass die Fußzeilen jeweils am Ende einer physischen
Seite erscheinen, sollten Sie die logische Seitenlänge (Session-Parameter
PS) so
festlegen, dass sie entsprechend kleiner als die physische Seitenlänge ist.
Standardmäßig wird die Seiten-Fußzeile zentriert auf der Seite und nicht unterstrichen ausgegeben.
Das WRITE
TRAILER-Statement bietet Ihnen aber auch die Möglichkeit,
eine Fußzeile linksbündig (LEFT JUSTIFIED) und/oder unterstrichen
(UNDERLINED) auszugeben:
| Option | Auswirkung |
|---|---|
LEFT JUSTIFIED |
Bewirkt, dass die Fußzeile linksbündig angezeigt wird. |
UNDERLINED |
Bewirkt, dass die Fußzeile unterstrichen
angezeigt wird. Das Unterstreichen erfolgt über die ganze Breite der Zeile fest
(siehe auch Natural Profil- und Session-Parameter
LS).
Standardmäßig werden Überschriften mit einem Bindestrich (−) unterstrichen. Mit
dem Session-Parameter UC können Sie aber
ein anderes Zeichen angeben, das als Zeichen zum Unterstreichen benutzt werden
soll (siehe Unterstreichungszeichen für
Überschriften).
|
Die folgenden Beispiele zeigen die Verwendung der Optionen
LEFT
JUSTIFIED und UNDERLINED des
WRITE
TRAILER-Statements:
WRITE TRAILER LEFT JUSTIFIED UNDERLINED 'THIS IS THE END OF THE PAGE'
** Example 'WTITLX02': WRITE TITLE AND WRITE TRAILER
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 FIRST-NAME
2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
*TIME
5X 'PEOPLE LIVING IN SALT LAKE CITY'
21X 'PAGE:' *PAGE-NUMBER /
15X 'AS OF' *DAT4E //
*
WRITE TRAILER UNDERLINED 'REGISTER OF' / 'SALT LAKE CITY'
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
DISPLAY NAME /
FIRST-NAME
'HOME/CITY' CITY
'STREET/OR BOX NO.' ADDRESS-LINE (1)
SKIP 1
END-READ
END
Das SKIP-Statement wird zum Erzeugen
von einer oder mehrerer Leerzeilen in einem Ausgabe-Report benutzt.
** Example 'SKIPX01': SKIP (in conjunction with WRITE and DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 CITY
2 NAME
2 FIRST-NAME
2 ADDRESS-LINE (1)
END-DEFINE
*
WRITE TITLE LEFT JUSTIFIED UNDERLINED
'PEOPLE LIVING IN SALT LAKE CITY AS OF' *DAT4E 7X
'PAGE:' *PAGE-NUMBER
SKIP 3
*
READ (2) EMPLOY-VIEW WITH CITY = 'SALT LAKE CITY'
DISPLAY NAME / FIRST-NAME CITY ADDRESS-LINE (1)
SKIP 1
END-READ
END
** Example 'SKIPX02': SKIP (in conjunction with DISPLAY VERT)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
2 JOB-TITLE
END-DEFINE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
DISPLAY NOTITLE VERT
NAME FIRST-NAME / CITY
SKIP 3
END-READ
*
NEWPAGE
*
READ (2) EMPLOY-VIEW WITH JOB-TITLE = 'SECRETARY'
DISPLAY NOTITLE
NAME FIRST-NAME / CITY
SKIP 3
END-READ
END
Mit dem Statement AT TOP OF
PAGE können Sie eine beliebige Verarbeitung angeben, die
jedesmal ausgeführt werden soll, wenn eine neue Reportseite beginnt.
Erzeugt das AT TOP OF PAGE-Statement eine Ausgabe, so wird
diese unterhalb der Seiten- Kopfzeile (mit einer Leerzeile dazwischen)
ausgegeben.
Standardmäßig erfolgt die Ausgabe linksbündig auf der Seite.
** Example 'ATTOPX01': AT TOP OF PAGE
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 BIRTH
2 CITY
2 JOB-TITLE
2 DEPT
END-DEFINE
*
LIMIT 10
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'
DISPLAY NOTITLE (AL=10)
NAME DEPT JOB-TITLE CITY 5X
MAR-STAT 'DATE OF/BIRTH' BIRTH (EM=YY-MM-DD)
/*
AT TOP OF PAGE
WRITE / '-BUSINESS INFORMATION-'
26X '-PRIVATE INFORMATION-'
END-TOPPAGE
END-READ
END
Ausgabe des Programms ATTOPX01:
-BUSINESS INFORMATION- -PRIVATE INFORMATION-
NAME DEPARTMENT CURRENT CITY MARITAL DATE OF
CODE POSITION STATUS BIRTH
---------- ---------- ---------- ---------- ---------- --------
CREMER TECH10 ANALYST GREENVILLE S 70-01-01
MARKUSH SALE00 TRAINEE LOS ANGELE D 79-03-14
GEE TECH05 MANAGER CHAPEL HIL M 41-02-04
KUNEY TECH10 DBA DETROIT S 40-02-13
NEEDHAM TECH10 PROGRAMMER CHATTANOOG S 55-08-05
JACKSON TECH10 PROGRAMMER ST LOUIS D 70-01-01
PIETSCH MGMT10 SECRETARY VISTA M 40-01-09
PAUL MGMT10 SECRETARY NORFOLK S 43-07-07
HERZOG TECH05 MANAGER CHATTANOOG S 52-09-16
DEKKER TECH10 DBA MOBILE W 40-03-03
Mit dem Statement AT END OF
PAGE können Sie eine beliebige Verarbeitung angeben, die
jedesmal ausgeführt werden soll, wenn das Ende einer Reportseite erreicht wird.
Erzeugt das AT END OF PAGE-Statement eine Ausgabe, so wird
diese unterhalb der (mit dem WRITE
TRAILER-Statement angegebenen)
Seiten-Fußzeile ausgegeben.
Standardmäßig erfolgt die Ausgabe linksbündig auf der Seite.
Dieselben Anmerkungen bezüglich logischer und physischer Seitenlängen,
die für das DISPLAY-
und WRITE-Statement
gelten (vgl. oben), treffen
auch auf das AT END OF
PAGE-Statement zu.
** Example 'ATENPX01': AT END OF PAGE (with system function available
** via GIVE SYSTEM FUNCTIONS in DISPLAY)
************************************************************************
DEFINE DATA LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 JOB-TITLE
2 SALARY (1)
END-DEFINE
*
READ (10) EMPLOY-VIEW BY PERSONNEL-ID = '20017000'
DISPLAY NOTITLE GIVE SYSTEM FUNCTIONS
NAME JOB-TITLE 'SALARY' SALARY(1)
/*
AT END OF PAGE
WRITE / 24T 'AVERAGE SALARY: ...' AVER(SALARY(1))
END-ENDPAGE
END-READ
END
Ausgabe des Programms ATENPX01:
NAME CURRENT SALARY
POSITION
-------------------- ------------------------- ----------
CREMER ANALYST 34000
MARKUSH TRAINEE 22000
GEE MANAGER 39500
KUNEY DBA 40200
NEEDHAM PROGRAMMER 32500
JACKSON PROGRAMMER 33000
PIETSCH SECRETARY 22000
PAUL SECRETARY 23000
HERZOG MANAGER 48500
DEKKER DBA 48000
AVERAGE SALARY: ... 34270
Siehe das folgende Beispielprogramm: