貨幣匯率轉換Demo
一、說明
匯率維護在ERP中可以使用事務代碼OB07或者OB08,每次不同幣別的匯率更改在正式生產系統中都會新創建一條記錄,保存之後會存儲在表TCURR中,可以通過函數CONVERT_TO_LOCAL_CURRENCY轉換獲取(注意函數Exporting中各個參數一定不能用常量,要用變量),函數自動會把當前最近的時間的匯率作爲轉化的匯率。
這裏需要注意有一些貨幣比較特殊,比如日元JPY,它是沒有小數點的,系統內存儲的和你查詢看到的不同,這是因爲有轉換因子的緣故,存入表之前SAP會先將金額除以這個因子後再存入。可以調用如下函數進行相互轉換:
- BAPI_CURRENCY_CONV_TO_INTERNAL:轉換成數據庫中內部存儲金額
- BAPI_CURRENCY_CONV_TO_EXTERNAL:轉換成外部實際金額
二、匯率維護
匯率分爲直接匯率(Direct quotation)和間接匯率(Indirect quotation)兩種。
直接匯率:1外幣=XX本位幣
間接匯率:XX外幣=1本位幣
比如,公司代碼本位幣爲人民幣,那麼1USD=6.5CNY爲直接匯率,0.15385USD=1人民幣爲間接匯率。中國採用直接標價法,即美元/人民幣報價。
三、轉換實例
*&---------------------------------------------------------------------*
*& Report ZTEST_CONVERT_CURR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_CONVERT_CURR.
DATA: GV_AMOUNT LIKE BSEG-WRBTR,
GV_INTER LIKE BSEG-WRBTR,
GV_FROM TYPE CHAR20,
GV_TO TYPE CHAR20.
************************************
* selection screen
************************************
PARAMETERS : P_FC TYPE TCURC-WAERS DEFAULT 'JPY',
P_TC TYPE TCURC-WAERS DEFAULT 'CNY',
P_DATE LIKE SY-DATUM DEFAULT SY-DATUM,
P_CURR TYPE BAPICURR-BAPICURR,
P_KURST TYPE TCURR-KURST DEFAULT 'M'.
************************************
* start- of -selection
************************************
START-OF-SELECTION.
*** Conversion of Currency Amounts into Internal Data Format
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
EXPORTING
CURRENCY = P_FC
AMOUNT_EXTERNAL = P_CURR
MAX_NUMBER_OF_DIGITS = 13
IMPORTING
AMOUNT_INTERNAL = GV_INTER.
*** Translate foreign currency amount to local currency
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
DATE = P_DATE
FOREIGN_AMOUNT = GV_INTER
FOREIGN_CURRENCY = P_FC
LOCAL_CURRENCY = P_TC
TYPE_OF_RATE = P_KURST
IMPORTING
LOCAL_AMOUNT = GV_AMOUNT
EXCEPTIONS
NO_RATE_FOUND = 1
OTHERS = 2.
************************************
* end - of - selection
************************************
END-OF-SELECTION.
MOVE P_CURR TO GV_FROM.
MOVE GV_AMOUNT TO GV_TO.
CONDENSE GV_FROM NO-GAPS.
CONDENSE GV_TO NO-GAPS.
WRITE : / P_FC,'→',P_TC.
WRITE : / GV_FROM ,'→',GV_TO.