SAP 金额在表中的存储及货币转换因子
2014-03-11 19:03
232 查看
场景:一个接口出问题了,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条件记录中,百分比的存储也有此种情况,需要注意。
其实查看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条件记录中,百分比的存储也有此种情况,需要注意。
相关文章推荐
- Java transient关键字使用小记
- Visual C++ ADO数据库编程入门(上)
- 黑马程序员___交通灯管理系统
- 计算几何——凸包
- linux磁盘管理
- Android——内存管理基础
- java自定义注解
- win7与android设备通过蓝牙串口的连接方法
- glew库
- 国产第一虚拟币元宝币:元宝币基金会
- struts2中result的使用
- Iptables & tc在公有云的应用(示例)
- [ACM] hdu 4706 Children's Day
- 用栈来实现数制转换
- hdu 2509
- [ACM] hdu 4706 Children's Day
- 数据库持久连接理解
- 【Kettle从零开始】第十二弹之Kettle在Linux下搭建
- 链接libtorrent库时出现的问题
- java实现的可以无限级别添加子节点的菜单树