金額処理

 

ABAPにおける金額項目は常に特定の通貨と結び付けられています。異なる通貨の金額換算や、内部書式と外部書式間の変換など、SAP標準から様々な汎用モジュールを用意されています。
このトピックでは、金額処理に関わる様々な方法を目的毎に纏めて説明します。

通貨情報取得

通貨換算係数取得

CURRENCY_CONVERTING_FACTOR

通貨換算係数を取得する関数。

DATA: WK_WAERS TYPE VBRK-WAERK.
DATA: WK_FACTOR TYPE P DECIMALS 3.

CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
 EXPORTING
  CURRENCY = WK_WAERS “ 通貨コード
 IMPORTING
  FACTOR = WK_FACTOR ” 通貨換算係数
 EXCEPTIONS
  TOO_MANY_DECIMALS = 1
  OTHERS = 2.

為替レート換算係数取得

READ_EXCHANGE_RATE

為替レート取得

READ_EXCHANGE_RATE

金額換算

外貨通貨→国内通貨

外貨通貨金額から国内通貨金額を換算するには、汎用モジュールCONVERT_TO_LOCAL_CURRENCYを利用できます。

 
REPORT  Y_TEST_XXXX. 

DATA: 
      F_CURR       TYPE TCURR-FCURR, 
      L_CURR       TYPE TCURR-TCURR, 
      F_VALUE      TYPE P LENGTH 8 DECIMALS 2, 
      L_VALUE      TYPE P LENGTH 8 DECIMALS 2, 
      EX_RATE      TYPE TCURR-UKURS, 
      F_FACTOR     TYPE TCURR-FFACT, 
      L_FACTOR     TYPE TCURR-TFACT. 


F_CURR  = 'JPY'. 
L_CURR  = 'THB'. 
F_VALUE = '0.02'. 

CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY' 
  EXPORTING 
*   CLIENT           = SY-MANDT 
    DATE             = SY-DATUM  "為替レート自動取得時の基準日 
    FOREIGN_AMOUNT   = F_VALUE   "外貨通貨金額 
    FOREIGN_CURRENCY = F_CURR    "外貨通貨 
    LOCAL_CURRENCY   = L_CURR    "国内通貨 
*    RATE            = '29.36'   "為替レートを指定する場合は、このパラメータを利用すると 
                                 "ともにREAD_TCURRを''にする 
    TYPE_OF_RATE     = 'B'       "為替レートタイプ B: 
    READ_TCURR       = 'X'       "'X':為替レートはTCURRより取得、'':為替レートは 
                                 "RATEパラメータの値を使用 
  IMPORTING 
    EXCHANGE_RATE       = EX_RATE   "換算時の為替レート 
    FOREIGN_FACTOR      = F_FACTOR  "換算時の換算係数(外貨) 
    LOCAL_AMOUNT        = L_VALUE   "換算後国内通貨金額 
    LOCAL_FACTOR        = L_FACTOR  "換算時の換算係数(国内通貨) 
*   EXCHANGE_RATEX          = 
*   FIXED_RATE              = 
*   DERIVED_RATE_TYPE       = 
* EXCEPTIONS 
*   NO_RATE_FOUND           = 1 
*   OVERFLOW                = 2 
*   NO_FACTORS_FOUND        = 3 
*   NO_SPREAD_FOUND         = 4 
*   DERIVED_2_TIMES         = 5 
*   OTHERS                  = 6 
   . 
IF SY-SUBRC <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 


WRITE:/'FOREIGN CURRENCY=', F_CURR, 
      /'FOREIGN_FACTOR=', F_FACTOR, 
      /'FOREIGN VALUE=', F_VALUE, 
      /'EXCHANGE_RATE=', EX_RATE, 
      /'LOCAL CURRENCY=', L_CURR, 
      /'LOCAL_FACTOR=', L_FACTOR, 
      /'LOCAL VALUE=',  L_VALUE. 

WRITE:/ F_CURR,F_VALUE  CURRENCY F_CURR. 
WRITE:/ L_CURR,L_VALUE  CURRENCY L_CURR. 

国内通貨→外貨通貨

CONVERT_TO_FOREIGN_CURRENCY 国内通貨額の外貨への換算

 
REPORT  Y_TEST_XXXX. 

DATA: 
      F_CURR       TYPE TCURR-FCURR, 
      L_CURR       TYPE TCURR-TCURR, 
      F_VALUE      TYPE P LENGTH 8 DECIMALS 2, 
      L_VALUE      TYPE P LENGTH 8 DECIMALS 2, 
      EX_RATE      TYPE TCURR-UKURS, 
      F_FACTOR     TYPE TCURR-FFACT, 
      L_FACTOR     TYPE TCURR-TFACT. 


F_CURR  = 'JPY'. 
L_CURR  = 'THB'. 
L_VALUE = '3'. 


CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY' 
  EXPORTING 
*   CLIENT           = SY-MANDT 
    DATE             = SY-DATUM  "為替レート自動取得時の基準日 
    LOCAL_AMOUNT   = L_VALUE   "国内通貨金額 
    FOREIGN_CURRENCY = F_CURR    "外貨通貨 
    LOCAL_CURRENCY   = L_CURR    "国内通貨 
*    RATE            = '0.07'   "為替レートを指定する場合は、このパラメータを利用すると 
                                 "ともにREAD_TCURRを''にする 
    TYPE_OF_RATE     = 'B'       "為替レートタイプ B: 
    READ_TCURR       = 'X'       "'X':為替レートはTCURRより取得、'':為替レートは 
                                 "RATEパラメータの値を使用 
  IMPORTING 
    EXCHANGE_RATE       = EX_RATE   "換算時の為替レート 
    FOREIGN_FACTOR      = F_FACTOR  "換算時の換算係数(外貨) 
    FOREIGN_AMOUNT     = F_VALUE   "換算後外貨金額 
    LOCAL_FACTOR        = L_FACTOR  "換算時の換算係数(国内通貨) 
*   EXCHANGE_RATEX          = 
*   FIXED_RATE              = 
*   DERIVED_RATE_TYPE       = 
* EXCEPTIONS 
*   NO_RATE_FOUND           = 1 
*   OVERFLOW                = 2 
*   NO_FACTORS_FOUND        = 3 
*   NO_SPREAD_FOUND         = 4 
*   DERIVED_2_TIMES         = 5 
*   OTHERS                  = 6 
   . 
IF SY-SUBRC <> 0. 
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 


WRITE: 
      /'LOCAL CURRENCY=', L_CURR, 
      /'LOCAL_FACTOR=', L_FACTOR, 
      /'LOCAL VALUE=',  L_VALUE, 
      /'FOREIGN CURRENCY=', F_CURR, 
      /'FOREIGN_FACTOR=', F_FACTOR, 
      /'FOREIGN VALUE=', F_VALUE, 
      /'EXCHANGE_RATE=', EX_RATE 
      . 

WRITE:/ L_CURR,L_VALUE  CURRENCY L_CURR. 
WRITE:/ F_CURR,F_VALUE  CURRENCY F_CURR. 

任意通貨間の換算

任意通貨間の換算に関しては、標準から以下二つの汎用モジュールが提供されていますが、

  • CONVERT_FOREIGN_TO_FOREIGN_CUR 外貨金額の別外貨通貨への換算
  • CONVERT_CURRENCY_BY_RATE 与えられたレートを使用した通貨の変換

いずれも未リリースの属性状態であり、正しく動作しないようです。

書式変換

SAPシステムでは、多通貨が混在しているため、実際に内部管理された金額値は、通貨毎にそれぞれ異なります。例えば、JPYの通貨型項目は通常本来の値の1/100で内部格納されています。
そのため、金額を入出力する際に、内部⇔外部の間に都度書式を変換する必要があります。

外部書式→内部書式変換

汎用モジュール利用

  
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'  
EXPORTING  
currency = 'JPY'  
amount_external = l_external_amount  
max_number_of_digits = 15  
IMPORTING  
amount_internal = l_internal_amount.  

内部書式→外部書式変換

汎用モジュール利用

  
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'  
EXPORTING  
currency = 'JPY'  
amount_internal = l_internal_amount  
IMPORTING  
amount_external = l_external_amount. 

命令利用

 
WRITE XXX TO XXX 'JPY'  

参考一覧

ログインするとコメントできます。