SAP 金额在表中的存储及货币转换因子详解编程语言

场景:一个接口出问题了,SAP通过RFC将SO数据传输到Java系统,错误的将100日元传为1.00日元。

其实查看SAP透明表发现,表中存储的的确是1.00,是前台真实数据的1/100,开发接口时没注意到这种情况,也就导致了接口发生错误。

这在SAP系统中是常见的,SAP各种币种的金额都有默认的小数位数,像人民币CNY,美元等都是2位小数,日元和韩元是0位,及没有小数位。各种币种的金额在透明表中存储都是同一个字段,在存储到表中是都会做一个转换,就有了货币转换因子的概念,如上述日元,转换因子为100.

有以下几种转换方式:

1、使用function module CURRENCY_CONVERTING_FACTOR 获取某个币种的货币转换因子,然后将透明表中的金额乘以货币转换因子就可以了。

2、使用function module FWOS_CURRENCY_DECIMALS_READ 获取某个币种的小数位数N,货币转换因子等于10的(2 – N)次方。

3、直接进行转换的function module CURRENCY_AMOUNT_SAP_TO_DISPLAY,另外还有反向转换的CURRENCY_AMOUNT_DISPLAY_TO_SAP可以使用。

4、使用write to语句指定币种,WRITE p_amt1 currency ‘JPY’ to p_amt2.

还有两个问题,

Q1、为什么在SAP系统内开发的报表或功能程序没有显示错误呢?

A: 在ALV或者screen上人为指定了币种,这样SAP系统会根据此币种的货币转换因子自动转换后显示。

Q2:使用货币转换因子,乘法还好,除法的话会出现小数位四舍五入的,导致的数据误差怎么办?

A:没法办。SAP标准程序输入金额大多不会有此问题,他根据币种限制了小数位数的输入;但是自定义开发的程序多半没有考虑,像一些报表需要复杂的金额运算,小数位误差在所难免。

在SAP条件记录中,百分比的存储也有此种情况,需要注意。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/18328.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论