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

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读