SAP系统中人民币(CNY)美元(USD)是带小数点的,而越南盾(VND),韩元(KRW),日元(JPY)的金额是不带小数点的。如果不进行特别处理的话,在ALV、SCREEN等界面显示金额字段时,小数位的显示就存在扩大100倍与减小100倍的情况。
以VK11创建条件记录为例,如果货币单位为VND,当金额值输入100时,后面没有小数位。
保存成功后查看系统表发现,金额字段实际存储的值是1.00,这说明系统对不同的币种是会做小数位位移的。
查看表TCURX,存在VND的数据,但是没有USD, CNY的数据。
这中间是有一个转换关系的,通过下面的代码可以实现存储值与显示值的转换
A. 显示存储的金額
DATA: SHIFT TYPE I.
CLEAR SHIFT.
SELECT SINGLE * FROM TCURX WHERE CURRKEY = (货币类型).
IF SY-SUBRC = 0.
SHIFT = 2 - TCURX-CURRDEC.
ENDIF.
(显示金額) = (存储金額) * 10 ** SHIFT.
B. 存储输入的金額(至CURR type的数据表的字段)
DATA: SHIFT TYPE I.
CLEAR SHIFT.
SELECT SINGLE * FRO