ABAP-ALV/中介DB显示金额与实际金额差100/1000倍,怎么办?CALL FUNCTION CURRENCY_CONVERTING_FACTOR

不管是ALV还是抛中介DB,我们都可以调用Function来处理,看如下这个家伙

CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
        EXPORTING
          currency          = gt_prcd_elements-waerk
        IMPORTING
          factor            = lv_factor
        EXCEPTIONS
          too_many_decimals = 1
          OTHERS            = 2.

看函数的命名:货币_转换_因素,也大概知道是干啥的.
输入部分EXPORTING变量是currency,币别。把我们自己捞出来的币别给他就好,我这里取得是prcd_elements-waerk
输出部分IMPORTING变量是factor ,宣告一个变量lv_factor来存放结果
lv_factor TYPE isoc_factor.
我们可以在T-CODE:SE37来瞅瞅他的功能:
可以把我们取到的数值 * lv_factor,即可。
CNY
TWD
如果仅用于ALV报表输入显示, 金额和数量类型的字段小数点的位置会发生错误,数量是quan类型,金额是curr类型,如下:在这里插入图片描述
错误情况如下:qty输入66,结果显示0.066小数点提前3位,差1000倍,price输入7,结果显示0.07,小数点提前两位,差100倍。
在这里插入图片描述
方法1.对于货币字段,catalog中再添加一个“指定数据类型”的属性datatype:
wa_fieldcat-datatype = ‘CURR’ . " 指定数据类型
这样在修改数据并保存时,才能将数据保持原样,否则输入的数据会自动将小数点提前2位;
方法1.对于数量字段,也要添加一个“指定数据类型”的属性,才能保持数据的正确性:
wa_fieldcat-datatype = ‘QUAN’ . " 指定数据类型
wa_fieldcat-inttype = ‘C’ . "这个是指定字段的类型为C

2020/6/5补充:
如果我们的数量和金额从 PRCD_ELEMENTS表取得,那就不需要上述所有的操作转换。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值