AT BREAK

Structured Mode-Syntax

[AT] BREAK [(r)] [OF] operand1 [/n/]
   statement ../graphics/dot3.gif
END-BREAK

Reporting Mode-Syntax

[AT] BREAK [(r)] [OF] operand1 [/n/]

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: ACCEPT/REJECT | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | DELETE | END TRANSACTION | FIND | GET | GET SAME | GET TRANSACTION DATA | HISTOGRAM | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

Gehört zur Funktionsgruppe: Datenbankzugriffe und Datenbankänderungen


Funktion

Das Statement AT BREAK dient dazu, in einer mit FIND, READ, HISTOGRAM, SORT oder READ WORK FILE initiierten Verarbeitungsschleife eine an einen automatischen Gruppenwechsel geknüpfte Verarbeitung anzugeben. Mit dem AT BREAK-Statement können Sie ein oder mehrere andere Statements angeben, die jedesmal ausgeführt werden sollen, wenn der Wert eines bestimmten Feldes (Kontrollfeld) sich ändert.

Die automatische Gruppenwechsel-Verarbeitung funktioniert folgendermaßen: Unmittelbar nachdem ein Datensatz in der Verarbeitungsschleife gelesen worden ist, wird das Kontrollfeld geprüft. Wenn im Vergleich zum vorangegangenen Datensatz eine Wertänderung festgestellt wird, dann werden die im AT BREAK-Statement-Block enthaltenen Statements ausgeführt. Dies gilt nicht für den ersten Datensatz in der Verarbeitungsschleife. Zusätzlich wird am Ende der Verarbeitungsschleife (weil alle Datensätze gelesen sind oder wegen eines ESCAPE BOTTOM-Statements) eine letzte Ausführung der AT BREAK-Statement-Block enthaltenen Statements veranlasst.

Weitere Informationen siehe Automatische Gruppenwechsel-Verarbeitung im Leitfaden zur Programmierung.

Ein AT BREAK-Statement-Block wird nur ausgeführt, wenn das Objekt, das den Statement- Block enthält, zu dem Zeitpunkt, zu dem die Gruppenwechsel-Bedingung auftritt, aktiv ist.

Es ist auch möglich, mit einer AT BREAK-Verarbeitung eine weitere Verarbeitungsschleife zu initiieren. Die Schleife muss allerdings innerhalb der AT BREAK-Verarbeitung wieder beendet werden.

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

Natural-Systemfunktionen können in Verbindung mit einem AT BREAK-Statement benutzt werden, siehe Natural-Systemfunktionen für Verarbeitungsschleifen in der Systemfunktionen-Dokumentation und Beispiel für Systemfunktionen mit AT BREAK-Statement im Leitfaden zur Programmierung.

Weitere Informationen siehe auch den Abschnitt AT BREAK-Statement im Leitfaden zur Programmierung. Darin werden Themen behandelt wie zum Beispiel:

Syntax-Beschreibung

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1   S       A U N P I F B D T L       ja nein

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
(r)
Statement-Referenzierung:
Ein AT BREAK-Statement wird zum letztenmal ausgeführt, wenn eine mit FIND, READ, READ WORK FILE, HISTOGRAM oder SORT initiierte Verarbeitungsschleife beendet wird. Normalerweise bezieht sich das AT BREAK-Statement hierbei auf die äußerste aktive Schleife.

Wollen Sie, dass sich die abschließende AT BREAK-Verarbeitung auf eine andere offene Schleife bezieht (die Schleife, in der das AT BREAK-Statement steht, oder eine äußere Schleife), so verwenden Sie hierzu die Notation (r), wobei r das Statement-Label bzw. die Sourcecode-Zeilennummer des betreffenden schleifeninitiierenden Statements ist.

Beispiel:
0110 ...
0120 READ ...
0130   FIND ...
0140     FIND ...
0150       AT BREAK ...    
0160         FIND ...
0170         END-FIND
0180       END-BREAK
0190     END-FIND
0200   END-FIND
0210 END-READ
0220 ...
In diesem Beispiel bezieht sich die abschließende AT BREAK-Bedingung auf die in Zeile 0120 initiierte READ-Schleife. Es wäre auch möglich, sie an eine der in Zeile 0130 bzw. 0140 initiierten FIND-Schleifen zu knüpfen, nicht jedoch an die in Zeile 0160 initiierte.

Soll eine ganze Hierarchie von AT BREAK-Statements sich auf eine andere als die aktive Schleife beziehen, so müssen Sie die Notation (r) bei dem ersten AT BREAK-Statement angeben; sie bezieht sich dann auch auf alle innerhalb der Hierarchie folgenden AT BREAK-Statements.

operand1
Kontrollfeld:
In der Regel wird als Kontrollfeld ein Datenbankfeld verwendet. Sie können aber auch eine Benutzervariable nehmen, müssen diese allerdings vor der Gruppenwechsel-Verarbeitung definiert haben (siehe BEFORE BREAK PROCESSING-Statement). Sie können auch eine bestimmte Ausprägung eines Arrays als Kontrollfeld verwenden.
/n/
Notation /n/

Sie haben auch die Möglichkeit, einen Teil eines Feldes zum Kontrollfeld zu machen:

Mit der Notation /n/ geben Sie an, dass nur die ersten n Stellen (von links nach rechts) des Feldes als Kontrollfeld dienen sollen, d.h. das AT BREAK-Statement wird nur ausgeführt, wenn der Wert der ersten n Stellen sich ändert. Diese Möglichkeit besteht allerdings nur bei Feldern, die das Format A, B, N oder P haben.

Ein AT BREAK-Statement wird immer dann ausgeführt, wenn ein Gruppenwechsel stattfindet, das heißt, wenn der Wert des Kontrollfeldes sich ändert. Es wird außerdem ausgeführt, nachdem alle Datensätze in der Schleife, auf die sich das AT BREAK-Statement bezieht, verarbeitet worden sind.

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

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

END-BREAK
Ende des AT BREAK-Statements:

Im Structured Mode muss das für Natural reservierte Schlüsselwort END-BREAK zum Beenden des AT BREAK-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 BREAK-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

Gruppenwechsel auf mehreren Ebenen

Innerhalb einer Verarbeitungsschleife in demselben Programm-Modul können Sie mehrere AT BREAK-Statements verwenden. Damit schaffen Sie eine Hierarchie von AT BREAK-Statements, und zwar unabhängig davon, ob die AT BREAK-Statements unmittelbar aufeinander folgen oder zwischen ihnen noch andere Statements stehen. Das erste AT BREAK-Statement befindet sich auf der untersten Ebene der Hierarchie, jedes weitere auf einer nächsthöheren.

Für jede Schleife können Sie in einer Schleife eine eigene AT BREAK-Hierarchie aufbauen.

Beispiel:

Structured Mode: Reporting Mode:
   FIND ...
      AT BREAK
      ...
      END-BREAK
      AT BREAK
      ...
      END-BREAK       
      AT BREAK
      ...
      END-BREAK
   END-FIND
   ...
   FIND ...
      AT BREAK
         DO
         ...
         DOEND
      AT BREAK        
         DO
         ...
         DOEND
   ...

Bei einem Gruppenwechsel auf einer bestimmten Ebene werden auch alle AT BREAK-Statements auf jeweils untergeordneten Ebenen der Hierarchie ausgeführt, unabhängig davon, ob im Kontrollfeld einer unteren Ebene ebenfalls ein Gruppenwechsel stattgefunden hat.

Der Übersichtlichkeit halber empfiehlt es sich, die einzelnen AT BREAK-Statements einer Hierarchie unmittelbar aufeinanderfolgen zu lassen.

Siehe auch Beispiel 3 und den Abschnitt Gruppenwechsel auf mehreren Ebenen im Leitfaden zur Programmierung.

Beispiele

Weitere Beispiele für AT BREAK siehe Systemfunktionen in Verarbeitungsschleifen, Beispiele ATBEX3 und ATBEX4.

Beispiel 1 — AT BREAK

** Example 'ATBEX1S': AT BREAK (structured mode)                        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 COUNTRY                                                             
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 10                                                                
READ EMPLOY-VIEW BY CITY                                         
AT BREAK OF CITY                                                      
    SKIP 1                                                              
  END-BREAK
  DISPLAY NOTITLE CITY (IS=ON) COUNTRY (IS=ON) NAME                     
END-READ                                                                
*                                                                       
END                                                                    

Ausgabe des Programms ATBEX1S:

        CITY         COUNTRY         NAME        
-------------------- ------- --------------------
                                                 
AIKEN                USA     SENKO               
                                                 
AIX EN OTHE          F       GODEFROY            
                                                 
AJACCIO                      CANALE              
                                                 
ALBERTSLUND          DK      PLOUG               
                                                 
ALBUQUERQUE          USA     HAMMOND             
                             ROLLING             
                             FREEMAN             
                             LINCOLN             
                                                 
ALFRETON             UK      GOLDBERG            
                                                 
ALICANTE             E       GOMEZ              

Äquivalentes Reporting-Mode-Beispiel: ATBEX1R.

Beispiel 2 — AT BREAK mit der Notation /n/

** Example 'ATBEX2': AT BREAK (with /n/ notation)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 DEPT                                                                
  2 NAME                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 10                                                                
READ EMPLOY-VIEW BY DEPT STARTING FROM 'A'                              
AT BREAK OF DEPT /4/                                                  
    SKIP 1                                                              
  END-BREAK
  DISPLAY NOTITLE DEPT NAME                                             
END-READ                                                                
*                                                                       
END                                                                    

Ausgabe des Programms ATBEX2:

DEPARTMENT         NAME        
   CODE                        
---------- --------------------
                               
ADMA01     JENSEN              
ADMA01     PETERSEN            
ADMA01     MORTENSEN           
ADMA01     MADSEN              
ADMA01     BUHL                
ADMA02     HERMANSEN           
ADMA02     PLOUG               
ADMA02     HANSEN              
                               
COMP01     HEURTEBISE          
COMP01     TANCHOU            

Beispiel 3 — AT BREAK mit Gruppenwechseln auf mehreren Ebenen

** Example 'ATBEX5S': AT BREAK (multiple break levels) (structured mode)
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 DEPT                                                                
  2 NAME                                                                
  2 LEAVE-DUE                                                           
1 #LEAVE-DUE-L (N4)                                                     
END-DEFINE                                                              
*                                                                       
LIMIT 5                                                                 
FIND EMPLOY-VIEW WITH CITY = 'PHILADELPHIA' OR = 'PITTSBURGH'           
                 SORTED BY CITY DEPT                                    
  MOVE LEAVE-DUE TO #LEAVE-DUE-L                                        
  DISPLAY CITY (IS=ON) DEPT (IS=ON) NAME #LEAVE-DUE-L                   
  /*                                                                    
 AT BREAK OF DEPT                                                      
    WRITE NOTITLE /                                                     
          T*DEPT OLD(DEPT) T*#LEAVE-DUE-L SUM(#LEAVE-DUE-L) / 
  END-BREAK                                                   
  AT BREAK OF CITY                                            
    WRITE NOTITLE                                             
          T*CITY OLD(CITY) T*#LEAVE-DUE-L SUM(#LEAVE-DUE-L) //
  END-BREAK
END-FIND                                                      
*                                                             
END

Ausgabe des Programms ATBEX5:

        CITY         DEPARTMENT         NAME         #LEAVE-DUE-L
                        CODE                                     
-------------------- ---------- -------------------- ------------
                                                                 
PHILADELPHIA         MGMT30     WOLF-TERROINE           11       
                                MACKARNESS              27       
                                                                 
                     MGMT30                             38       
                                                                 
                     TECH10     BUSH                    39       
                                NETTLEFOLDS             24       
                                                                 
                     TECH10                             63       
                                                                 
PHILADELPHIA                                           101       
                                                                 
                                                                 
PITTSBURGH           MGMT10     FLETCHER                34       
                                                                 
                     MGMT10                             34       
                                                                 
PITTSBURGH                                              34      

Äquivalentes Reporting-Mode-Beispiel: ATBEX5R.