在SAP系統內,不同的貨幣的小數的位數有可能不一樣的,比如:日幣和人民幣的就不同。
代碼:
1
2
3
4
5
|
REPORT ztest_currency_convert.
DATA: l_netwr TYPE p DECIMALS 2.
l
_netwr = '1.8'.
WRITE:/ 'JPY:',l_netwr CURRENCY 'JPY'.
WRITE:/ 'RMB:',l_netwr CURRENCY 'RMB'.
|
運行結果:
同樣輸入了1.8,但是輸出的結果卻不同,日幣擴大了100倍,變成了180日元,而RMB還保持原樣,1.8元,想想很合理,日元最小單位是元,而rmb最小是分。
換句話,系統自動給日元加了個轉換因子100,rmb的轉換因子是1.
這個轉換因子學名叫貨幣轉換因子(Currency Converting Factor),是在abap開發中的一個重要的概念。計算公式如下:
貨幣轉換因子 = 100 × 貨幣的最小單位(小數點后位數,例如,小數點3位,最小單位就是0.001).
當沒有小數點時,貨幣轉換因子就是100 × 1 = 100.
貨幣的小數位數是保存在表TCURX中的,正常的貨幣都是小數點后2位的,這個是默認的,不保存在這個表中,也就是凡是在表tcurx中找不到的貨幣的轉換因子都是100 × 0.01 = 1,比如rmb。
在上圖中能看到日元的是沒有小數點,是0,所以日元的轉換因子 = 100 × 1 = 100.
SAP提供了一個函數CURRENCY_CONVERTING_FACTOR能直接得到貨幣的轉換因子,
上面這個貨幣的轉換過程是SAP自動實現的,比如180日元在數據庫中會自動保存成1.8,但是有個前提就是一定要指定幣種。
數據庫中顯示:
而在屏幕上,讀出來的就是自動轉換后的正確金額。
我們在ABAP編程時要注意指定幣種:
1) write輸出時,指定currency
1
|
WRITE: g_netwr CURRENCY vbap-waerk.
|
2) screen中指定參考單位
3) ALV 中也要在catelog中指定參考貨幣單位,
SLIS_T_FIELDCAT_ALV-cfieldname
SLIS_T_FIELDCAT_ALV-slis_tabname
OO ALV中
另外:貨幣的一些相關表:
TCURT:貨幣描述文本
TCURC:貨幣代碼(Currency Codes)
以上。