• 金額処理


    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'  
  • 相关阅读:
    算法|LeetCode之找零钱[Java]
    算法|LeetCode之最大子段和[Java]
    算法|LeetCode之打家劫舍[Java]
    设计模式|观察者模式
    设计模式|原则—依赖倒置原则
    设计模式|原则—开闭原则
    数据库|MyBatis项目配置案例详解与Web下的增删改查实现[附项目源码]
    数据库|深入浅出MYSQL数据库—思维导图[附下载链接]
    算法|深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
    Java|单向链表的实现
  • 原文地址:https://www.cnblogs.com/yjyongil/p/11097232.html
Copyright © 2020-2023  润新知