10.9 Codebeispiel zu WHILE und logischen Ausdrücken 

Unser letztes Code-Beispiel für dieses Kapitel in Listing 10.6 zeigt Ihnen die WHILE-Schleife und logische Ausdrücke im praktischen Einsatz.
1 *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE10_WHILE *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------*
8
9 REPORT z_teilnehmerliste10_while.
10
11 * Workarea deklarieren
12 DATA: wa_zteilnehmer02 TYPE zteilnehmer02.
13
14 * Felder deklarieren
15 DATA: jahr004 TYPE i,
16 jahr100 TYPE i,
17 jahr400 TYPE i,
18 sek TYPE i.
19
20 sek = 10.
21 * Rückwärtslaufender Sekundenzähler
22 WHILE sek > 0.
23 WRITE: sek.
24 sek = sek - 1.
25 ENDWHILE.
26 WRITE: / sek.
27 SKIP.
28
29 * Vollständigen Tabelleninhalt ausgeben
30 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
31 ORDER BY PRIMARY KEY.
32 WRITE: / wa_zteilnehmer02-tnummer,
33 wa_zteilnehmer02-tname,
34 wa_zteilnehmer02-tgeburtsdatum,
35 wa_zteilnehmer02-tgeschlecht,
36 wa_zteilnehmer02-tkurspreis,
37 wa_zteilnehmer02-twaehrung,
38 wa_zteilnehmer02-zzkfztyp,
39 wa_zteilnehmer02-zzkurstitel.
40 ENDSELECT.
41 SKIP.
42
43 * Schleife über alle Sätze der Tabelle,
Feld auf Intitialwert hin prüfen
44 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
45 ORDER BY PRIMARY KEY.
46 IF wa_zteilnehmer02-tgeburtsdatum IS INITIAL.
47 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-tname,
48 'fehlt Geburtsdatum, bitte
nachtragen'.
49 ENDIF.
50 ENDSELECT.
51 SKIP.
52
53 * Schleife über alle Sätze der Tabelle,
Feld auf Intervall hin prüfen
54 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
55 ORDER BY PRIMARY KEY.
56 IF wa_zteilnehmer02-tgeburtsdatum BETWEEN
'19690101' AND '19691231'.
57 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-tname,
58 wa_zteilnehmer02-tgeburtsdatum.
59 ENDIF.
60 ENDSELECT.
61 SKIP.
62
63 * Schleife über alle Sätze der Tabelle,
logisches Oder prüfen
64 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
65 ORDER BY PRIMARY KEY.
66 IF wa_zteilnehmer02-zzkurstitel =
'SAP-Finanzwesen' OR
67 wa_zteilnehmer02-zzkurstitel =
'SAP-Grundlagen'.
68 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-tname,
69 wa_zteilnehmer02-zzkurstitel.
70 ENDIF.
71 ENDSELECT.
72 SKIP.
73
74 * Schleife über alle Sätze der Tabelle,
logisches Und prüfen
75 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
76 ORDER BY PRIMARY KEY.
77 IF wa_zteilnehmer02-tgeschlecht = 'M' AND
78 wa_zteilnehmer02-zzkurstitel =
'PC-GRUNDLAGEN'.
79 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-tname,
80 wa_zteilnehmer02-tgeschlecht,
wa_zteilnehmer02-zzkurstitel.
81 ENDIF.
82 ENDSELECT.
83 SKIP.
84
85 * Schleife über alle Sätze der Tabelle,
logisches NOT prüfen
86 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
87 ORDER BY PRIMARY KEY.
88 IF NOT wa_zteilnehmer02-zzkurstitel(3) = 'SAP'.
89 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-zzkurstitel.
90 ENDIF.
91 ENDSELECT.
92 SKIP.
93
94 * Schleife über alle Sätze der Tabelle,
Schaltjahr prüfen
95 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
96 ORDER BY PRIMARY KEY.
97 jahr004 =
wa_zteilnehmer02-tgeburtsdatum(4) MOD 4.
98 jahr100 =
wa_zteilnehmer02-tgeburtsdatum(4) MOD 100.
99 jahr400 =
wa_zteilnehmer02-tgeburtsdatum(4) MOD 400.
100 IF NOT wa_zteilnehmer02-tgeburtsdatum IS INITIAL.
101 IF jahr400 = 0 OR jahr004 = 0 AND
NOT jahr100 = 0.
102 WRITE: / 'TNr.', wa_zteilnehmer02-tnummer,
wa_zteilnehmer02-zzkurstitel,
103 wa_zteilnehmer02-tgeburtsdatum(4).
104 ENDIF.
105 ENDIF.
106 ENDSELECT.
107 SKIP.
Listing 10.6 Report Z_TEILNEHMERLISTE10_WHILE
Anmerkungen zum Quellcode
Als Beispiel für die WHILE-Schleife bauen wir zunächst einen rückwärtslaufenden Countdown in den Report ein.
Zeile 20 bis 26
Bei der Ablauflogik des rückwärtslaufenden Sekundenzählers wird als Startwert 10 Sekunden gesetzt. Solange die Sekunden größer sind als 0, wird der Feldwert für Sekunden ausgegeben und die Anzahl der Sekunden um 1 vermindert. Da bei der WRITE-Anweisung in der Schleife kein Schrägstrich für den Neubeginn einer Zeile steht, erfolgt die Ausgabe der rückwärtslaufenden Sekunden in einer Druckzeile – so lange, bis das System von sich aus einen Zeilenumbruch vornimmt.
Zeile 44 bis 50
Alle Sätze der Tabelle werden gelesen. Bei jedem Satz prüft das System, ob das Geburtsdatum noch initial ist. Ist dies der Fall, taucht der entsprechende Satz in der Liste auf, sodass dort die Sätze für die Teilnehmer stehen, bei denen das Geburtsdatum noch nachzutragen ist. Auf diese Weise könnte man beispielsweise ungepflegte Felder in Sätzen finden und auflisten.
Zeile 54 bis 60
Wieder werden alle Sätze der Tabelle gelesen. Der aktuelle Satz wird daraufhin geprüft, ob er die Bedingung erfüllt, dass das Geburtsdatum, inklusive der Grenzen, zwischen dem 01.01.1969 und dem 31.12.1969 liegt. Ist die Bedingung erfüllt, durchläuft der Satz einen zusätzlichen Anweisungsblock, und alle Teilnehmer des Jahrgangs 1969 werden aufgelistet.
Zeile 64 bis 71
Es wird geprüft, ob ein Satz im Feld für die Kursbezeichnung als Inhalt »SAP-Finanzwesen« oder »SAP-Grundlagen« hat. Falls diese Bedingung erfüllt ist, durchläuft der Satz einen eigenen Anweisungsblock. Das Feld kann nur einen Inhalt haben; zwei dieser möglichen Inhalte sind günstig und erfüllen die Bedingung.
[ ! ] Groß- und Kleinschreibung
Beachten Sie wieder die Groß- und Kleinschreibung: Der Satz, der die Bedingung erfüllt, gelangt in die Liste. Ist die Schreibweise des Feldinhaltes nicht genau getroffen, erfüllt der Satz die Bedingung nicht und fehlt in der Liste.
Zeile 75 bis 82
Bei der Bedingung werden zwei Felder geprüft: Die Bedingung ist erfüllt, wenn im Feld für das Geschlecht der Geschlechtsschlüssel M eingetragen ist und im Feld für den Kurstitel »PC-Grundlagen«; der Satz läuft demnach durch den Anweisungsblock, wenn er für einen männlichen Teilnehmer des Kurses »PC-Grundlagen« ist. Nur die entsprechenden Sätze stehen anschließend in der Liste.
Zeile 88 bis 90
Die Bedingung lautet, dass an den ersten drei Stellen der Kursbezeichnung etwas anderes stehen muss als »SAP«. Ist diese Bedingung erfüllt, wird der Satz ausgelistet. Die Liste enthält anschließend alle Teilnehmer von »Nicht-SAP-Kursen«, mit anderen Worten alle Teilnehmer, die einen anderen als einen SAP-Kurs besuchen.
Zeile 97 bis 99
Im Feld JAHR004 wird der Rest der ganzzahligen Division des Geburtsjahres durch 4 abgelegt; das Geburtsjahr steht an den ersten vier Stellen des Geburtsdatums. Ist das Geburtsjahr ganzzahlig durch 4 teilbar, ist der Rest 0, d. h. dass der JAHR004-Feldinhalt 0 beträgt.
Analog wird mit den Feldern JAHR100 und JAHR400 verfahren. Die drei Zeilen entsprechen der Formulierung der drei einzelnen Teilbedingungen.
Zeile 100
In der Bedingung wird geprüft, ob das Geburtsdatum gepflegt ist. Wenn es gepflegt ist, hat das Geburtsjahr nicht mehr den Initialwert. Ist das Geburtsdatum gepflegt, geht die Satzverarbeitung in den nachfolgenden Anweisungsblock und prüft die nächste Bedingung.
Zeile 101 bis 104
In dieser Bedingung wird geprüft, ob die jeweiligen Reste der ganzzahligen Division gleich 0 sind. Die Bedingung selbst ist der verknüpfte logische Ausdruck der drei Teilbedingungen. Ist die Bedingung erfüllt, ist das Geburtsjahr ein Schaltjahr, und der Satz läuft in den Anweisungsblock – in unserem Beispiel ist es zur Anschaulichkeit wieder nur eine WRITE-Anweisung. In der Liste stehen anschließend die Sätze der Teilnehmer, die in einem Schaltjahr geboren sind.
Ausgabe des Quellcodes
Zunächst werden die rückwärtslaufenden Sekunden fortlaufend in einer Druckzeile ausgegeben und anschließend die Sätze der Tabelle aufgelistet (siehe Abbildung 10.10).
Abbildung 10.10 Listbild zum WHILE-Beispiel und logischen Ausdrücken
Der letzte Satz ist unvollständig, denn das Geburtsdatum ist nicht gepflegt. Im zweiten Block der Liste stehen die Sätze mit ungepflegtem Geburtsdatum; aufgrund der Datenkonstellation handelt es sich aber nur um einen Satz. Im dritten Block sind die Teilnehmer verzeichnet, die 1969 geboren sind. Auch hier ergibt sich durch die Daten in der Tabelle nur ein Treffersatz.
Im vierten Block stehen die Sätze der Teilnehmer, die an den Kursen »SAP-Grundlagen« und »SAP-Finanzwesen« teilnehmen. Beachten Sie wieder die genaue Schreibweise der Kursbezeichnungen.
Der fünfte Abschnitt der Liste enthält die männlichen Teilnehmer, die den Kurs »PC-GRUNDLAGEN« besuchen. In unserer Listausgabe ist dieser Abschnitt leer, da der Vergleich die Groß- und Kleinschreibung berücksichtigt und die Schreibweise mit ausschließlich Großbuchstaben in den vorhandenen Datensätzen nicht vorkommt. Wir sehen daher nur zwei Leerzeilen.
Der sechste Abschnitt enthält nur Sätze der Teilnehmer, die einen anderen als einen SAP-Kurs besuchen.
Im siebten und letzten Block finden Sie die Sätze der Teilnehmer, die in einem Schaltjahr geboren sind.