AT END OF PAGE

Structured Mode-Syntax

[ATEND [OFPAGE [(rep)]
   statement ../graphics/dot3.gif
END-ENDPAGE

Reporting Mode-Syntax

[ATEND [OFPAGE [(rep)]

statement

DO statement ../graphics/dot3.gif DOEND

Dieses Dokument behandelt folgende Themen:

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

Verwandte Statements: AT TOP OF PAGE | CLOSE PRINTER | DEFINE PRINTER | DISPLAY | EJECT | FORMAT | NEWPAGE | PRINT | SKIP | SUSPEND IDENTICAL SUPPRESS | WRITE | WRITE TITLE | WRITE TRAILER

Gehört zur Funktionsgruppe: Erstellen von Ausgabe-Reports


Funktion

Mit dem AT END OF PAGE-Statement können Sie eine Verarbeitung angeben, die ausgeführt werden soll, wenn das Ende einer logischen Seite erreicht ist (End-of-Page-Bedingung; siehe Session-Parameter PS in der Parameter-Referenz). Eine End-of-Page-Bedingung kann auch aufgrund eines SKIP- oder NEWPAGE-Statements auftreten, nicht aber aufgrund eines EJECT- oder INPUT-Statements.

Siehe auch die folgenden Abschnitte im Leitfaden zur Programmierung::

Verarbeitung

Ein AT END OF PAGE-Statement-Block wird nur ausgeführt, wenn das Objekt, das den Statement- Block enthält, zu dem Zeitpunkt, zu dem die End-of-Page-Bedingung auftritt, aktiv ist.

Ein AT END OF PAGE-Statement darf nicht in einer internen Subroutine stehen.

Dieses Statement ist nicht prozedural (das heißt, seine Ausführung hängt von einem Ereignis ab, nicht davon, wo im Programm es steht).

Länge der logischen Seite

Da erst überprüft wird, ob eine End-of-Page-Bedingung besteht, nachdem ein DISPLAY- oder WRITE-Statement vollständig ausgeführt ist, kann es vorkommen, dass die von einem DISPLAY- oder WRITE-Statement erzeugte Ausgabe das Ende einer physischen Seite bereits überschritten hat, bevor eine End-of-Page-Bedingung entdeckt wird.

Um dies zu vermeiden und um sicherzustellen, dass über ein AT END OF PAGE-Statement ausgegebene Informationen wirklich am Ende einer physischen Ausgabeseite erscheint, muss die logische Seitenlänge (Session-Parameter PS) entsprechend kleiner als die Länge einer physischen Ausgabeseite gesetzt werden.

Letzte Seite

In einem Hauptprogramm ist eine End-of-Page-Bedingung auch dann gegeben, wenn die Ausführung des Programms durch ein ESCAPE-, STOP- oder END-Statement beendet wird.

In einer Subroutine gilt dies nicht; das heißt, ESCAPE-ROUTINE, RETURN oder END-SUBROUTINE lösen in einer Subroutine keine End-of-Page-Bedingung aus.

Systemfunktionen

Natural-Systemfunktionen können in Verbindung mit einem AT END OF DATA-Statement verwendet werden, wie im Abschnitt Systemfunktionen für Verarbeitungsschleifen benutzen in der Systemfunktionen-Dokumentation beschrieben.

Wenn eine Systemfunktion in einem AT END OF PAGE-Statement-Block verwendet wird, muss das betreffende DISPLAY-Statement eine GIVE SYSTEM FUNCTIONS-Klausel enthalten.

INPUT-Statement im AT END OF PAGE

Wenn Sie im AT END OF PAGE-Block ein INPUT-Statement verwenden, wird keine Seitenvorschub-Operation ausgeführt. Sie müssen in diesem Fall den Wert des Session-Parameters PS soweit reduzieren, dass die vom INPUT-Statement erzeugten Zeilen noch auf derselben physischen Seite Platz haben.

Siehe auch:

Syntax-Beschreibung

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
(rep)
Report-Spezifikation:
Mit der Notation (rep) kann ein bestimmter anderer Report angegeben werden, auf den sich das Statement beziehen soll. Es kann ein Wert von 0 bis 31 oder ein logischer Name, der mit einem DEFINE PRINTER-Statement zugewiesen wurde, angegeben werden.

Falls (rep) nicht angegeben wird, bezieht sich das AT END OF PAGE-Statement auf den ersten Report (Report 0).

Informationen zum Steuern des Formats eines mit Natural erzeugten Ausgabe-Reports siehe Steuerung der Ausgabe von Daten im Leitfaden zur Programmierung.

statement
Bei Eintreten der Bedingung auszuführende(s) Statement(s):

Im Structured Mode muss anstelle von statement je nach Situation eines oder mehrere passende Statements angeben werden. Siehe Beispiel weiter unten.

END-ENDPAGE
Ende des AT END OF PAGE-Statements:

Im Structured Mode muss das für Natural reservierte Schlüsselwort END-ENDPAGE zum Beenden des AT END OF PAGE-Statements benutzt werden.

Im Reporting Mode werden die Statements DO ... DOEND benutzt, um je nach Situation eines oder mehrere passende Statements anzugeben, und um das AT END OF PAGE-Statement zu beenden. Falls Sie nur ein einziges Statement angeben, können Sie die Statements DO ... DOEND weglassen. Das ist jedoch nicht im Sinne einer guten Kodierpraxis und wird nicht empfohlen.

statement
DO statement ... DOEND

Beispiele

Beispiel 1 — AT END OF PAGE

** Example 'AEPEX1S': AT END OF PAGE (structured mode)                  
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 JOB-TITLE                                                           
  2 SALARY    (1)                                                       
  2 CURR-CODE (1)                                                       
END-DEFINE                                                              
*                                                                       
FORMAT PS=10                                                            
LIMIT 10                                                                
READ EMPLOY-VIEW BY PERSONNEL-ID FROM '20017000'                        
  DISPLAY NOTITLE GIVE SYSTEM FunktionS                                 
          NAME JOB-TITLE 'SALARY' SALARY(1) CURR-CODE (1)               
  /*                                                                    
 
 AT END OF PAGE                                                        
    WRITE / 28T 'AVERAGE SALARY: ...' AVER(SALARY(1)) CURR-CODE (1)
  END-ENDPAGE


END-READ     
*            
END         

Siehe auch Systemfunktionen für Verarbeitungsschleifen.

Ausgabe des Programms AEPEX1S:

        NAME                  CURRENT            SALARY   CURRENCY
                             POSITION                       CODE  
-------------------- ------------------------- ---------- --------
                                                                  
CREMER               ANALYST                        34000 USD     
MARKUSH              TRAINEE                        22000 USD     
GEE                  MANAGER                        39500 USD     
KUNEY                DBA                            40200 USD     
NEEDHAM              PROGRAMMER                     32500 USD     
JACKSON              PROGRAMMER                     33000 USD     
                                                                  
                           AVERAGE SALARY: ...      33533 USD    

Äquivalentes Reporting-Mode-Beispiel: AEPEX1R.

Beispiel 2 — AT END OF PAGE mit INPUT-Statement

** Example 'AEPEX2': AT END OF PAGE (with INPUT)                        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 POST-CODE                                                           
  2 CITY                                                                
*                                                                       
1 #START-NAME (A20)                                                     
END-DEFINE                                                              
*                                                                       
FORMAT PS=21                                                            
*                                                                       
REPEAT                                                                  
  READ (15) EMPLOY-VIEW BY NAME = #START-NAME                           
    DISPLAY NOTITLE NAME FIRST-NAME POST-CODE CITY                      
  END-READ                                                              
  NEWPAGE                                                               
  /*                                                 
 AT END OF PAGE                                     
    MOVE NAME TO #START-NAME                         
    INPUT / '-' (79)                                 
          / 10T 'Reposition to name ==>'             
                #START-NAME (AD=MI) '(''.'' to exit)'
    IF #START-NAME = '.'                             
      STOP                                           
    END-IF                                           
  END-ENDPAGE
  /*                                                 
END-REPEAT                                           
END                                                 

Ausgabe des Programms AEPEX2S:

        NAME              FIRST-NAME        POSTAL           CITY              
                                           ADDRESS                             
-------------------- -------------------- ---------- --------------------      
                                                                               
ABELLAN              KEPA                 28014      MADRID                    
ACHIESON             ROBERT               DE3 4TR    DERBY                     
ADAM                 SIMONE               89300      JOIGNY                    
ADKINSON             JEFF                 11201      BROOKLYN                  
ADKINSON             PHYLLIS              90211      BEVERLEY HILLS            
ADKINSON             HAZEL                20760      GAITHERSBURG              
ADKINSON             DAVID                27514      CHAPEL HILL               
ADKINSON             CHARLIE              21730      LEXINGTON                 
ADKINSON             MARTHA               17010      FRAMINGHAM                
ADKINSON             TIMMIE               17300      BEDFORD                   
ADKINSON             BOB                  66044      LAWRENCE                  
AECKERLE             SUSANNE              7000       STUTTGART                 
AFANASSIEV           PHILIP               39401      HATTIESBURG               
AFANASSIEV           ROSE                 60201      EVANSTON                  
AHL                  FLEMMING             2300       SUNDBY                    
                                                                               
-------------------------------------------------------------------------------
         Reposition to name ==> AHL                  ('.' to exit)