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.5    Logische Ausdrücke Zur vorigen ÜberschriftZur nächsten Überschrift

Auch im täglichen Leben müssen wir uns permanent entscheiden. Allerdings laufen menschliche Entscheidungen nicht immer ganz logisch ab. Solange Computer aber nicht in der Lage sind, zu verstehen, was wir meinen, müssen in einem Programmablauf eindeutig messbare und nachvollziehbare Bedingungen formuliert werden.

[»]  Umsetzung schwierig

Zugegebenermaßen ist es schwierig, die Komplexität von Prozessen des Alltags und des Geschäftslebens auf einer logischen, programmtechnischen Ebene umzusetzen. Sie müssen auf die Inhalte und die Vergleichbarkeit von Datentypen und Feldinhalten achten sowie die Reaktionen des Systems antizipieren.

 
Zum Seitenanfang

10.5.1    Einfache logische Ausdrücke Zur vorigen ÜberschriftZur nächsten Überschrift

Betrachten Sie zunächst einmal die sogenannten logischen Operatoren in Tabelle 10.1: Mit ihnen können Sie Bedingungen formulieren, die zwei Felder vergleichen, z. B.:

IF ZAHL01 > ZAHL02.
* Anweisungsblock
ENDIF.

Sind beide Felder hinsichtlich ihrer Attribute kompatibel oder konvertierbar, ist die Bedingung dann erfüllt, wenn der Inhalt von ZAHL01 größer ist als der Inhalt von Feld ZAHL02, und der Anweisungsblock wird ausgeführt. Im Quellcode können Sie für die logischen Ausdrücke wahlweise logische Operatoren oder ihre Symbole verwenden.

logischer Operator

Symbol

Bedeutung

EQ

=

gleich

NE

<>

ungleich

LT

<

kleiner als

LE

<=

kleiner gleich

GT

>

größer als

GE

>=

größer gleich

Tabelle 10.1    Logische Operatoren für Datenobjekte

Je weiter die Attribute der zu vergleichenden Felder jedoch auseinanderdriften, desto mehr muss man die systemimmanenten Konvertierungsregeln kennen. Zeichenketten vom Typ c werden beispielsweise bei unterschiedlicher Länge von links nach rechts gemäß der relevanten Codetabelle verglichen. Dies klingt ganz einfach, aber wissen Sie immer genau, wo ein Blank oder ein Sonderzeichen in der Codetabelle steht – vor oder nach den Kleinbuchstaben? Und ist die lexikalische Sortierung zur Codetabelle identisch? Man kann sich hier im Detail ganz schön täuschen und ärgern.

Sind die Datentypen unterschiedlich, wird zuerst eine automatische Typkonvertierung durchgeführt und dann verglichen. Istz. B. ein Feld vom Typ c mit einem Feld vom Typ n zu vergleichen, werden vor dem Vergleich beide Felder in den Typ p konvertiert. Auch bei dieser Art Aufgabenstellung kann einem das System Überraschungen bereiten: Formal arbeitet es natürlich einwandfrei; es ist der Mensch, der sich nicht an die Regeln hält – oder sie nicht kennt – und staunt. Als Konsequenz hieraus sollten Sie versuchen, die zu vergleichenden Felder hinsichtlich ihrer Attribute aufeinander abzustimmen.

[»]  Spezielle logische Operatoren

Für Zeichenketten gibt es spezielle logische Operatoren. Mit ihnen formuliert man Bedingungen, um herauszufinden, ob eine Zeichenkette bestimmte Zeichen enthält etc. Es existieren noch weitere Operatoren, hier soll aber nur noch die Prüfung auf den Initialwert und auf ein Intervall hin erwähnt werden.

Die Bedingung, dass eine Teilaufgabe nur dann ausgeführt werden soll, wenn der Feldwert der Initialwert ist, kommt relativ häufig vor. Dabei hängt es nur von der Aufgabenstellung ab, ob der Initialwert von Anfang an unverändert bleibt oder – wie in unseren vorhergehenden Beispielen – während der Programmausführung per Anweisung gesetzt wird.

In beiden Fällen soll der Anweisungsblock nur unter dieser Bedingung ausgeführt werden:

IF zahl01 IS INITIAL.
* Anweisungsblock
ENDIF.

Der Anweisungsblock wird nur durchlaufen, wenn der Feldinhalt von ZAHL01 der Initialwert ist. Hat das Feld bereits einen Inhalt, ist die Bedingung nicht erfüllt, und der Anweisungsblock wird nicht ausgeführt.

Bei der Prüfung auf ein Intervall hin wird der Feldinhalt hinsichtlich einer Untergrenze und einer Obergrenze geprüft. Liegt er dazwischen oder genau auf einer von beiden Grenzen, ist die Bedingung gültig, und der Anweisungsblock wird ausgeführt. Die Ober- und Untergrenze des Intervalls können entweder wieder als Literal oder als Variable angegeben werden; im Falle der Angabe als Variable müssen die Grenzwerte, d. h. die Feldinhalte, vorher sinnvoll gesetzt sein.

Soll in unserem Beispiel für die Teilnehmer des Jahrgangs 1969 eine besondere Verarbeitung starten, müssen Sie prüfen, ob das Geburtsdatum zwischen dem 01.01.1969 und dem 31.12.1969 liegt. Ist diese Bedingung erfüllt, soll der Anweisungsblock ausgeführt werden.

IF wa_zteilnehmer02-tgeburtsdatum
BETWEEN '19690101' AND '19691231'.
* Anweisungsblock
ENDIF.

Hat jemand genau am 01.01.1969 oder am 31.12.1969 Geburtstag, ist für diese Person ebenfalls die Bedingung erfüllt, und der Satz durchläuft den Anweisungsblock.

 
Zum Seitenanfang

10.5.2    Verknüpfte logische Ausdrücke Zur vorigen ÜberschriftZur nächsten Überschrift

Richtig spannend wird die Arbeit, wenn man komplexe Bedingungen durch das Verknüpfen logischer Ausdrücke abbilden möchte oder muss. Es ist eine schwierige Gratwanderung, einerseits die Komplexität abzubilden, und andererseits die Transparenz, Lesbarkeit und Änderbarkeit des Quellcodes zu erhalten. Hierzu sollten Sie zunächst die Regeln für das Verknüpfen logischer Ausdrücke beachten.

[zB]  OR

Arbeiten Sie mit zwei Bedingungen und dem logischen Oder als Verknüpfungsoperator, muss eine von beiden Bedingungen oder müssen beide Bedingungen erfüllt sein, damit der Anweisungsblock durchlaufen wird.

Stellen Sie sich vor, Sie möchten ein Buch ausleihen und lesen. Sie kennen zwei Personen, die dieses Buch besitzen, und fragen beide, ob sie es Ihnen ausleihen. Sie können das Buch dann ausleihen und lesen, wenn Ihnen eine von beiden Personen das Buch leiht oder beide Ihnen das Buch überlassen.

In ABAP wird das logische Oder durch den Operanden OR abgebildet. Die allgemeine Grundstruktur ist die gleiche wie beim einfachen IF: Es gibt die Verzweigungsstruktur IF ... ENDIF sowie eine Bedingung b1.

IF b1.
* Anweisungsblock
ENDIF.

Der Unterschied ist jetzt nur, dass sich b1 wiederum aus Bedingungen wie b2, b3 etc. zusammensetzt, die mit einem logischen Operanden verknüpft sind, beispielsweise:

b1 = b2 OR b3

Dieses Auflösen von Bedingungen kann beliebig fortgesetzt werden, kombiniert mit anderen logischen Operanden sowie mehreren Klammerebenen. Sie können auf diese Weise wirklich komplexe Bedingungen abbilden. Aber auch hier wird den meisten Menschen schneller schwindelig als einer Maschine: Wenn solche Bedingungen ganze Bildschirmseiten füllen, können Sie leicht den Überblick verlieren. Kleinste Änderungen an logischen Ausdrücken können riesige Auswirkungen auf den Programmablauf haben. Vergessen Sie daher die Grundsätze der Lesbarkeit, Transparenz und Änderbarkeit von Quellcode nicht.

Sollen die Sätze aller Teilnehmer der Kurse »SAP-Finanzwesen« und »SAP-Grundlagen« durch einen eigenen Anweisungsblock laufen, schreiben Sie die logische Oder-Bedingung so:

IF wa_zteilnehmer02-zzkurstitel = 'SAP-Finanzwesen' OR
wa_zteilnehmer02-zzkurstitel = 'SAP-Grundlagen'.
* Anweisungsblock
ENDIF.

Das Feld für den Kurstitel muss entweder den Inhalt »SAP-Finanzwesen« oder den Inhalt »SAP-Grundlagen« haben, damit die Bedingung erfüllt ist. So wie die Bedingung formuliert ist, kann das Feld natürlich nicht gleichzeitig beide Bedingungen erfüllen. Hierzu bräuchte man zwei verschiedene Felder.

Strenger als das logische Oder bindet das logische Und. Bei zwei Bedingungen bedeutet dies, dass beide Bedingungen gleichzeitig erfüllt sein müssen, damit der Anweisungsblock durchlaufen wird. Wenn Sie in den Urlaub fahren möchten, brauchen Sie Zeit und Geld – nur eines von beidem zu haben, genügt nicht.

In ABAP wird das logische Und durch den Operanden AND symbolisiert. Um wiederum ein einfaches Beispiel zu wählen, nehmen wir an, dass die Sätze aller männlichen Teilnehmer, die den Kurs »PC-Grundlagen« besuchen, durch einen eigenen Anweisungsblock laufen sollen. Der ABAP-Quellcode lautet sinngemäß:

IF wa_zteilnehmer02-tgeschlecht = 'M' AND
wa_zteilnehmer02-zzkurstitel = 'PC-Grundlagen'.
* Anweisungsblock
ENDIF.

Es gibt zwei Felder für Geschlecht und Kurstitel, und beide müssen einen bestimmten Inhalt haben, damit die Bedingung erfüllt ist und der Anweisungsblock durchlaufen wird.

Am strengsten bindet der dritte Verknüpfungsoperator NOT: die Negation. Wenn Sie Abfragen wie »Möchten Sie diese Änderung nicht speichern? – Ja/Nein« kennen, haben Sie das Problem der Negation bereits erkannt. Für viele Menschen ist es ziemlich schwer, mit negierten Abfragen und Bedingungen zu arbeiten, besonders in komplexen Situationen und unter Druck. Deshalb bereits an dieser Stelle die Bitte, dass Sie Negationen in Ihrer praktischen Arbeit vermeiden – formulieren Sie positiv, wo immer es möglich ist.

[+]  Negationen nicht immer vermeidbar

Wie viele Negationen finden Sie in der Überschrift dieses Kastens? Spaß beiseite: Manchmal lässt sich allerdings das Arbeiten mit Negationen nicht vermeiden, beispielsweise im Umfeld von Abfragen auf Initialwerte von Feldern. Abzufragen, ob ein Feld den Initialwert hat, ist nicht schwer, wie Sie gesehen haben. Alle möglichen Feldinhalte hingegen zu prüfen, ist fast unmöglich. Manchmal genügt es auch zu wissen, dass ein Feld einen anderen als den Initialwert hat, d. h. eben nicht den Initialwert, um einen Anweisungsblock auszuführen.

Formal zu beachten ist, dass die Negation NOT grundsätzlich vor der Bedingung stehen muss. Soll ein Anweisungsblock nur dann ausgeführt werden, wenn die Bedingung b1 nicht erfüllt ist, wäre folgende Schreibweise sinngemäß:

IF NOT b1.

Im folgenden Beispiel sollen die Sätze aller Teilnehmer, die nicht an SAP-Kursen teilnehmen, gesondert verarbeitet werden. Sie schreiben in ABAP:

IF NOT wa_zteilnehmer02-zzkurstitel(3) = 'SAP'.
* Anweisungsblock
ENDIF.

Die Bedingung lautet, dass die ersten drei Zeichen der Kursbezeichnung nicht »SAP« sein dürfen, damit der Anweisungsblock durchlaufen wird. Zum Abschluss dieses Abschnitts kombinieren Sie Ihr neues Wissen über Verknüpfungen logischer Ausdrücke in einem kleinen Beispiel:

[zB]  Beispiel: Schaltjahre

Ermitteln Sie im folgenden Beispiel, ob ein Jahr ein Schaltjahr ist.

In unserem Kalender ist ein Jahr immer dann ein Schaltjahr, wenn die Jahreszahl durch 4 ganzzahlig ohne Rest teilbar ist. Immer wenn es außerdem durch 100 ganzzahlig ohne Rest teilbar ist, ist es aber kein Schaltjahr. Es ist aber trotzdem ein Schaltjahr, wenn es durch 400 ganzzahlig ohne Rest teilbar ist. Für die Umsetzung in ABAP müssen zunächst drei Bedingungen formuliert werden:

  • b1: Das Jahr ist durch 400 ganzzahlig teilbar.

  • b2: Das Jahr ist durch 100 ganzzahlig teilbar.

  • b3: Das Jahr ist durch 4 ganzzahlig teilbar.

Ein Jahr ist dann ein Schaltjahr, wenn b1 oder wenn b3 erfüllt ist, dann darf aber b2 nicht gelten. In kürzerer und eindeutiger Schreibweise kann die Bedingung so formuliert werden:

b1 OR b3 AND NOT b2

Geklammert werden muss nicht, weil durch die hierarchische Ordnung der Operanden die Negation am engsten bindet, das logische Und als zweitstärkstes und das logische Oder am schwächsten. Möchten Sie die Lesbarkeit erhöhen, können Sie natürlich auch Klammern setzen. Die Bedingung würde dann lauten:

b1 OR ( b3 AND NOT b2 )

Beachten Sie aber, dass anders gesetzte Klammern die Logik der Bedingung völlig verändern können.

Für die endgültige Umsetzung könnten Sie in ABAP die Ergebnisse der Prüfungen, ob ein Jahr ganzzahlig teilbar ist, in entsprechenden Feldern hinterlegen und dann die Bedingung beispielsweise so schreiben:

IF jahr400 = 0 OR ( jahr004 = 0 AND NOT jahr100 = 0 ).
* Anweisungsblock
ENDIF.

Im Codebeispiel zu WHILE und logischen Ausdrücken in Abschnitt 10.9 finden Sie nähere Erläuterungen.

 


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