10.6 Codebeispiel zu IF 

In den folgenden Abschnitten gibt es Codebeispiele zu den verschiedenen, in diesem Kapitel vorgestellten Verzweigungen, Schleifen und logischen Ausdrücken. Den Anfang macht Listing 10.3 mit einem Beispiel für eine IF-Struktur.
1 *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE10_IF *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *&---------------------------------------------*
8
9 REPORT z_teilnehmerliste10_if.
10
11 * Workarea deklarieren
12 DATA: wa_zteilnehmer02 TYPE zteilnehmer02.
13
14 * Zeichenketten deklarieren
15 DATA: tz_pc_grundlagen TYPE i,
16 tz_netzwerktechnik TYPE i,
17 tz_sap_grundlagen TYPE i,
18 tz_sonst TYPE i,
19 tz_total TYPE i.
20
21 * Vollständigen Tabelleninhalt ausgeben
22 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02.
23 ORDER BY PRIMARY KEY
24 WRITE: / wa_zteilnehmer02-tnummer,
25 wa_zteilnehmer02-tname,
26 wa_zteilnehmer02-tgeburtsdatum,
27 wa_zteilnehmer02-tgeschlecht,
28 wa_zteilnehmer02-tkurspreis,
29 wa_zteilnehmer02-twaehrung,
30 wa_zteilnehmer02-zzkfztyp,
31 wa_zteilnehmer02-zzkurstitel.
32 ENDSELECT.
33 SKIP.
34
35 * Tabelleninhalt selektieren mit Bedingung
36 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02
37 WHERE zzkurstitel = 'Netzwerktechnik'.
38 ORDER BY PRIMARY KEY
39 WRITE: / wa_zteilnehmer02-tnummer,
40 wa_zteilnehmer02-tname,
41 wa_zteilnehmer02-tgeburtsdatum,
42 wa_zteilnehmer02-tgeschlecht,
43 wa_zteilnehmer02-zzkurstitel.
44 ENDSELECT.
45
46 * Alle Sätze aus der Tabelle lesen,
aber nur bestimmte Sätze verarbeiten
47 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02.
48 IF wa_zteilnehmer02-zzkurstitel =
'PC-Grundlagen'.
49 tz_pc_grundlagen = tz_pc_grundlagen + 1.
50 ENDIF.
51 ENDSELECT.
52 SKIP.
53 WRITE: / tz_pc_grundlagen, 'Personen besuchen
den Kurs PC-Grundlagen'.
54
55 * Alle Sätze der Tabelle lesen,
Anzahl der Kursteilnehmer grob aufteilen
56 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02.
57 IF wa_zteilnehmer02-zzkurstitel = 'SAP-Grundlagen'.
58 tz_sap_grundlagen = tz_sap_grundlagen + 1.
59 ELSE.
60 tz_sonst = tz_sonst + 1.
61 ENDIF.
62 ENDSELECT.
63 tz_total = tz_sap_grundlagen + tz_sonst.
64 SKIP.
65 WRITE: / 'von den',
66 / tz_total, 'Teilnehmern besuchten',
67 / tz_sap_grundlagen, 'den Kurs
SAP-Grundlagen, und',
68 / tz_sonst, 'sonstige Kurse'.
69
70 * Wieder benötigte Zähler initialisieren
71 CLEAR: tz_netzwerktechnik,
72 tz_pc_grundlagen,
73 tz_sap_grundlagen,
74 tz_sonst.
75
76 * Alle Sätze der Tabelle lesen,
Anzahl der Kursteilnehmer fein aufteilen
77 SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02.
78 IF wa_zteilnehmer02-zzkurstitel = 'Netzwerktechnik'.
79 tz_netzwerktechnik = tz_netzwerktechnik + 1.
80 ELSEIF wa_zteilnehmer02-zzkurstitel = 'PC-Grundlagen'.
81 tz_pc_grundlagen = tz_pc_grundlagen + 1.
82 ELSEIF wa_zteilnehmer02-zzkurstitel = 'SAP-
Grundlagen'.
83 tz_sap_grundlagen = tz_sap_grundlagen + 1.
84 ELSE.
85 tz_sonst = tz_sonst + 1.
86 ENDIF.
87 ENDSELECT.
88
89 SKIP.
90 WRITE: / 'Verteilung der Personen auf die Kurse:',
91 / tz_netzwerktechnik, 'Netzwerktechnik',
92 / tz_pc_grundlagen, 'PC-Grundlagen',
93 / tz_sap_grundlagen, 'SAP-Grundlagen',
94 / tz_sonst, 'sonstige Kurse'.
Listing 10.3 Report Z_TEILNEHMERLISTE10_IF
Anmerkungen zum Quellcode
Schauen Sie sich den Quellcode ab Zeile 36 genauer an.
Zeile 36 bis 44
Nur die Sätze, die die Bedingung erfüllen, dass im Feld für die Kursbezeichnung »Netzwerktechnik« steht, gelangen in die Verarbeitung. Die Verarbeitung wird durch Ausgabe in einer Liste simuliert.
[+] Vorteil Vorselektion
Diese Vorselektion ist zugleich der große Vorteil dieser Arbeitsweise; sie ist für bestimmte Fälle effizienter. Man kann sich gut vorstellen, dass es umso sinnvoller ist, sich gezielt die »richtigen« Sätze aus einer Tabelle herauszusuchen, je größer die Tabelle ist. Der Nachteil dieser Selektion mit Bedingung könnte sein, dass die anderen Sätze, die vielleicht auch verarbeitet werden sollen, aber eben anders, in diesem Beispiel überhaupt nicht gelesen werden und für eine Verarbeitung nicht zur Verfügung stehen. Es kommt wie immer auf die Aufgabenstellung an.
Zeile 47 bis 51
Alle Sätze der Tabelle werden gelesen. Zwischen Zeile 45 und 46 könnte man sich einen Verarbeitungsblock vorstellen, der für alle Sätze gleich ist. Zusätzlich werden die Sätze, die die Bedingung »PC-Grundlagen« erfüllen, gesondert verarbeitet: Sie durchlaufen einen eigenen Anweisungsblock und werden gezählt.
Zeile 53
Hier sehen Sie ein wichtiges Prinzip, vielleicht auch erst auf den zweiten Blick. In den Zeilen 47 bis 51 läuft eine Schleife. In der Schleife wird in den Zeilen 48 bis 49 die Anzahl der Teilnehmer für den Kurs »PC-Grundlagen« berechnet. Die Ausgabe des Ergebnisses, d. h. die Summe der Anzahl der Teilnehmer, darf erst nach der Schleife erfolgen; die Ausgabe in der Schleife wäre nur ein Zwischenergebnis. Das könnte zwar bei anderen Aufgabenstellungen sinnvoll sein, hier aber nicht. Denken Sie daher immer daran:
Zeile 56 bis 62
Wieder werden alle Sätze der Tabelle gelesen; hierbei werden zwei Summen ermittelt. Wenn das Feld WA_ZTEILNEHMER02-ZZKURSTITEL den Wert »SAP-Grundlagen« enthält, wird die Summe für diese Kursteilnehmer erhöht. Anderenfalls steigt die Summe für die Teilnehmer an den restlichen Kursen.
Zeile 63 bis 67
Aus beiden Gruppensummen wird die Gesamtsumme gebildet. In der Liste erscheinen die Gesamtanzahl der Kursteilnehmer, die Anzahl der Teilnehmer am Kurs »SAP-Grundlagen« und die Anzahl der Teilnehmer, die sonstige Kurse besuchen.
Zeile 71 bis 74
Die Summenfelder werden für die nachfolgenden Beispiele wieder benötigt und deshalb initialisiert.
Zeile 77 bis 87
Alle Sätze aus der Datenbanktabelle werden selektiert. Für jeden Satz werden nacheinander die Bedingungen geprüft. Erfüllt ein Satz die erste Bedingung, wird der erste Anweisungsblock ausgeführt und zu ENDIF verzweigt. Erfüllt der Satz die erste Bedingung nicht, wird geprüft, ob er die zweite Bedingung erfüllt etc. Es werden mehrere Fälle unterschieden und Gruppensummen für die Kurse »Netzwerktechnik«, »PC-Grundlagen« und »SAP-Grundlagen« gebildet. Die restlichen Kursteilnehmer fallen wieder unter eine Summe für die sonstigen Kurse.
Zeile 90 bis 94
Nach der SELECT-Schleife werden die Gruppensummen mit entsprechenden Texten in die Liste geschrieben.
Ausgabe des Quellcodes
Zur Kontrolle werden zunächst alle Sätze der Tabelle ausgelesen, hier insgesamt acht Sätze (siehe Abbildung 10.6). Dann erfolgt die Ausgabe der Treffersätze über die SELECT-Anweisung mit Bedingung; daran schließen sich die Ausgaben der Gruppensummen aus den einzelnen Beispielen an. Zur besseren Lesbarkeit wurde mit dem SKIP-Kommando jeweils eine Leerzeile eingeschoben; auf weitere optische Aufbereitungsoptionen wurde bewusst verzichtet.
Abbildung 10.6 Listbild zum IF-Beispiel