Rheinwerk < openbook > SAP-Wissen aus erster Hand
SAP-Wissen aus erster Hand.
 
Inhaltsverzeichnis
Vorwort zur vierten Auflage
1 ABAP und die ersten Schritte im SAP-System
2 ABAP Dictionary
3 Programmieren im ABAP Editor
4 Felder und Berechnungen
5 Modifikation von Zeichenketten
6 Debugging von Programmen
7 Modifikation von transparenten Datenbanktabellen
8 Rechnen mit Datum und Zeit, Mengen und Währungen
9 Mit Daten in einer Datenbanktabelle arbeiten
10 Programmablaufsteuerung und logische Ausdrücke
11 Selektionsbildschirme
12 Interne Tabellen
13 Modularisierung von Programmen
14 Weiterführende Themen
A Icons auf einen Blick
B Abkürzungsverzeichnis
C Die Autoren
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 23 KB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in ABAP von Karl-Heinz Kühnhauser, Thorsten Franz
Buch: Einstieg in ABAP

Einstieg in ABAP
Pfeil 10 Programmablaufsteuerung und logische Ausdrücke
Pfeil 10.1 Kontrollstrukturen
Pfeil 10.2 Arbeiten mit Mustern
Pfeil 10.3 Verzweigungen
Pfeil 10.3.1 IF-Struktur
Pfeil 10.3.2 CASE-Struktur
Pfeil 10.4 Schleifen
Pfeil 10.4.1 SELECT-Schleife
Pfeil 10.4.2 DO-Schleife
Pfeil 10.4.3 WHILE-Schleife
Pfeil 10.4.4 Abbruchanweisungen für Schleifen
Pfeil 10.5 Logische Ausdrücke
Pfeil 10.5.1 Einfache logische Ausdrücke
Pfeil 10.5.2 Verknüpfte logische Ausdrücke
Pfeil 10.6 Codebeispiel zu IF
Pfeil 10.7 Codebeispiel zu CASE
Pfeil 10.8 Codebeispiel zu DO und Abbruchbedingungen
Pfeil 10.9 Codebeispiel zu WHILE und logischen Ausdrücken
 
Zum Seitenanfang

10.3    Verzweigungen Zur vorigen ÜberschriftZur nächsten Überschrift

Eine Verzweigung entspricht dem umgangssprachlichen »Entweder-oder«: Als Entscheidungsgrundlage ist eine Bedingung formuliert. Diese Bedingung könnte einfach ein Zustand sein wie »es regnet« oder eine komplexe Bedingung, die aus vielen verschachtelten Bedingungen zusammengesetzt ist, beispielsweise: »Qualitätsklasse 1 gilt als erreicht, wenn die Qualitätskriterien 1 bis n erfüllt sind. Qualitätskriterium 1 ist erfüllt, wenn die Qualitätsmerkmale 1 bis n erfüllt sind. Qualitätsmerkmal 1 ist erfüllt, wenn …«.

In allen Fällen gilt, dass bestimmte Aktionen – im Quellcode Anweisungsblöcke – nur dann durchlaufen werden, wenn die Bedingung erfüllt ist. Mag es im umgangssprachlichen Bereich noch Interpretationsspielräume geben, wie eine Bedingung genau lautet und wann sie erfüllt ist, können im ABAP-Quellcode nur operationale, d. h. messbare Bedingungen und Zustände verwendet und geprüft werden. Hierzu werden Felder und Feldinhalte verglichen oder mit logischen Ausdrücken verknüpft.

Beim Abfragen von Feldinhalten muss unbedingt auf den exakten Inhalt geachtet werden. Groß- und Kleinbuchstaben, die Anzahl von Leerzeichen oder die Schreibweise von Abkürzungen ergeben für einen Computer völlig unterschiedliche Feldinhalte. Wenn Sie beispielsweise nach dem Feldinhalt »Netzwerktechnik« suchen, der aktuelle Feldinhalt aber »NETZWERKTECHNIK« lautet, ist die gesuchte Bedingung nicht erfüllt.

[»]  Unschöne Schreibweise

Mit ein wenig Fantasie kann man sich vorstellen, dass es enorm viele Möglichkeiten gibt, Feldinhalte so auszufüllen, dass zwar der Mensch noch weiß, was gemeint ist, der Computer aber aus formalen Gründen die Bedingung nicht erfüllt sieht. Man versteht deshalb vielleicht auch besser, warum sich manchmal die unschöne Schreibweise mit ausschließlich Großbuchstaben so hartnäckig hält: In einem Datenfeld, das ausschließlich Großbuchstaben zulässt, fällt es schwerer, durch versehentliche Abweichungen in der Groß- und Kleinschreibung Dubletten oder falsch zuordenbare Einträge zu erzeugen. Betrachten Sie die Listbilder in diesem Kapitel auch unter diesem Blickwinkel.

 
Zum Seitenanfang

10.3.1    IF-Struktur Zur vorigen ÜberschriftZur nächsten Überschrift

Die einfachste Kontrollstruktur für eine Verzweigung beginnt in ABAP mit der Anweisung IF und einer Bedingung; sie endet mit der Anweisung ENDIF. Zwischen den beiden Anweisungen stehen die Kommandos, die ausgeführt werden, falls die Bedingung erfüllt ist. Zu Beginn prüfen Sie zunächst nur einen Feldinhalt, im Lauf der weiteren Arbeit werden Sie sehen, dass sich für die Bedingungen der IF-Struktur beliebig komplexe logische Ausdrücke verwenden lassen.

Angenommen, Sie möchten nur die Teilnehmer des Kurses »PC-Grundlagen« zählen, dann könnte dies beispielsweise so aussehen: Zunächst verarbeiten Sie alle Sätze der Tabelle ganz normal; doch immer wenn ein Satz diese besondere Bedingung erfüllt, zählen Sie die Teilnehmerzahl um 1 hoch.

IF wa_zteilnehmer02-zzkurstitel = 'PC-Grundlagen'.
tz_pc_grundlagen = tz_pc_grundlagen + 1.
ENDIF.

Hat das Feld für den Kurstitel den Inhalt »PC-Grundlagen«, ist die Bedingung erfüllt, und der Anweisungsblock, der hier nur aus einer Zeile besteht, wird ausgeführt. Auf diese Weise wird gezählt, wie viele Personen den Kurs »PC-Grundlagen« besuchen.

Eine Verzweigung nach dem Prinzip »entweder A oder B« enthält zusätzlich für den Fall »oder« die Strukturanweisung ELSE. Ist die Bedingung der IF-Anweisung erfüllt, wird der erste Anweisungsblock ausgeführt, anderenfalls der zweite Anweisungsblock nach der ELSE-Anweisung.

Im Beispiel werden im ersten Anweisungsblock die Teilnehmer für den Kurs »SAP-Grundlagen« gezählt: Im zweiten Anweisungsblock wird ein Zähler für alle restlichen Teilnehmer gebildet. Gezählt wird demnach in jedem Fall. Nur welcher Zähler erhöht wird, hängt von der Bedingung ab.

IF wa_zteilnehmer02-zzkurstitel = 'SAP-Grundlagen'.
tz_sap_grundlagen = tz_sap_grundlagen + 1.
ELSE.
tz_sonst = tz_sonst + 1.
ENDIF.

Die dritte Möglichkeit, mit der IF-Anweisung zu arbeiten, prüft zunächst wieder eine Bedingung. Ist diese nicht erfüllt, wird eine zweite Bedingung mit ELSEIF geprüft. Ist diese auch nicht erfüllt, wird eine dritte Bedingung mit ELSEIF geprüft etc. Dies lässt sich unbegrenzt fortsetzen und kann für die restlichen Fälle auch noch mit einer ELSE-Anweisung abgeschlossen werden.

Hierzu folgendes Beispiel:

IF wa_zteilnehmer02-zzkurstitel = 'Netzwerktechnik'.
tz_netzwerktechnik = tz_netzwerktechnik + 1.
ELSEIF wa_zteilnehmer02-zzkurstitel = 'PC-Grundlagen'.
tz_pc_grundlagen = tz_pc_grundlagen + 1.
ELSEIF wa_zteilnehmer02-zzkurstitel = 'SAP-Grundlagen'.
tz_sap_grundlagen = tz_sap_grundlagen + 1.
ELSE.
tz_sonst = tz_sonst + 1.
ENDIF.

Die erste Bedingung soll dann erfüllt sein, wenn im Feld für die Kursbezeichnung der Wert »Netzwerktechnik« enthalten ist. Im ersten Verarbeitungsblock werden dann die Teilnehmer für den Kurs »Netzwerktechnik« gezählt. Anschließend prüft das System keine weiteren Bedingungen mehr, sondern geht zu ENDIF und setzt das Programm mit der ersten Anweisung nach der IF-Struktur fort.

Ist die erste Bedingung nicht erfüllt, wird geprüft, ob die zweite Bedingung erfüllt ist, d. h. ob die Kursbezeichnung »PC-Grundlagen« lautet. Ist die zweite Bedingung erfüllt, wird der zweite Anweisungsblock ausgeführt und der Zähler für die Teilnehmer am Kurs »PC-Grundlagen« erhöht. Ist die zweite Bedingung ebenfalls nicht erfüllt, wird die dritte Bedingung (»SAP-Grundlagen«) geprüft. Trifft sie zu, werden die Teilnehmer dieses Kurses hochgezählt.

Falls die dritte Bedingung auch nicht erfüllt ist, tritt der »Sonst-Fall« ein, und der Zähler für die bis dahin nicht erfassten Kurse und Teilnehmer wird erhöht. Danach springt das System zur Anweisung ENDIF und dann zum nächsten Kommando nach der IF-Struktur.

[»]  Sammelschacht

Die Anweisung ELSE gewährleistet, dass – salopp ausgedrückt – irgendeine Bedingung immer erfüllt ist: Entweder die Daten durchlaufen die Verarbeitung und die Anweisungsblöcke der IF- und ELSEIF-Strukturen, oder sie durchlaufen den Anweisungsblock für die bis dahin nicht zutreffenden Bedingungen. ELSE ist gewissermaßen das »Sammelbecken« für all die Fälle, auf die bislang in der Struktur noch keine Bedingungen zutrafen.

Natürlich können IF-Strukturen auch geschachtelt werden. Allerdings müssen Sie darauf achten, dass Strukturanfang und Strukturende richtig zueinander passen. Wie in der Mathematik die Klammerebenen müssen auch hier die Schachtelungsebenen sauber getrennt werden. Es ist eine Frage des Arbeitsstils, der gültigen Programmierkonventionen und der Transparenz, inwieweit Sie geschachtelte IF-Strukturen durch die Verknüpfung mehrerer logischer Ausdrücke ersetzen. Hierzu zwei Beispiele:

IF Bedingung_1.
IF Bedingung_2.
* Anweisungsblock_1
ENDIF.
ENDIF.

Listing 10.1    Beispiel 1: Geschachtelte IF-Strukturen

IF Bedingung_1 AND Bedingung_2.
* Anweisungsblock_1
ENDIF.

Listing 10.2    Beispiel 2: Verknüpfte logische Ausdrücke

Beide Beispiele sind inhaltlich gleich: Anweisungsblock_1 wird nur dann ausgeführt, wenn beide Bedingungen erfüllt sind. Grundsätzlich geht Transparenz aber vor Genialität. Wenn durch das Verknüpfen logischer Ausdrücke Konstrukte entstehen, die Bildschirmseiten füllen, sollten Sie an Dritte denken, die diese Konstrukte später verstehen und ändern müssen. In solchen Fällen sollten Sie prüfen, ob durch eine Schachtelung vielleicht eine bessere Lesbarkeit, Transparenz und Änderbarkeit erzielt werden könnte. Ist dies der Fall, ist die Schachtelung vorzuziehen.

 
Zum Seitenanfang

10.3.2    CASE-Struktur Zur vorigen ÜberschriftZur nächsten Überschrift

Beginnen wir für die CASE-Struktur zunächst wieder mit einer Analogie aus dem täglichen Leben: Eine Fußgängerampel zeigt entweder Rot oder Grün. Im Fall »Rot« bleiben wir stehen, im Fall »Grün« gehen wir. Wir blicken nur auf die Ampel; weitere Bedingungen interessieren uns nicht. Die Konsequenzen einer derart eingeschränkten Sichtweise können im wahren Leben zwar fatal sein, aber dies lassen wir hier einmal außer Acht.

Ähnlich wie der sture Fußgänger »blickt« die CASE-Struktur nur auf ein Objekt. Beim Fußgänger ist es die Ampel, bei der CASE-Struktur ein Feld, ein Datenobjekt. Hierbei wird eine Fallunterscheidung getroffen, und der Inhalt des Feldes wird abgefragt. Stimmen Bedingung und Feldinhalt überein, wird der zugehörige Anweisungsblock ausgeführt, sonst nicht. Auch in einer CASE-Struktur wird immer nur ein Anweisungsblock abgearbeitet. Nach dem Anweisungsblock verzweigt das System zu ENDCASE, ohne weitere Feldinhalte zu prüfen, geht danach zum ersten Kommando nach der CASE-Struktur und setzt die Verarbeitung dort fort.

Während die IF-Struktur komplexe logische Bedingungen prüfen kann, trifft die CASE-Struktur Fallunterscheidungen nach dem Inhalt nur eines einzigen Feldes. Vereinfacht ausgedrückt: Bei der IF-Struktur kann es den Fall geben, dass es regnet und die Sonne scheint. Bei der CASE-Struktur gibt es diesen Fall nicht, entweder es scheint die Sonne oder es regnet.

Wie so oft kommt es wieder einmal auf die Aufgabenstellung an. Die CASE-Struktur ist immer dann im Vorteil, wenn es gelingt, eine Bedingung eindeutig mit einem Feldinhalt abzustimmen. In unserem Beispiel, in dem die Teilnehmer eines Kurses gezählt werden, könnten Sie auch gut mit der CASE-Struktur arbeiten: Sie prüfen den Inhalt des Tabellenfeldes ZTEILNEHMER02-ZZKURSTITEL (über die Workarea WA_ZTEILNEHMER02); je nach Feldinhalt wird in den entsprechenden Anweisungsblock verzweigt.

Danach geht das System zu ENDCASE und setzt die Verarbeitung mit dem ersten Kommando nach der CASE-Struktur fort. Die Strukturanweisung WHEN OTHERS übernimmt dabei die gleiche Funktion wie die Anweisung ELSE bei der IF-Struktur. Vergleichen Sie hierzu den folgenden Beispielcode:

CASE wa_zteilnehmer02-zzkurstitel.
WHEN 'Netzwerktechnik'.
tz_netzwerktechnik = tz_netzwerktechnik + 1.
WHEN 'PC-Grundlagen'.
tz_pc_grundlagen = tz_pc_grundlagen + 1.
WHEN OTHERS.
tz_sonst = tz_sonst + 1.
ENDCASE.

Ein typischer Anwendungsfall für die CASE-Struktur ist die Auswertung des Returncodes. Es ist eindeutig, welche Anweisung einen Returncode zurückgibt, wie die Werte für den Returncode sein können und welche Fehlerfälle damit gemeint sind. Je nach Erfolg oder Misserfolg einer Anweisung hat SY-SUBRC einen eindeutigen Inhalt; dieser Inhalt wird über die CASE-Struktur abgefragt.

Damit können für den Erfolgsfall und alle dokumentierten Fehlerfälle eigene Anweisungsblöcke geschrieben werden. Bei jeder ABAP-Anweisung ist hinterlegt, ob ein Returncode generiert wird, welcher Returncode zurückgeliefert werden kann und welche Fehlerfälle damit definiert werden. Entsprechend können Sie die Anweisungsblöcke gestalten. Ziel dieser Bemühungen ist es, das Programm trotz eines Fehlers zu einem »ordnungsgemäßen« Ende zu führen bzw. sinnvolle Alternativprozesse einzuleiten.

Suchen Sie beispielsweise mit dem SELECT-Kommando in einer Tabelle, liefert das Kommando den Returncode 0, wenn es mindestens einen Satz in der Tabelle lesen konnte. Konnte kein einziger passender Satz gelesen werden, liefert die Anweisung den Returncode 4 zurück. Unter Returncode 0 steht demnach der Anweisungsblock für den günstigen Okay-Fall. Ist der Returncode 4, wird die Fehlerbehandlungsroutine durchlaufen. Vergleichen Sie hierzu folgenden Codeausschnitt:

CASE sy-subrc.
WHEN 0.
* Okay-Fall
WRITE: / tz_netzwerktechnik,
'Teilnehmer für den Kurs Netzwerktechnik
gefunden'.
WHEN 4.
* Fehlerfall
WRITE: / 'keine Teilnehmer für den Kurs
Netzwerktechnik gefunden'.
WHEN OTHERS.
* Kann nicht sein, anderer sy-subrc wird von der
* Anweisung nicht geliefert.
ENDCASE.

CASE-Strukturen können genauso wie IF-Strukturen geschachtelt werden. Hierbei müssen Sie ebenfalls auf eine saubere Trennung der Ebenen achten. Die Kombination von IF- und CASE-Strukturen ist auch möglich.

[»]  Mehrere Felder differenzieren

Es gibt durchaus Anweisungen, die mehrere Fehler differenzieren können. Auch Funktionsbausteine liefern häufig differenzierte Fehlermeldungen zurück. CASE-Strukturen mit sechs oder acht verschiedenen Fehlerbehandlungsblöcken sind in der Praxis keine Seltenheit.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Einstieg in ABAP Einstieg in ABAP
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: SAP – Der technische Einstieg
SAP – Der technische Einstieg


Zum Rheinwerk-Shop: ABAP Objects – Das umfassende Handbuch
ABAP Objects – Das umfassende Handbuch


Zum Rheinwerk-Shop: ABAP-Entwicklung für SAP S/4HANA
ABAP-Entwicklung für SAP S/4HANA


Zum Rheinwerk-Shop: Kundeneigene Erweiterungen mit ABAP
Kundeneigene Erweiterungen mit ABAP


Zum Rheinwerk-Shop: Schrödinger programmiert ABAP
Schrödinger programmiert ABAP


Zum Rheinwerk-Shop: Migration nach SAP S/4HANA
Migration nach SAP S/4HANA


Zum Rheinwerk-Shop: Design Thinking mit SAP
Design Thinking mit SAP


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern