FavoriteLoading
0

曰元、韩元、台币等特殊货币小数位数转换[CURRENCY_CONVERTING_FACTOR]

在SAP系统内,不同的货币的小数的位数有可能不一样的,比如:日币和人民币的就不同。

代码:

运行结果:

2017-03-13_13-51-11

同样输入了1.8,但是输出的结果却不同,日币扩大了100倍,变成了180日元,而RMB还保持原样,1.8元,想想很合理,日元最小单位是元,而rmb最小是分。

换句话,系统自动给日元加了个转换因子100,rmb的转换因子是1.

这个转换因子学名叫货币转换因子(Currency Converting Factor),是在abap开发中的一个重要的概念。计算公式如下:

货币转换因子 = 100 × 货币的最小单位(小数点后位数,例如,小数点3位,最小单位就是0.001).

当没有小数点时,货币转换因子就是100 × 1 = 100.

货币的小数位数是保存在表TCURX中的,正常的货币都是小数点后2位的,这个是默认的,不保存在这个表中,也就是凡是在表tcurx中找不到的货币的转换因子都是100 × 0.01 = 1,比如rmb。

2017-03-12_13-08-48

在上图中能看到日元的是没有小数点,是0,所以日元的转换因子 = 100 × 1 = 100.

SAP提供了一个函数CURRENCY_CONVERTING_FACTOR能直接得到货币的转换因子,

2017-03-13_14-16-24

上面这个货币的转换过程是SAP自动实现的,比如180日元在数据库中会自动保存成1.8,但是有个前提就是一定要指定币种。

数据库中显示:

011347144563406

而在屏幕上,读出来的就是自动转换后的正确金额。

011347163474249

我们在ABAP编程时要注意指定币种:

1) write输出时,指定currency

2)  screen中指定参考单位

2017-03-13_14-33-15

3) ALV 中也要在catelog中指定参考货币单位,

SLIS_T_FIELDCAT_ALV-cfieldname

SLIS_T_FIELDCAT_ALV-slis_tabname

2017-03-13_14-39-09

OO ALV中

2017-03-13_14-53-45

另外:货币的一些相关表:

TCURT:货币描述文本

2017-03-12_13-07-47

TCURC:货币代码(Currency Codes)

2017-03-13_15-00-20

CURRENCY_AMOUNT_BAPI_TO_SAP 和CURRENCY_AMOUNT_SAP_TO_BAPI可以进行货币倍数之间的互相转换

 

以上。