ABAP 金額內外部轉換函數


 SAP貨幣存儲

一般而言,幣種的小數位為2,所以系統默認的位數也是2,但是有一些特殊幣種如日元JPY,沒有小數位。只要小數位不等於2,需要在系統中特殊處理(通過轉換因子進行轉換)。

1、如果某貨幣的小數位不是2位,則需要通過OY04設置其小數位數,即需在TCURX表中進行維護
2、系統中的數據表存放的日元JPY俄盧布RUR等貨幣比前台輸入的金額小100倍,因為它們沒有小數位,所以轉換因子為100,存入表之前SAP會先將金額除以這個因子后再存入
3、系統根據轉換因子將原金額轉換成含小位小數的金額后存儲(據說根據ISO的什么標准),如日元為0位小數,轉換因子為100,120日元除以因子100后轉換后變成1.20,縮小100倍。如為USDN為5位小數,其轉換因子為100/10/10/10/10/10=0.001,12.01230除以0.001后則轉換成12012.30,擴大1000倍。SAP在金額數據存儲時會自動的轉換,即SAP很煩的externalinternal的數據格式。

函數名 用途 備注
CURRENCY_CONVERTING_FACTOR 取得貨幣的轉換因子  
     
BAPI_CURRENCY_CONV_TO_INTERNAL 根據貨幣把金額從外部轉為內部  
BAPI_CURRENCY_CONV_TO_EXTERNAL 根據貨幣把金額從內部轉為外部  
CURRENCY_AMOUNT_DISPLAY_TO_SAP 根據貨幣把金額從外部轉為內部 參數類型固定(15,4)
CURRENCY_AMOUNT_SAP_TO_DISPLAY 根據貨幣把金額從內部轉為外部 參數類型固定(15,4)
     
UNITS_STRING_CONVERT 將帶分隔符的字符型金額轉為數字型 不能轉帶有正負號的金額
     
CLOI_PUT_SIGN_IN_FRONT 金額負號提前 只能用字符類型進行操作
WRITE 格式化(轉為字符型,加千分位) WRITE <f> CURRENCY <c>.

 

 

 

 

 

 

      

 

 

 

函數使用

  • BAPI_CURRENCY_CONV_TO_INTERNAL

作用:將外部金額轉換為內部存儲金額,實質上過程是將外部金額除以轉換因子即可得到

CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
  EXPORTING
    currency             = 'JPY' "金額幣別
    amount_external      = jpy_e "外部金額
    max_number_of_digits = 23    "轉換后金額最大長度
  IMPORTING
    amount_internal      = jpy_i "轉換后的內部存儲金額
    return               = ret.  "消息
  • UNITS_STRING_CONVERT

作用:根據當前用戶的金額顯示方式,將帶有分隔符的金額(字符型)轉換為P類型的數值。
例如:將“1,000.123”轉換為 1000.123

SAP中數字顯示的三種方式:
1.小數點是逗號,分隔符是句號 N.NNN,NN
2.小數點是句號,分隔符是逗號 N,NNN.NN
3.小數點是逗號,分隔符是空格 N NNN,NN
系統以哪種方式顯示,存儲在用戶表USR01的DCPFM字段,值分別是"空" 、“X”、“Y”。
調用函數的時候將這個字段將作為其中的一個輸入參數.函數會根據當前顯示轉換.

  DATA: l_clabs TYPE p DECIMALS 3,
        l_dcpfm LIKE usr01-dcpfm.

  SELECT SINGLE dcpfm
    INTO l_dcpfm
    FROM usr01
   WHERE bname = sy-uname.

  CALL FUNCTION 'UNITS_STRING_CONVERT'
    EXPORTING
      units_string       = '123,456.789'  "-123,456.789 會報錯
      dcpfm              = l_dcpfm        "此時為
*     MLLN               = 'M'
*     TSND               = 'T'
    IMPORTING
      units              = l_clabs
    EXCEPTIONS
      invalid_type       = 1
      OTHERS             = 2.

 

PS:轉換因子是如何得到的

換算率:貨幣中最大單位與最小單位相差倍數
轉換因子:轉換因子 = 100/換算率

TCURX-CURRDEC中存儲的小數位實質上是根據同種幣種的最大單位與最小的換算率= 10X來計算得到的,式中的X即TCURX-CURRDEC表字段中的小數位,如CNY(元、角、分)中的最大單位與最小單位相差100倍(換算率為100),所以100 = 10XX就為2,最后TCURX-CURRDEC存儲的就是2(但如果值為2正好符合兩位小數存儲,是可以不需要在TCURX表中配置的,所以查不到CNY的配置數據,因為不配置時默認值也是2);另外,JPY日元沒有最小單位,所以最大單位與最小單位的換算率就是1(1 = 10X),所以X就為0,所以TCURX-CURRDEC就是0。而轉換因子計算式為:轉換因子 = 100/10X,(CNY人民幣:100/10X=100/102 =1JPY日元:100/10X=100/100 =100),即轉換因子 = 100/貨幣的最大單位與最小單位換算率,金額入庫時需要除以這個轉換因子,讀取出來展示前需要乘以這個轉換因子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM