Ansicht
Dokumentation

ABENCDS_CONV_FUNC_UNIT_CURR_V2 - CDS CONV FUNC UNIT CURR V2

ABENCDS_CONV_FUNC_UNIT_CURR_V2 - CDS CONV FUNC UNIT CURR V2

BAL Application Log Documentation   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- CDS-View-Entität, Einheits- und Währungskonvertierungsfunktionen

... UNIT_CONVERSION( p1 => a1, p2 => a2, ... )
  $| CURRENCY_CONVERSION( p1 => a1, p2 => a2, ... )
  $| GET_NUMERIC_VALUE( arg )
  $| CURR_TO_DECFLOAT_AMOUNT( arg ) ...


Varianten:

1. ... UNIT_CONVERSION( p1 => a1, p2 => a2, ... )

2. ... CURRENCY_CONVERSION( p1 => a1, p2 => a2, ... )

3. ... GET_NUMERIC_VALUE( arg )

4. ... CURR_TO_DECFLOAT_AMOUNT( arg )

Wirkung

Funktionen für Konvertierungen zwischen Einheiten und zwischen Währungen in einer CDS-View-Entität.

Die Funktionen UNIT_CONVERSION und CURRENCY_CONVERSION haben Schlüsselwortparameter p1, p2, ..., die teilweise optional sind, denen beim Aufruf über => Aktualparameter a1, a2, ... zugeordnet werden müssen bzw. können.

Die Funktionen GET_NUMERIC_VALUE und CURR_TO_DECFLOAT_AMOUNT haben jeweils einen obligatorischen Positionsparameter arg.

Hinweis

Zur Zeit wird die Funktion DECIMAL_SHIFT in CDS-View-Entitäten nicht unterstützt.

Variante 1

... UNIT_CONVERSION( p1 => a1, p2 => a2, ... )


Wirkung

Die Funktion UNIT_CONVERSION führt eine Einheitenkonvertierung für den an den Formalparameter quantity übergebenen Wert durch.

Die Einheitenkonvertierung findet auf Grundlage der in der Transaktion CUNI und in den Datenbanktabellen T006... des Pakets SZME abgelegten mandantenabhängigen Regeln statt.

Die folgende Tabelle zeigt die Formalparameter p1, p2, ... und ihre Bedeutung.

Formalparameter Optional Bedeutung Datentyp Aktualparameter
quantity - Eingangswert QUAN, DEC, INT1, INT2, INT4, DECFLOAT16, DECFLOAT34, FLTP Literal, Feld einer Datenquelle, Parameter, Ausdruck, Pfadausdruck
source_unit - Ausgangseinheit aus Spalte MSEHI der DDIC-Datenbanktabelle T006 UNIT Feld einer Datenquelle, Parameter, Fallunterscheidung, Cast-Ausdruck, Pfadausdruck
target_unit - Zieleinheit aus Spalte MSEHI der DDIC-Datenbanktabelle T006 UNIT Feld einer Datenquelle, Parameter, Fallunterscheidung, Cast-Ausdruck, Pfadausdruck
client X, - Mandant, mit dessen Regeln die Einheitenkonvertierung vorgenommen wird. Da die Mandantenbehandlung für CDS-View-Entitäten implizit stattfindet, kann eine Mandantenspalte nicht explizit als Aktualparameter angegeben werden. Für mandantenabhängigen Quellen gibt es zwei Möglichkeiten: \lbr - entweder wird auf den Parameter verzichtet und die Mandantenspalte implizit ergänzt, oder \lbr - der Aktualparameter kann als Ausdruck, Literal oder Sitzungsvariable angegeben werden (jedoch nicht als Feld einer Datenquelle). CLNT Ausdruck, Literal, Sitzungsvariable
error_handling X Fehlerbehandlung. \lbr Falls 'FAIL_ON_ERROR' kommt es im Fehlerfall zu einer Ausnahme (Standardverhalten) \lbr falls 'SET_TO_NULL' wird das Ergebnis auf den Null-Wert gesetzt, \lbr falls 'KEEP_UNCONVERTED' wird der Ausgangswert nicht geändert. CHAR der Länge 20 Literal

Der Datentyp des Ergebnisses hängt vom Datentyp des Formalparameters quantity.

  • Falls quantity den Datentyp QUAN, DEC, INT1, INT2, INT4, oder FLTP hat, hat das Ergebnis den Datentyp QUAN mit Länge 31 und 14 Nachkommastellen.
  • Falls quantity den Datentyp DECFLOAT16 hat, hat das Ergebnis den Datentyp DECFLOAT16.
  • Falls quantity den Datentyp DECFLOAT34 hat, hat das Ergebnis den Datentyp DECFLOAT34.

Hinweis

Die Präzision des Ergebnisses der Einheitenkonvertierung hängt von der Datenbankplattform ab. Die höchste Präzision wird auf Datenbanken erreicht, welche dezimale Gleitpunktzahlen unterstützen. Das Ergebnis kann rundungsbedingt unterschiedlich zu einer Einheitenkonvertierung sein, die mit ABAP-Mitteln durchgeführt wird, wie z.B. mit einem Standardfunktionsbaustein.

Beispiel

Die folgende CDS-View-Entität ruft in der SELECT-Liste eine Einheitenkonvertierung für die Spalte DEC3 der DDIC-Datenbanktabelle DEMO_EXPRESSIONS auf. Die Quelleinheit wird über ein typisiertes Literal spezifiziert. Die Zieleinheit muss als Parameter übergeben werden. Im Fehlerfall, z.B. wenn keine Umrechnung zwischen den eingegeben Einheiten möglich ist, wird das Ergebnis auf Null gesetzt.

Das Programm DEMO_CDS_UNIT_CONVERSION_VE greift in einer SELECT-Anweisung auf die View zu. Die Zieleinheit wird an den relevanten Formalparameter übergeben. Zum Vergleich wird dort die gleiche Konvertierung auch mit dem Funktionsbaustein UNIT_CONVERSION_SIMPLE ausgeführt. Voraussetzung für das Beispiel ist, dass die Einheiten und ihre Konvertierungsregeln in den entsprechenden DDIC-Datenbanktabellen vorliegen.

Variante 2

... CURRENCY_CONVERSION( p1 => a1, p2 => a2, ... )


Wirkung

Die Funktion CURRENCY_CONVERSION führt eine Währungskonvertierung für den an den Formalparameter amount übergebenen Wert durch. Das Ergebnis ist vom Datentyp CURR oder DECFLOAT34 mit den gleichen technischen Eigenschaften wie der an amount übergebene Aktualparameter. Die Währungskonvertierung wird auf Basis der mandantenabhängigen Regeln, die in den DDIC-Datenbanktabellen TCUR... des Paketes SFIB gespeichert sind, ausgeführt. Diese Regeln können in der Transaktion OB08 bearbeitet werden.

Die folgende Tabelle zeigt die Formalparameter p1, p2, ... und ihre Bedeutung.

Formalparameter Optional Bedeutung Datentyp Aktualparameter
amount - Eingangswert CURR, DECFLOAT34 Feld einer Datenquelle, Parameter, Ausdruck, Pfadausdruck
source_currency - Ausgangswährung aus Spalte WAERS der DDIC-Datenbanktabelle TCURC CUKY Feld einer Datenquelle, Cast-Ausdruck, Pfadausdruck, Parameter
target_currency - Zielwährung aus Spalte WAERS der DDIC-Datenbanktabelle TCURC CUKY Feld einer Datenquelle, Cast-Ausdruck, Pfadausdruck, Parameter
exchange_rate_date - Kursdatum für Spalte GDATU der DDIC-Datenbanktabelle TCURR DATS Feld einer Datenquelle, Literal, Parameter, Pfadausdruck
exchange_rate_type X Kurstyp aus Spalte KURST der DDIC-Datenbanktabelle TCURR, Standardwert: 'M' CHAR der Länge 4 Literal, Parameter
client X, - Mandant, mit dessen Regeln die Währungskonvertierung vorgenommen wird. Da die Mandantenbehandlung für CDS-View-Entitäten implizit stattfindet, kann eine Mandantenspalte nicht explizit als Aktualparameter angegeben werden. Für mandantenabhängigen Quellen gibt es zwei Möglichkeiten: \lbr - entweder wird auf den Parameter verzichtet und die Mandantenspalte implizit ergänzt, oder \lbr - der Aktualparameter kann als Ausdruck, Literal oder Sitzungsvariable angegeben werden (jedoch nicht als Feld einer Datenquelle). CLNT Ausdruck, Literal, Sitzungsvariable
round X Falls 'X' (Standardwert) wird das Zwischenergebnis der Konvertierung kaufmännisch in das Endergebnis gerundet, andernfalls wird abgeschnitten CHAR Literal
decimal_shift X Dieser Formalparameter kann nur mit dem Datentyp CURR für amount verwendet werden.\lbr \lbr Falls 'X' (Standardwert) werden die Nachkommastellen des Ausgangswerts abhängig von den Nachkommastellen der Ausgangswährung verschoben, siehe unten CHAR Literal
decimal_shift_back X Dieser Formalparameter kann nur mit dem Datentyp CURR für amount verwendet werden.\lbr \lbr Falls 'X‘ (Standardwert) werden die Nachkommastellen des Ergebnisses abhängig von den Nachkommastellen der Zielwährung verschoben, siehe unten CHAR Literal
error_handling X Fehlerbehandlung. Falls 'FAIL_ON_ERROR' (Standardwert) kommt es im Fehlerfall zu einer Ausnahme, falls 'SET_TO_NULL' wird das Ergebnis auf den Null-Wert gesetzt, falls 'KEEP_UNCONVERTED' wird der Ausgangswert nicht geändert. CHAR der Länge 20 Literal

Für die Eingabeparameter round, decimal_shift und decimal_shift_back ist es auch möglich, die Literale 'true' oder 'false' (die Groß- und Kleinschreibung wird nicht berücksichtigt). Diese Literale werden intern wie die Werte 'X' bzw. ' ' behandelt.

Behandlung der Dezimalstellen

  • Der Eingangswert wird vor der Konvertierung auf zwei Nachkommastellen gerundet.
  • Der übergebene Wert wird vor der Konvertierung mit 10 hoch Anzahl der Nachkommastellen der Ausgangswährung multipliziert.
  • Wenn an den Parameter decimal_shift der Wert 'X' oder 'TRUE' übergeben wird, wird der übergebene Wert vor der Konvertierung mit 10 hoch zwei weniger der Anzahl der Nachkommastellen der Ausgangswährung multipliziert.
  • Wenn an den Parameter decimal_shift_back der Wert 'X' 'TRUE' übergeben wird, wird das Ergebnis nach der Konvertierung durch 10 hoch zwei weniger der Anzahl der Nachkommastellen der Zielwährung dividiert.
  • Das Ergebnis wird nach der Konvertierung durch 10 hoch Anzahl der Nachkommastellen der Zielwährung dividiert.

Hinweis

  • Da die Konvertierung auf der Datenbank ausgeführt wird, erfolgt die Berechnung teilweise nach anderen Rundungsregeln als in ABAP. Es können nicht in jedem Fall die gleichen Ergebnisse wie bei der Verwendung von Standardfunktionsbausteinen zur Währungskonvertierung erwartet werden, da diese in der Regel mit geringerer Genauigkeit und entsprechend gerundeten Zwischenergebnissen rechnen.
  • Der Parameter decimal_shift soll dazu dienen, den Ausgangswert vor der Konvertierung auf die Anzahl der Nachkommastellen der Ausgangswährung zu setzen, wobei davon ausgegangen wird, dass dessen technischer Typ CURR wie üblich zwei Nachkommastellen hat. Der Parameter decimal_shift_back soll die umgekehrte Operation ausführen.
  • Wenn der technische Typ CURR des Ausgangswerts nicht zwei Nachkommastellen hat, kann das Verhalten der Funktion CURRENCY_CONVERSION unerwartet sein.

Beispiel

Die folgende CDS-View-Entität ruft in der SELECT-Liste eine Währungskonvertierung für die Spalte AMOUNT der DDIC-Datenbanktabelle DEMO_PRICES auf. Die Zielwährung muss als Parameter übergeben werden. Im Fehlerfall, z.B. bei einer nicht vorhandenen Währung, wird das Ergebnis auf Null gesetzt.

Das Programm DEMO_CDS_CURRENCY_CONV_VE greift in einer SELECT-Anweisung auf die View zu, wobei die Zielwährung übergeben wird. Zum Vergleich wird dort die gleiche Konvertierung auch mit dem Funktionsbaustein CONVERT_TO_LOCAL_CURRENCY ausgeführt. Voraussetzung für das Beispiel ist, dass die Währungen und die Konvertierungsregeln in den entsprechenden DDIC-Datenbanktabellen vorliegen.

Beispiel

Im Programm DEMO_CDS_FUNC_CURR_CONV_VE wird die CDS-View oben in einer Subquery einer MODIFY-Anweisung in ABAP SQL verwendet.



Variante 3

... GET_NUMERIC_VALUE( arg )


Wirkung

GET_NUMERIC_VALUE gibt den numerischen Wert eines Währungs- oder Mengenfelds ohne seinen Währungs- oder Einheitenschlüssel zurück. arg muss ein Feld einer Datenquelle sein. Andere elementare Operanden, Ausdrücke oder Funktionen sind nicht möglich. Das Argument arg kann einen der folgenden Datentypen haben, die Referenzannotationen unterstützen: INT1, INT2, INT4, DEC, FLTP, DECFLOAT16, DECFLOAT34, CURR oder QUAN. Das Ergebnis der Funktion GET_NUMERIC_VALUE hat den Datentyp DECFLOAT34 und ihm sind keine Referenzinformationen zugeordnet. Dies bedeutet, dass kein Währungs- oder Einheitenschlüssel zugeordnet ist.

Hinweise

Wenn arg den Datentyp CURR hat, findet eine implizite Dezimalverschiebung statt.

Beispiel

Mit folgender CDS-View-Entität wird die Funktion GET_NUMERIC_VALUE verwendet, um die Anzahl Buchungen zu erhalten. Hiermit wird der Gesamtwert der aktuellen Buchungen (Feld paymentsum) durch den Preis eines Fluges (Feld price) geteilt. Ohne die Funktion GET_NUMERIC_VALUE wäre dies nicht möglich, da Elemente vom Datentyp CURR in arithmetischen Ausdrücken nicht erlaubt sind.

Details zu den Elementen:

  • paymentsum ist vom Datentyp CURR, hat eine Referenzannotation, die einen Währungsschlüssel zuordnet und enthält den Gesamtwert der aktuellen Buchungen.
  • price ist vom Datentyp CURR, hat eine Referenzannotation, die einen Währungsschlüssel zuordnet und enthält den Preis eines Fluges.
  • Number_of_bookings ist vom Datentyp DECFLOAT34 und hat keinen zugeordneten Währungsschlüssel.

Mit dem Programm DEMO_CDS_GET_NUMERIC_VALUE wird auf die View zugegriffen und folgende Schritte ausgeführt:

  • Es werden die Elementannotationen von price gezeigt. Eine ist die Annotation Semantics.amount.currencyCode, die einen Währungsschlüssel zuordnet.
  • Es werden die Elementannotationen von number_of_bookings gezeigt. Dieses Feld hat keine Annotationen.
  • Hiermit wird die Struktur der CDS-View-Entität gezeigt. Das Element number_of_bookings ist vom Typ e, der mit dem eingebauten DDIC-Typ DECFLOAT34 übereinstimmt.





Variante 4

... CURR_TO_DECFLOAT_AMOUNT( arg )


Wirkung

Die Funktion CURR_TO_DECFLOAT_AMOUNT konvertiert ein Währungsfeld vom Datentyp CURR in ein Währungsfeld vom Datentyp DECFLOAT34. arg muss den Datentyp CURR haben, und ein Währungsschlüssel muss über die Annotation Semantics.amount.currencyCode zugeordnet sein. Das Ergebnis hat den Datentyp DECFLOAT34, und es muss genau der gleiche Währungsschlüssel zugeordnet sein, der auch arg zugeordnet ist.

Hinweise

Diese Funktion führt eine implizite Dezimalverschiebung durch.

Beispiel

Mit folgender CDS-View-Entität wird die Funktion CURR_TO_DECFLOAT_AMOUNT demonstriert. Das Feld curr10_4 wird vom Datentyp CURR in den Datentyp DECFLOAT34 konvertiert. Das Quell- und Zielfeld erfordern eine Zuordnung des Währungsschlüssels.

Mit dem Programm DEMO_CDS_CURR_TO_DEC wird auf die View zugegriffen und folgende Schritte ausgeführt:

  • Es werden alle Elementannotationen der View DEMO_CDS_CURR_TO_DEC gezeigt. Das Quellfeld und das Zielfeld haben jeweils einen zugeordneten Währungsschlüssel.
  • Hiermit werden die Komponenten der CDS-View-Entität ausgewertet. Das Element curr_conv ist vom Typ e, der mit dem eingebauten DDIC-Typ DECFLOAT34 übereinstimmt.






General Material Data   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 34197 Date: 20240523 Time: 174841     sap01-206 ( 370 ms )