SAP 金额在表中的存储及货币转换因子
場景:一個接口出問題了,SAP通過RFC將SO數據傳輸到Java系統,錯誤的將100日元傳為1.00日元。
其實查看SAP透明表發現,表中存儲的的確是1.00,是前臺真實數據的1/100,開發接口時沒注意到這種情況,也就導致了接口發生錯誤。
這在SAP系統中是常見的,SAP各種幣種的金額都有默認的小數位數,像人民幣CNY,美元等都是2位小數,日元和韓元是0位,及沒有小數位。各種幣種的金額在透明表中存儲都是同一個字段,在存儲到表中是都會做一個轉換,就有了貨幣轉換因子的概念,如上述日元,轉換因子為100.
有以下幾種轉換方式:
1、使用function module CURRENCY_CONVERTING_FACTOR獲取某個幣種的貨幣轉換因子,然后將透明表中的金額乘以貨幣轉換因子就可以了。
2、使用function module FWOS_CURRENCY_DECIMALS_READ獲取某個幣種的小數位數N,貨幣轉換因子等于10的(2 - N)次方。
3、直接進行轉換的function moduleCURRENCY_AMOUNT_SAP_TO_DISPLAY,另外還有反向轉換的CURRENCY_AMOUNT_DISPLAY_TO_SAP可以使用。
4、使用write to語句指定幣種,WRITE p_amt1 currency 'JPY' to p_amt2.
還有兩個問題,
Q1、為什么在SAP系統內開發的報表或功能程序沒有顯示錯誤呢?
A: 在ALV或者screen上人為指定了幣種,這樣SAP系統會根據此幣種的貨幣轉換因子自動轉換后顯示。
Q2:使用貨幣轉換因子,乘法還好,除法的話會出現小數位四舍五入的,導致的數據誤差怎么辦?
A:沒法辦。SAP標準程序輸入金額大多不會有此問題,他根據幣種限制了小數位數的輸入;但是自定義開發的程序多半沒有考慮,像一些報表需要復雜的金額運算,小數位誤差在所難免。
?
在SAP條件記錄中,百分比的存儲也有此種情況,需要注意。
?
總結
以上是生活随笔為你收集整理的SAP 金额在表中的存储及货币转换因子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CL_GUI_PICTURE
- 下一篇: SAP 货币转换中的转换因子