针对不同币别要做金额栏位转换 计算规则: 金额 = 原始金额 * 转换率 以下转自博客:https://www.cnblogs.com/sanlly/p/3371568.html 【CURRENCY_CONVERTING_FACTOR】在SAP系统中,对于曰币、韩币、台币这
针对不同币别要做金额栏位转换
计算规则: 金额 = 原始金额 * 转换率
以下转自博客:https://www.cnblogs.com/sanlly/p/3371568.html
【CURRENCY_CONVERTING_FACTOR】在SAP系统中,对于曰币、韩币、台币这类特殊货币的处理是有特殊规则的。
首先,根据币别到DB表中读取 TCURX 中读取相应的小数位数 CURRDEC。
如果没有维护相应币别的信息 则默认 CURRDEC = 2。
如果 CURRDEC GT 5 就报错。
然后默认转换率是100。
在CURRDEC NE 0 的情况下
循环 CURRDEC 次,每次将转换比率 除以 10.
所以如果表 TCURX 中的 CURRDEC = 0 就默认转换比率 为100
当表 TCURX 中没有找到相应数据时 则默认 CURRDEC = 2.
转换比率也是 100/ 10 / 10 = 1.
其他的, 如果表TCURX 中的 CURRDEC = 4, 则转换比率应该为 100/ 10 /10 /10 / 10 = 0.01
我们在SE16中看到的货币金额基本上都经过了这个转换,如曰元,都是除以100后存入数据库的。
所以当我们从数据库中读取曰元金额时也应该作相应的转换,乘以100 。
简单的使用Function CURRENCY_CONVERTING_FACTOR。输入币别,就可以得到相应的转换比率了。
函数中所涉及的常用选项:
EXPORTING:
CURRENCY: 将被处理的货币种别编号
IMPORTING:
FACTOR: 转换后得到的货币比率
例1.
FORM BRF_AP USING F_BETRAG " 金额 F_CURRENCY. " 货币代码 DATA: S_FACTOR TYPE P DECIMALS 3. CALL FUNCTION ‘CURRENCY_CONVERTING_FACTOR‘ EXPORTING CURRENCY = F_CURRENCY IMPORTING FACTOR = S_FACTOR EXCEPTIONS TOO_MANY_DECIMALS = 1 OTHERS = 2. IF S_FACTOR NE 0. F_BETRAG = F_BETRAG / S_FACTOR. ENDIF. ENDFORM. "BRF_AP
例2
DATA: G_PER_PRICE TYPE P, G_KPER_PRICE TYPE P, G_PRICE TYPE P, PG_FACTOR TYPE P DECIMALS 3. FORM CHANGEVALUEBYFACTOR USING P_WAERS CHANGING PG_FACTOR. CALL FUNCTION ‘CURRENCY_CONVERTING_FACTOR‘ EXPORTING CURRENCY = P_WAERS "輸入的幣別 IMPORTING FACTOR = PG_FACTOR "輸出的值 EXCEPTIONS TOO_MANY_DECIMALS = 1 OTHERS = 2. IF SY-SUBRC <> 0. PG_FACTOR = 1. ENDIF. ENDFORM. "CHANGEVALUEBYFACTOR