一、说明
汇率维护在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人民币为间接汇率。中国采用直接标价法,即美元/人民币报价。
SAP 中对于金额和汇率字段的处理(一般是会计相关的:会计发票、销售发票、采购发票等)有点特殊,并不是说你在前台看到的数据是多少就在系统表中写多少。
金额:有些货币的金额因为有转换因子的存在,存入表之前 SAP 会先将金额除以转换因子再存入,这些金额在取出来的时候需要进行相应的转换。
BAPI_CURRENCY_CONV_TO_INTERNAL:转换成数据库中内部存储金额
BAPI_CURRENCY_CONV_TO_EXTERNAL:转换成外部实际金额
汇率:而有些汇率是会乘以一定的系数(一般也是100),所以我们在通过汇率计算的时候需要除以一个数。系统提供了函数来读取金额和汇率的转换值。汇率分为:直接汇率(1外币=XX本位币)、间接汇率(XX外币=1本位币) 。
汇率存放在表 TCURR 中,另外 TCUR* 有关于汇率的其他数据
维护汇率的事物码:OB07、OB08
汇率转换的函数都在 LSCUNUXX 程序中
处理场景
处理金额的时候需要乘以转换值:这个值可以通过CURRENCY_CONVERTING_FACTOR函数获得
处理汇率的时候需要除以转换值:这个值可以通过READ_EXCHANGE_RATE / BAPI_EXCHANGERATE_GETDETAIL获得
REPORT ZTEST_CURRENCY_CONV.
PARAMETER: P_FC TYPE TCURC-WAERS DEFAULT 'JPY',P_TC TYPE TCURC-WAERS DEFAULT 'CNY',P_DATE TYPE SY-DATUM DEFAULT SY-DATUM,P_CURR TYPE BAPICURR-BAPICURR,P_KURST TYPE TCURR-KURST DEFAULT 'M'.
DATA: G_AMOUNT TYPE BSEG-WRBTR,GV_INTER LIKE BSEG-WRBTR,GV_FROM TYPE CHAR20,GV_TO TYPE CHAR20.
"实际金额转换"
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'EXPORTINGcurrency = P_FCamount_external = P_CURRmax_number_of_digits = 13IMPORTINGamount_internal = GV_INTER.
"外币金额转换成本地金额"
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'EXPORTINGdate = P_DATEforeign_amount = GV_INTERforeign_currency = P_FClocal_currency = P_TCtype_of_rate = P_KURSTIMPORTINGlocal_amount = G_AMOUNTEXCEPTIONSno_rate_found = 1OTHERS = 2.
WRITE: / P_FC,'==》',P_TC.
WRITE: / P_CURR,'==》',G_AMOUNT.