Auf der Basis von Datums-, Zeit-, Mengen- und Währungsfeldern müssen Sie in der Praxis häufig Berechnungen durchführen. In diesem Kapitel zeigen wir Ihnen zahlreiche Beispiele zu diesem Thema.
8 Rechnen mit Datum und Zeit, Mengen und Währungen 

Einmal abgesehen davon, dass es keinen Sinn ergibt, mit Datums- und Zeitangaben sowie Mengen- und Währungswerten alle denkbaren arithmetischen Operationen durchzuführen, müssen Sie im betriebswirtschaftlichen Alltag dennoch Rechnungen mit Feldern dieser Art ausführen. Wie dies funktioniert und was Sie dabei zu beachten haben, erfahren Sie in diesem Kapitel.
Bereits bei der Deklaration von Datums- und Zeitfeldern müssen Sie feststellen, dass diese Datentypen nicht numerisch, sondern zeichenartig sind. Im Kern sind es demnach Zeichenketten – mit denen Sie allerdings auch rechnen können. Ermöglicht wird das Rechnen durch die automatische Typkonvertierung, die die Umwandlungsarbeit im Hintergrund erledigt.
8.1 Felddeklarationen 

Im ABAP-Report erfolgt die Deklaration von Datumsfeldern mit der DATA-Anweisung und dem Datentyp d. Ein Feld vom Datentyp d ist immer achtstellig: Die ersten vier Stellen sind für das Jahr, die nächsten beiden für den Monat und die beiden letzten für den Tag vorgesehen. Das Format wird als YYYYMMDD dargestellt; der Initialwert für ein Datumsfeld besteht aus acht Nullen.
[»] Einfacher Einstieg
Für den Einstieg ist es am einfachsten, bei der Deklaration eines Datumsfeldes mit dem Zusatz TYPE auf das Systemdatum des SAP-Systems zu verweisen, das Sie in der Struktur SYST im Feld DATUM finden. Alle Eigenschaften des Systemfeldes gelten durch die angeführte Deklaration automatisch auch für Ihr Datumsfeld, u. a. auch die Ausgabeaufbereitung. Wenn Sie diese Verweismöglichkeit nutzen, müssen Sie sich beispielsweise bei der Druckaufbereitung um die Punkte zwischen Tag, Monat und Jahr nicht mehr kümmern, weil es für das Feld SY-DATUM bereits eine fertige Ausgabeformatierung gibt.
Möchten Sie beispielsweise das Feld RECHNUNGSDATUM deklarieren, könnte die Anweisung folgendermaßen aussehen:
DATA rechnungsdatum TYPE sy-datum.
Das Füllen des Datumsfeldes kann über den Zusatz VALUE des DATA-Kommandos als Literal oder während des Programmablaufs durch eine Anweisung erfolgen (siehe nachfolgende Beispiele). Diese Anweisung kann eine arithmetische oder eine Zeichenketten-Operation sein.
Wie Datumsfelder sind auch Zeitfelder eigentlich Zeichenketten. Zeitfelder sind sechsstellig und haben das Format HHMMSS. Die ersten beiden Stellen sind für die Stunden, die mittleren beiden für die Minuten und die letzten beiden Stellen für die Sekunden reserviert. Wie beim Datumsfeld besteht auch beim Zeitfeld der Initialwert aus Nullen; der ABAP-Datentyp für Zeitfelder lautet t.
Auch die Systemzeit finden Sie in einem Feld der Struktur SYST, im Feld UZEIT. Stunden, Minuten und Sekunden werden in Listen häufig durch Doppelpunkte getrennt. Wenn Sie sich um die Ausgabeaufbereitung nicht kümmern möchten, empfiehlt es sich deshalb zumindest für den Einstieg, bei der Deklaration eines Zeitfeldes auf das Feld SYST-UZEIT zu verweisen. Die Deklaration des Feldes UNTERRICHTSBEGINN könnte demnach folgendermaßen aussehen:
DATA unterrichtsbeginn TYPE syst-uzeit.
Für das Füllen des Zeitfeldes gelten die gleichen Ausführungen wie zum Datumsfeld.
[»] Gewohnheiten eines Landes
Die Anzeige und Aufbereitung von Datums- und Zeitfeldern ist von den Gewohnheiten eines Landes abhängig. Aus diesem Grund existieren in der Systemstruktur SYST mehrere Felder für Datum und Uhrzeit, die zur unterschiedlichen Aufbereitung nationaler und internationaler Formate dienen.
Währungsfelder werden im ABAP-Report wie gepackte Zahlen behandelt. Von daher ist die Deklaration genau wie bei einer gepackten Zahl; Sie müssen lediglich auf die richtige Anzahl von Nachkommastellen achten. Etwas aufwendiger wird die Angelegenheit, sobald Währungsfelder aus dem ABAP Dictionary ins Spiel kommen: Die Anzahl von Nachkommastellen sollte für die Rechengenauigkeit auf beiden Seiten gleich sein. Jedoch können Sie sich hier leicht helfen, indem Sie sich bei der Deklaration auf der ABAP-Seite auf die Deklaration des Tabellenfeldes beziehen.
Möchten Sie beispielsweise das Feld MWST_BETRAG zur Berechnung der Mehrwertsteuer deklarieren, können Sie sich mit folgender Anweisung auf die Deklaration des relevanten Betragsfeldes im ABAP Dictionary beziehen:
DATA mwst_betrag TYPE zteilnehmer02-tkurspreis.
Am aufwendigsten ist die Deklaration eines Währungsfeldes im ABAP Dictionary selbst. Zwar werden im ABAP Dictionary Währungsfelder analog zu Betragsfeldern deklariert – sie haben lediglich den speziellen Datentyp CURR –, allerdings müssen Sie im ABAP Dictionary zu jedem Währungsfeld einen Währungsschlüssel definieren. Der Währungsschlüssel gibt an, um welche Währung es sich bei dem Währungsbetrag handelt (Währungsbezeichnung), und ist ein spezielles Textfeld vom Typ CUKY mit der Länge 5.
Ein Währungsfeld im ABAP Dictionary muss daher auf ein Referenzfeld vom Typ CUKY zeigen, und Sie benötigen bei einem Währungsfeld nicht nur den Betrag, sondern auch die Währungsbezeichnung (d. h. den Währungsschlüssel) – Sie möchten schließlich wissen, ob ein Betrag in harter oder in weicher Währung angegeben wird und welche Kaufkraft er repräsentiert. Unter Umständen muss für die Bewertung und die Umrechnung in eine andere Währung später auch noch der richtige Wechselkurs herangezogen werden.
Im ABAP Dictionary hat ein Betragsfeld vom Typ CURR maximal 31 Stellen. Verwenden Sie ein Betragsfeld vom Typ CURR einer Dictionary-Tabelle in einem ABAP-Report, wird der Datentyp CURR des Dictionarys in den ABAP-Datentyp p konvertiert – unter Berücksichtigung der variablen Feldlänge und der Anzahl der Dezimalstellen. Der Währungsschlüssel vom Typ CUKY wird auf der ABAP-Seite in ein Feld vom Typ c mit der Länge 5 konvertiert.
[»] Währungsfeld
Um entsprechende Beispiele bilden und austesten zu können, haben wir in Abschnitt 7.2.2, »Besonderheiten bei Währungs- und Mengenfeldern«, die Tabelle ZTEILNEHMER02 um ein Währungsfeld ergänzt.