8.4 Rechnen mit Mengen- und Währungsfeldern 

Im Gegensatz zum Rechnen mit Datums- und Zeitfeldern ist das Rechnen mit Mengen- und Währungsfeldern relativ einfach, wenn Sie einige Grundregeln beachten. Solange Sie sich ausschließlich in der ABAP-Welt bewegen, betrachten Sie diese Felder genau wie alle anderen Felder vom Typ p; je nach betriebswirtschaftlicher Anforderung arbeitet man mit unterschiedlich vielen Dezimalstellen. In der Praxis ist die Anzahl der Nachkommastellen sehr bedeutsam für die Rechengenauigkeit und kann wesentlich höher liegen als die Anzahl der in einer Liste ausgewiesenen Dezimalstellen. Exemplarisch sei hier nur auf die Bedeutung der Rechengenauigkeit bei Wechselkursumrechnungen von Währungen hingewiesen.
Werden Mengen- und Währungsfelder aus dem ABAP Dictionary mit Berechnungen in ABAP-Programmen verbunden, kann man nicht mehr so frei operieren. In solchen Fällen müssen Sie die Felddeklarationen der ABAP-Seite auf die Deklarationen im ABAP Dictionary abstimmen, um zu verhindern, dass Informationen verloren gehen.
Diese Abstimmung bezieht sich insbesondere auf zwei Aspekte: auf die Anzahl der Nachkommastellen und auf die zugehörigen Mengen- und Währungsschlüssel. Im ABAP Dictionary entspricht ein Währungsfeld zwar einem Betragsfeld vom Typ DEC, hat aber einen eigenen Datentyp CURR und bezieht sich immer auf ein zugehöriges Währungsschlüsselfeld vom Typ CUKY. Außerdem dürfen Währungsfelder bis zu 17 Stellen lang sein. Die Währungsschlüsselfelder vom Typ CUKY auf der Dictionary-Seite entsprechen Zeichenkettenfeldern vom Typ c auf der ABAP-Seite und haben die feste Länge von fünf Zeichen. Es empfiehlt sich deshalb dringend, bei der Deklaration der jeweiligen Felder auf der ABAP-Seite keine selbst erfundenen Deklarationen zu verwenden, sondern immer auf die Deklarationen im ABAP Dictionary zu verweisen. Sollte sich auf der Dictionary-Seite eine Deklaration ändern, gibt es außerdem kein Problem mit der Aktualisierung der relevanten ABAP-Reports.
Diese Grundregeln gelten für Mengen- und Währungsfelder gleichermaßen, nur dass für Mengenfelder der spezielle Datentyp auf der Dictionary-Seite QUAN heißt und die Mengeneinheiten in zugehörigen Feldern vom Typ UNIT stehen. Die Felder für die Mengeneinheiten können auf der Dictionary-Seite zwei oder drei Stellen haben und entsprechen auf der ABAP-Seite wiederum Zeichenketten vom Typ c der gleichen Länge. Mengenfelder können auf der Dictionary-Seite ebenfalls bis zu 17 Stellen haben und sind auf der ABAP-Seite als Felder vom Typ p zu deklarieren.
Wie bei den Währungsfeldern wird auch bei den Mengenfeldern dringend empfohlen, keine eigenen Deklarationen auf der ABAP-Seite zu erfinden, sondern ebenfalls auf bestehende Deklarationen des ABAP Dictionarys zu verweisen.
Aufgrund der strukturellen Ähnlichkeiten von Mengen- und Währungsfeldern wird diese Thematik nur an einem Beispiel erläutert. Aus der Teilnehmertabelle sollen der Name des Teilnehmers, der Kurspreis und die Kurswährung gelesen werden. Alle Teilnehmer sind in einer Liste auszugeben; dabei sollen in einer Zeile der Teilnehmername, der Kurspreis, der Mehrwertsteuerbetrag und der Rechnungsbetrag stehen.
-
Im ersten Schritt setzen Sie den Satz für die Mehrwertsteuer und weisen diesen dem Feld MWST_SATZ zu. Das Feld soll den Faktor für die Steuer enthalten und ist deshalb mit dem Datentyp p und zwei Nachkommastellen deklariert. In der Praxis sind Werte wie der Mehrwertsteuersatz natürlich in Tabellen hinterlegt und werden nicht hart in den Quellcode hineincodiert. Für den Einstieg wird jedoch in diesem Beispiel darüber hinweggesehen.
mwst_satz = '0.19'.
-
Die Daten aus der Tabelle müssen Sie satzweise verarbeiten und ausgeben. Hierzu müssen Sie die Sätze nacheinander in eine Workarea lesen und eine Schleife starten, um alle Felder aller Sätze der Tabelle zu lesen:
SELECT * FROM zteilnehmer02 INTO wa_zteilnehmer02.
-
Sofern die Tabelle überhaupt Daten enthält, steht nun ein Datensatz in der Workarea. Alle Felder sind bekannt und können angesprochen werden. Durch die Multiplikation des Kurspreises mit dem Steuerfaktor wird der Mehrwertsteuerbetrag ermittelt und in das Zielfeld geschrieben. Wie bereits geschildert, sollte auch das Feld MWST_BETRAG hinsichtlich seiner Deklaration auf das Dictionary-Feld ZTEILNEHMER02-TKURSPREIS verweisen.
mwst_betrag =
mwst_satz * wa_zteilnehmer02-tkurspreis. -
Durch die Addition von Mehrwertsteuerbetrag und Kurspreis ergibt sich der zu bezahlende Rechnungsbetrag. Auch das Feld RECHNUNGSBETRAG sollte bezüglich seiner Deklaration auf das Feld ZTEILNEHMER02-TKURSPREIS verweisen:
rechnungsbetrag =
mwst_betrag + wa_zteilnehmer02-tkurspreis. -
Alle nötigen Felder sind damit berechnet, und die Ausgabe der Listzeile kann erfolgen:
WRITE: / wa_zteilnehmer02-tname,
wa_zteilnehmer02-tkurspreis,
wa_zteilnehmer02-twaehrung,
mwst_betrag,
wa_zteilnehmer02-twaehrung,
rechnungsbetrag,
wa_zteilnehmer02-twaehrung. -
Nachdem alle Sätze der Tabelle gelesen, verarbeitet und ausgegeben wurden, kann die Leseschleife wieder geschlossen werden:
ENDSELECT.