不管是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,即可。
如果仅用于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表取得,那就不需要上述所有的操作转换。