close

Refer to https://www.cnblogs.com/ruingy/p/3476409.html

https://answers.sap.com/questions/1258851/currency-conversion-off-by-factor-of-100.html

SAP中的Currency Converting Factor

 

    ABAP編程中,有個概念很重要,即Currency Converting Factor(貨幣轉換因子)。可能很多ABAP初學者都不知道這是什麼東西,這裡我們就簡單探討下。

1. 什麼是貨幣轉換因子
在SAP中,貨幣是維護在TCURC表裡面,這從Domain: WAERS中可以看到。
不過這裡我們要介紹的是表TCURX,它維護了貨幣金額的小數位。比如JPY日元,在該表是0。正常的貨幣都是2位小數的。那麼,該表有什麼意義呢?我們來看下面的例子。
 
DATA: netwr TYPE p DECIMALS 2.
 
 
輸出的結果是130,即1.3*100,我們說日元的轉換因子為100。這是因為TCURX定義了日元沒有小數位,那麼數據庫表的實際數字1.3 就解釋成了130。反過來就是,我們認為的130日元,在數據庫裡存儲成了1.3。這個過程都是SAP自動處理的。
同理,小數位為1的,其轉換因子為10;而RMB因為小數位為2,其轉換因子為1,這也是系統的默認值。
 
2. 如何將CURR字段賦給DEC(P)字段
如果要將一個CURR字段賦值給類型為DEC(P)的字段,則要考慮貨幣轉換因子的影響。當我們寫與外系統集成的接口時,這就顯得很有必要了。
這裡介紹個函數:CURRENCY_CONVERTING_FACTOR,它可用於讀取貨幣轉換因子。
 
DATA: v LIKE vbap-netwr,
      p TYPE p DECIMALS 2,
      cur LIKE vbap-waerk,
      factor TYPE p DECIMALS 3.

v = '1.3'.
cur = 'JPY'.

CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
  EXPORTING
    currency          = cur
  IMPORTING
    factor            = factor
  EXCEPTIONS
    too_many_decimals = 1
    OTHERS            = 2.
IF sy-subrc <> 0.
  factor = 1.
ENDIF.

p = v * factor.
WRITE: p.
這樣,我們與外系統集成時,應該以p作為接口參數,130日元就不會錯誤地成了1.3日元。
 
3. ABAP編程中需要注意的地方
在編程中,我們對CURR字段要多加以注意,下面簡單舉幾個應用例子。
(1) List中,當輸出CURR字段時,記得指定對應的貨幣.
    如: WRITE: vbap-netwr CURRENCY vbap-waerk.
(2) Screen中,對於CURR字段,需要設置對應的貨幣字段,
(3) ALV中,需要對FIELD CATALOG進行設置.
    如: ls_cfieldname = 'WAERS'. "這裡的WAERS是內表中的另一字段
arrow
arrow

    Benson 發表在 痞客邦 留言(0) 人氣()