金额字段小数位的控制

您所在的位置:网站首页 日元没有小数位怎么算 金额字段小数位的控制

金额字段小数位的控制

2024-05-30 02:48| 来源: 网络整理| 查看: 265

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 * FROM TCURX WHERE CURRKEY = (货币类型). IF SY-SUBRC = 0. SHIFT = TCURX-CURRDEC – 2. ENDIF. (存储金額) = (显示金額) * 10 ** SHIFT.

这是系统标准界面的处理逻辑,自开发程序需要自己规避这个金额显示的坑。

问题1: 开发的程序往表里面写数据,或增强往表里面写数据时,比如输入100,但存到表里面后会变成100.00,而用ALV显示出来后有的会变成100.00,有的会变成10000)

解决办法:建ZTABLE时,如果有金额字段一定要加上货币单位字段,系统会按照货币单位自动计算存储值。

在这里插入图片描述

问题2:如果要将ZTABLE生成视图,同样会存在问题。比如,在SM30维护视图时,金额字段输入100, 如果货币是VND, 回车后金额会变成10000 ,扩大了100倍。

解决办法:建ZTABLE时,要将货币单位字段放在金额字段的前面(或者修改生成的屏幕程序,保证货币单位字段在金额字段前面)。这样生成视图时先检查货币单位,再检查金额的正确性。系统也会根据货币单位重新计算金额值的小数位,VND时自动去掉小数位。

在这里插入图片描述

问题3:前台显示不准确。对于越南盾,金额值维护时输入的是100,存表时是1.00,而ALV显示时会直接显示1.00,而不是我们要的100。所以有些项目的做法是CALL FUNCTION转成100.00,这样数据是对的,但是与系统标准做法有差别。我们要显示的结果是100 VND。 如SE11表: 在这里插入图片描述

ZTCODE程序需要正常显示:

在这里插入图片描述

解决办法:在程序的FILL_FIELDCAT时必须要参考货币单位

WA_FIELDCAT-CFIELDNAME = ‘WAERS’.

不参考货币单位的话,显示结果如下:

在这里插入图片描述

问题4:Dailog程序也同样存在问题3的显示问题。

解决办法:对于金额字段一定要在参考字段里放入货币单位变量。

在这里插入图片描述

问题5:对于dailog程序还存在另一个问题,当第一次输入VN02, 100, VND回车时, 100会变成10000。但是第二次改成100再回车,此时却会显示正确的结果100。原因与问题2类似,货币码在金额前面了,第一次回车系统没有获取货币码,所以金额显示不对。

在这里插入图片描述

回车后金额变为了10000

在这里插入图片描述

解决办法:PAI逻辑中,货币码在金额字段的前面

在这里插入图片描述

问题6:Smartforms ,script , write 报表中金额字段显示不正确。 解决办法:输出金额字段时参考货币码

SELECT SINGLE WAERS INTO WA_ZCNV_TEST-WAERS FROM T001 WHERE BUKRS = WA_ZCNV_TEST-VKORG. WRITE WA_ZCNV_TEST-NETWR TO LV_CHAR CURRENCY WA_ZCNV_TEST-WAERS.

再将LV_CHAR 放入Smartforms, script中输出 ​

问题7:某自开发程序的数值字段,例如类型为DEC5(2),输入100,自动转为了1.00,字段也不涉及货币码问题。

解决办法:查看程序属性,是否设置了固定浮点数。 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3