问题和原因
- 事务代码:OY04 (可设置设置币别小数位;CNY/USD等币别因系统默认decimal 2 所以无配置条目)
- JPY/VND/VUV/XAF/XOF/XPF等货币的小数位为0
- CNY/USD等货币的小数位为2
- SAP存储金额的字段属性是固定的(例如:DMBTR CURR 23 2),所以系统根据转换因子将原金额转换成含小位小数的金额后存储
- 100 JPY/VND/VUV/XAF/XOF/XPF等货币会转换为1.00存储
- 100 CNY/USD等货币以 100.00存储
- SE16N前台显示的VND金额已经乘以货币倍率 100;但是未转换的值是带2位小数的金额
2.实际应用的转换和处理
-
1.在SQL取数时,将金额 * 100
-
参考:SAP CX_SY_DYNAMIC_OSQL_SEMANTICS 错误
语法: cast( ( B~DMBTR * 100 ) AS curr( 23, 2 ) )
-
-
2.获取转换因子或者通过FM在loop中处理金额
- 获取当前Client默认币别和输入币别的转换因子 CNY:VND = 1.00:100.00
- CURRENCY_CONVERTING_FACTOR
- CURRENCY_CONVERTING_FACTOR
- 金额从内部转为外部
- BAPI_CURRENCY_CONV_TO_EXTERNAL
- BAPI_CURRENCY_CONV_TO_EXTERN_9
- 金额从外部转为内部(MAX_NUMBER_OF_DIGITS 转换后金额最大长度)
- BAPI_CURRENCY_CONV_TO_INTERNAL
- BAPI_CURRENCY_CONV_TO_INTERN_9
- 获取当前Client默认币别和输入币别的转换因子 CNY:VND = 1.00:100.00