Ansicht
Dokumentation

ABENFIXED_POINT_ARITH_EXTERNAL - FIXED POINT ARITH EXTERNAL

ABENFIXED_POINT_ARITH_EXTERNAL - FIXED POINT ARITH EXTERNAL

RFUMSV00 - Advance Return for Tax on Sales/Purchases   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Festpunktarithmetik beim externen Prozeduraufruf

Eine extern aufgerufene Prozedur wird gemäß der Eigenschaft Festpunktarithmetik ihrer Kompilationseinheit ausgeführt. Dabei wird jeder an einen Formalparameter der Prozedur angebundene Aktualparameter unabhängig von der entsprechenden Eigenschaft des aufrufenden Programms und unabhängig von Parameterart und Übergabeart ebenfalls gemäß der Eigenschaft des aufgerufenen Programms behandelt.

Hinweis

Das hier beschriebene Verhalten liegt darin begründet, dass die Parameterübergabe unabhängig von Referenz- und Wertübergabe sein soll. Um die entsprechenden Schwierigkeiten zu umgehen, wird dringend empfohlen, die Festpunktarithmetik in keinem Programm auszuschalten. Dies gilt in diesem Zusammenhang insbesondere auch für Class-Pools und Funktionsgruppen.

Beispiel

Gegeben sei eine globale Klasse:

CLASS cl_test DEFINITION PUBLIC.
  PUBLIC SECTION.
    CLASS-METHODS meth RETURNING value(p) TYPE string.
ENDCLASS.

CLASS cl_test IMPLEMENTATION.
  METHOD meth.
    p = '1000'.
  ENDMETHOD.
ENDCLASS.

Ein aufrufender Programmabschnitt kann so aussehen:

DATA pack TYPE p DECIMALS 2.

pack = cl_test=>meth( ).

Das Ergebnis sieht dann in Abhängigkeit von den Eigenschaften wie folgt aus, wobei in der obersten Zeile die Eigenschaften des aufrufenden und in der linken Spalte die Eigenschaften des aufgerufenen Programms aufgeführt sind:

Festpunktarithmetik An Aus
An 1000,00 1000,00
Aus 10,00 10,00

Nur wenn in der aufgerufenen Prozedur die Festpunktarithmetik eingeschaltet ist, erfolgt die Zuweisung des Formalparameters an den angebundenen Aktualparameter inklusive der zugehörigen Konvertierung mit Berücksichtigung dessen Dezimaltrennzeichens. Wenn in der aufgerufenen Prozedur die Festpunktarithmetik ausgeschaltet ist, wird das Dezimaltrennzeichen des Aktualparameters nicht berücksichtigt.

Wenn der Aufruf dagegen wie folgt aussieht:

DATA pack TYPE p DECIMALS 2.

pack = + cl_test=>meth( ).

In diesem Fall sieht das Ergebnis folgendermaßen aus:

Festpunktarithmetik An Aus
An 1000,00 10,00
Aus 1000,00 10,00

In diesem Fall erfolgt der Aufruf in einem arithmetischen Ausdruck. Der Rückgabewert des Aufrufs wird erst einem Zwischenergebnis vom Typ des Formalparameters zugewiesen und dieses dann im aufrufenden Programm in den Rechentyp des arithmetischen Ausdrucks konvertiert. In diesem Fall bestimmt also die Eigenschaft des aufrufenden Programms, ob das Dezimaltrennzeichen berücksichtigt wird oder nicht.

Das Verhalten im zweiten Fall entspricht in der Regel eher den Erwartungen eines Aufrufers. Man kann es natürlich auch unter Einführung einer Hilfsvariablen vom Typ des Formalparameters erreichen, die man im aufrufenden Programm erst als Aktualparameter verwendet und dann dem Zielfeld zuweist.






CL_GUI_FRONTEND_SERVICES - Frontend Services   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 4579 Date: 20240606 Time: 155944     sap01-206 ( 66 ms )