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 4 Felder und Berechnungen
Pfeil 4.1 Report vorbereiten
Pfeil 4.2 Felder deklarieren
Pfeil 4.2.1 Variablen deklarieren
Pfeil 4.2.2 Konstanten deklarieren
Pfeil 4.3 Grundrechenarten
Pfeil 4.3.1 Kompatible und konvertible Datenobjekte
Pfeil 4.3.2 Konvertierungsregeln
Pfeil 4.3.3 Besonderheiten bei der Division
Pfeil 4.4 Codebeispiel zu Feldern und Berechnungen
 
Zum Seitenanfang

4.3    Grundrechenarten Zur vorigen ÜberschriftZur nächsten Überschrift

Für die Addition, Subtraktion, Multiplikation und Division in ABAP haben wir damit bereits alle erforderlichen Variablen deklariert. Arithmetische Operationen können Sie nun leicht über Zuweisungen durchführen: Soll beispielsweise der Inhalt der Felder ZAHL01 und ZAHL02 addiert werden, schreiben Sie einfach:

ergebnis = zahl01 + zahl02.

Formal ist anzumerken, dass rechts vom Gleichheitszeichen die arithmetische Operation selbst stehen muss. Das Ergebnis der Operation wird in das links vom Gleichheitszeichen stehende Feld eingetragen, die Felder ZAHL01 und ZAHL02 behalten auch nach der Berechnung ihren alten Inhalt. Anders hingegen verhält es sich mit dem Feld links vom Gleichheitszeichen: Im Feld ERGEBNIS steht nach der Berechnung nicht mehr der alte, sondern der neue Inhalt; der alte Inhalt des Feldes wurde ersetzt.

[+]  Leerzeichen in arithmetischen Operationen

Darüber hinaus ist für die richtige Schreibweise der Umgang mit Leerzeichen wichtig: Sie müssen sowohl vor als auch nach dem Gleichheitszeichen sowie vor und nach dem Rechenzeichen stehen, im oberen Beispiel dem Pluszeichen (+). Wenn Sie später einmal mit komplexeren Ausdrücken und mehreren Klammerebenen arbeiten, sollten Sie schon jetzt daran denken, dass in solchen Fällen auch vor und nach jeder Klammer ein Leerzeichen stehen muss. Dabei muss es jeweils mindestens ein Leerzeichen sein; die Eingabe mehrerer Leerzeichen schadet nicht weiter.

Der Grund für diese Schreibkonvention liegt darin, dass es Funktionen gibt, die ohne Leerzeichen direkt an das Feld geschrieben werden. Damit das System nun unterscheiden kann, ob es sich um eine arithmetische Operation oder eine solche Funktion handelt, wird das Leerzeichen unbedingt benötigt.

Soll zum Inhalt der Variablen ZAHL02 ein Festwert, beispielsweise die Zahl 2, addiert werden, lautet die Anweisung:

zahl02 = zahl01 + 2.

Auch hier gilt die Regel, dass in der Variablen links vom Gleichheitszeichen der alte Inhalt durch den neuen ersetzt wird. Natürlich könnte man zum Inhalt derselben Variablen auch einen Festwert addieren, beispielsweise um einen Zähler um 1 zu erhöhen. Dann würde die Anweisung lauten:

zahl01 = zahl01 + 1.

Auch hier gilt wieder das gleiche Prinzip: Rechts vom Gleichheitszeichen wird der Wert der Operation bestimmt, d. h. der Inhalt von ZAHL01 und 1 werden addiert und das Ergebnis der Operation in die Variable links vom Gleichheitszeichen eingesetzt. Mit anderen Worten: ZAHL01 erhält einen neuen Inhalt.

Für die Subtraktion, Multiplikation und Division lautet die Schreibweise entsprechend:

ergebnis = zahl01 - zahl02.
ergebnis = zahl01 * zahl02.
ergebnis = zahl01 / zahl02.

Als Rechenzeichen für Subtraktionen verwenden Sie das Minuszeichen (-), für Multiplikationen das Sternchen (*) und für Divisionen den Schrägstrich (/). Anstelle von Rechenzeichen könnten wir auch die Schlüsselwörter ADD, SUBTRACT, MULTIPLY und DIVIDE verwenden, die in der Praxis aber relativ selten anzutreffen sind; auch wir werden im Folgenden darauf verzichten.

Damit haben Sie die Grundvoraussetzungen kennengelernt – und wir wenden uns den Details zu, denn hierin versteckt sich ja bekanntlich oft der Teufel. Beispielsweise haben nicht alle Felder die gleichen Attribute oder sind untereinander verträglich.

 
Zum Seitenanfang

4.3.1    Kompatible und konvertible Datenobjekte Zur vorigen ÜberschriftZur nächsten Überschrift

Verfügen Felder über die gleichen Attribute, spricht man von kompatiblen Datenobjekten, d. h. dass diese Felder in allen technischen Eigenschaften (Typ, Feldlänge, Dezimalstellen) vollständig übereinstimmen. Sind die Attribute untereinander verträglich, spricht man von konvertiblen Datenobjekten. Dabei müssen die Datentypen konvertiert, d. h. umgewandelt werden; Voraussetzung hierfür sind entsprechende Konvertierungsregeln. Falls die Konvertierung nicht möglich ist, entstehen Syntax- oder Laufzeitfehler.

Beruhigend ist, dass im SAP-System bereits zahlreiche Konvertierungsregeln hinterlegt sind (siehe Abschnitt 4.3.2, »Konvertierungsregeln«). Das System wandelt bei entsprechenden Anweisungen nach diesen Regeln automatisch von einem Datentyp in einen anderen um. Sofern diese Regeln die von uns gewünschten Ergebnisse erzielen, haben wir kein Problem. Leider ist dies aber nicht immer der Fall, und leider existieren auch nicht für alle denkbaren Konstellationen Konvertierungsregeln.

[ ! ]  Fehlerquellen

Zähneknirschend muss außerdem hingenommen werden, dass für solche Fehler überwiegend die Entwickler selbst verantwortlich sind – denn es gibt z. B. keinen logischen Grund dafür, in einem Datumsfeld Sternchen und Sonderzeichen speichern zu wollen. Solche Syntax- oder Laufzeitfehler geschehen immer wieder einmal auch Fortgeschrittenen, und zwar insbesondere dann, wenn bereits bestehende Anwendungen modifiziert werden müssen. Auch bei einer Datenübernahme aus anderen Systemen tauchen solche Fehler auf – für einen Einsteiger erst einmal kein Grund zur Panik.

 
Zum Seitenanfang

4.3.2    Konvertierungsregeln Zur vorigen ÜberschriftZur nächsten Überschrift

Die Konvertierungsregeln legen fest, wie der Inhalt eines Quellfeldes in ein Zielfeld eingetragen wird. Quellfelder können verschiedene Datentypen haben, wie die bereits vorgestellten vom Typ p für gepackte und Typ i für ganze Zahlen. Da es, wie erwähnt, auch weitere Datentypen für Datums- und Zeitfelder oder Zeichenketten gibt, legen die Konvertierungsregeln pro Datentyp genau fest, wie der Inhalt des Quellfeldes in das Zielfeld eingestellt wird. Was geschieht, wenn Sie eine gepackte Zahl in ein Integerfeld stellen, was geschieht, wenn Sie eine gepackte Zahl zum Inhalt eines Datumsfeldes addieren, oder was geschieht, wenn Sie eine gepackte Zahl in ein Character-Feld schreiben? Lassen Sie uns hierzu eine Konvertierungsregel als Beispiel ansehen.

Ist der Quelltyp ein Datenobjekt vom Typ p und der Zieltyp ein Datenobjekt vom Typ i (eine ganze Zahl), rundet das System die Dezimalstellen des Quellfeldes und stellt den Inhalt rechtsbündig in das Zielfeld. Ist das Zielfeld von seiner Länge her ausreichend, wird links mit Nullen aufgefüllt, anderenfalls kommt es zu einem Überlauf bzw. Laufzeitfehler. Stellen Sie beispielsweise die gepackte Zahl 4,44 in ein Integerfeld, hat ein Integerfeld danach den Inhalt 4; stellen Sie die gepackte Zahl 5,55 in ein Integerfeld, hat es den Inhalt 6.

Falls in einer numerischen Operation mehrere verschiedene Datentypen vorkommen, konvertiert ABAP vor dem Ausführen der Operation alle Datentypen in den höchsten vorkommenden Datentyp, führt dann die Operation mit den konvertierten Werten aus und stellt anschließend das Ergebnis – eventuell wieder über eine Konvertierungsregel – in das Ergebnisfeld.

[zB]  Ganze und gepackte Zahlen sowie Exponentialzahlen

Sollten beispielsweise ganze Zahlen, gepackte Zahlen und Exponentialzahlen in einer Operation vorkommen, würden die Exponentialzahlen den Datentyp auf höchster Ebene darstellen. Erst würden alle ganzen Zahlen in gepackte Zahlen umgewandelt, dann alle Zahlen in Exponentialzahlen, und schließlich würde die Operation mit Exponentialzahlen berechnet. Anschließend würde gemäß den Konvertierungsregeln der Wert der Exponentialzahlen in das Ergebnisfeld eingetragen. Sie können sich wahrscheinlich gut vorstellen, dass die Rechengenauigkeit schon durch den Datentyp des Ergebnisfeldes beeinflusst werden kann.

Um sich das Leben nicht zu erschweren, sollten Sie von Anfang an darauf achten, Ihre Datenobjekte möglichst kompatibel zu halten.

Der Vollständigkeit halber erwähnen wir hier das COMPUTE-Schlüsselwort, das für numerische Operationen das ursprüngliche ABAP-Kommando ist. Die Schreibweise für eine Addition unter Zuhilfenahme des Schlüsselwortes COMPUTE lautet:

COMPUTE ergebnis = zahl01 + zahl02.

Wie Sie sehen, ist die Anweisung nur länger, und die Lesbarkeit wird nicht unbedingt erhöht. Glücklicherweise ist das Schlüsselwort COMPUTE optional und wird in der Praxis – außer für Recherchezwecke – kaum verwendet; die meisten Entwickler bevorzugen die verkürzte Schreibweise, die intern vom System exakt gleich behandelt wird, und auch wir arbeiten im Folgenden ohne das Schlüsselwort COMPUTE:

ergebnis = zahl01 + zahl02.
[+]  Gut zu wissen …

Es gibt allerdings einen Fall, in dem es notwendig ist zu wissen, dass es die COMPUTE-Anweisung gibt: Falls Sie im System die Dokumentation zu selten benötigten Funktionen suchen, finden Sie diese nämlich nur bei der COMPUTE-Anweisung.

Ab SAP NetWeaver 7.0 EHP 2 bzw. SAP NetWeaver 7.3 erlaubt die COMPUTE-Anweisung den Zusatz EXACT, was bei Berechnungen mit dezimalen Gleitpunktzahlen ein besonderes Verhalten bewirkt. Dieser Zusatz ist nur im Zusammenhang mit dem ausgeschriebenen Schlüsselwort COMPUTE verfügbar.

 
Zum Seitenanfang

4.3.3    Besonderheiten bei der Division Zur vorigen ÜberschriftZur nächsten Überschrift

Für Berechnungen in ABAP stellen Addition, Subtraktion und Multiplikation kein weiteres Problem dar; nur die Division sollten wir uns noch etwas genauer ansehen. Es gibt Fälle, in denen Sie ein Divisionsergebnis mit Nachkommastellen wünschen, aber auch Fälle, in denen Sie ganzzahlig ohne Rest teilen möchten. Vielleicht interessiert uns aber auch nur der Rest einer solchen Division. Für diese verschiedenen Varianten gibt es in ABAP auch verschiedene Anweisungen.

Der einfachste Fall einer Division wird – wie bereits erläutert – durch den Schrägstrich (/) dargestellt:

DATA zahl01   TYPE p DECIMALS 2 VALUE '4.56'.
DATA zahl02 LIKE zahl01 VALUE '5.67'.
DATA ergebnis LIKE zahl01.
ergebnis = zahl02 / zahl01.

Wenn Sie das Ergebnis mit dem Taschenrechner ausrechnen, erhalten Sie die Zahl 1,243421053. Wie verhält sich ABAP? Alle Variablen sind gleichlautend deklariert. Eine gepackte Zahl hat maximal 16 Bytes, dies bedeutet 32 Stellen, inklusive Vorzeichen. Das System würde das genaue Ergebnis liefern (bei ABAP liegt die Rechengenauigkeit von gepackten Zahlen bei maximal 14 Nachkommastellen), es aber auf zwei Nachkommastellen in der Zielvariable runden, die wir selbst mit zwei Dezimalstellen deklariert haben. Diese erhält, durch ABAP kaufmännisch gerundet, den Wert 1.24.

Falls Sie das Ergebnis einer ganzzahligen Division erhalten möchten, müssten Sie die Anweisung umschreiben und statt des Schrägstrichs den Operator DIV einsetzen:

ergebnis = zahl02 DIV zahl01.

Unter sonst gleichen Voraussetzungen ergibt die ganzzahlige Division für den Quotienten den Wert 1. Da die Zielvariable zwei Dezimalstellen hat, steht dort nach dem Ausführen der Anweisung als Inhalt 1.00.

Im dritten Fall interessiert uns der Rest der Ganzzahldivision. Für diesen Fall verwenden wir den Operanden MOD, und die Anweisung lautet:

ergebnis = zahl02 MOD zahl01.

Wieder unter der Annahme, dass alle übrigen Faktoren gleichbleiben, ergibt die ganzzahlige Division 1, Rest 1,11. Dieser Rest wird mit zwei Dezimalstellen in die Zielvariable übertragen, und sie erhält dementsprechend als Inhalt den Wert 1.11.

[zB]  1,5 Stunden

Möglicherweise fragen Sie sich jetzt, ob solche Berechnungen überhaupt praxisrelevant sind: Aber denken Sie nur daran, dass Stunden, Tage oder Jahre in vielen Systemen nicht in Stunden und Minuten erfasst werden, sondern mit Dezimalwerten wie »1,5 Stunden«. Um diese Dezimalwerte auf Stunden und Minuten umzurechnen, kommen Sie um die genannten Divisionsmöglichkeiten nicht herum. Weitere Beispiele finden Sie in Kapitel 5, »Modifikation von Zeichenketten«, und Kapitel 8, »Rechnen mit Datum und Zeit, Mengen und Währungen«.

 


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