货币汇率转换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.