—>日币在SAP存储时会缩小100倍存储到表(PRCD_ELEMENTS表除外),SE16N或SE12查看表数据时正常显示日币金额,你所看到的是正常的,但你以为的不一定是你以为的,当ABAPer用SQL语句查询到内表时会发现金额会缩小了100倍。
—>那么有的人会在报表显示时有意放大100倍,比如:
if gs_out-waers = ‘JPY’.
gs_out-netwr = gs_out-netwr * 100.
endif.
—>这种简单粗暴的写死JPY,也不是不可以,如果企业业务单一,不涉及到其它货币,这种写死货币的反而性能好。如果企业业务复杂还有其它货币,比如越南币VND同样需要放大100倍,此时就不能写死,需要根据货币找到货币的因子来决定是否需要放大。使用Function来获取货币因子:
CALL FUNCTION ‘CURRENCY_CONVERTING_FACTOR’
EXPORTING
currency = p_waers
IMPORTING
factor = e_factor
EXCEPTIONS
too_many_decimals = 1
OTHERS = 2.
gs_out-netwr = gs_out-netwr * e_factor.
—>但是有一种方法,不需要直接将金额放大100倍,只需要在ALV显示的字段列表中对金额字段进行货币参考,则ALV会自动正常显示金额。比如:
data gs_fieldcat type lvc_s_fcat.
gs_fieldcat-fieldname = ‘NETWR’. "金额字段
gs_fieldcat-cfieldname = ‘WAERS’. "参考货币,WAERS必须在输出内表中存在,且有值,也就是金额对应的货币.
—>这种字段参考货币的方式在最终显示结果上不仅能正常将日币金额放大100倍,而且如果货币不带小数位时(越南币不带小数位),也能自动去掉小数位,注意,注意,注意这种方式在内表中声明的金额,价格字段的小数位必须是两位。 SE12或SE16N查看表时日币金额正常显示就是这个原因。
—>但是,但是,如果是要把数据提供给外部比如BI,则必须还是要老老实实的将日币金额放大100倍。