zoukankan      html  css  js  c++  java
  • 金額処理

    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'  
  • 相关阅读:
    HDU 4024 Dwarven Sniper’s hunting(数学公式 或者是二分)
    二分图最大匹配总结
    HDU 4022 Bombing (STL应用)
    HDU 1847 Good Luck in CET4 Everybody!(组合博弈)
    HDU 1556 Color the ball(树状数组)
    HDU 4023 Game(博弈)
    HDU 1406 完数(水题)
    HDU 4021 24 Puzzle
    Oracle 多表查询优化
    【编程之美】字符串移位包含的问题(续)
  • 原文地址:https://www.cnblogs.com/yjyongil/p/11097232.html
Copyright © 2011-2022 走看看