ABAP ALV例程用法
Posted 想发财的小夏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAP ALV例程用法相关的知识,希望对你有一定的参考价值。
最近遇到一个需求,业务自定义一个字段,为4位小数,没有对应的参考单位,导致ALV展示的时候,无法参考对应单位,如果数量为0,在ALV上就会显示,无法达到下图不显示的效果。
用户需求如下:小数为四位小数,超过的部分四舍五入,并且后置的0隐藏不显示,如果为0,也不显示。
我们通过寻找ALV->Fieldcat参数发现,并没有合适的参数可以实现这个效果。
在网上查找相关资料,并结合各路大神的经验,总结了两种靠谱的解决方法:
1.在内表内添加字符型(CHAR)的字段,对数据进行处理;
2.可以通过在ALV里添加例程来实现这一效果。
下面主要介绍第二种方法:
我们需要定义一对函数,命名规则CONVERSION_EXIT_ZXXXX_OUTPUT和CONVERSION_EXIT_ZXXXX_INPUT,如下:
Output:
FUNCTION conversion_exit_z0001_output.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"----------------------------------------------------------------------
DATA: lv_num(16) TYPE p DECIMALS 4,
lv_char TYPE char50.
CHECK input IS NOT INITIAL.
TRY.
lv_num = input.
CATCH cx_root.
CLEAR output.
RETURN.
ENDTRY.
lv_char = lv_num.
CONDENSE lv_char NO-GAPS.
FIND '.' IN lv_char.
IF sy-subrc = 0.
SHIFT lv_char RIGHT DELETING TRAILING space . "去掉没用的小数位的0
SHIFT lv_char RIGHT DELETING TRAILING '0' . "去掉没用的小数位的0
SHIFT lv_char RIGHT DELETING TRAILING '.' . "去掉没用的小数位的0
ENDIF.
CONDENSE lv_char NO-GAPS.
IF lv_char NE '0'.
output = lv_char.
ENDIF.
ENDFUNCTION.
Input:
FUNCTION conversion_exit_z0001_input.
*"--------------------------------------------------------------------
*"*"局部接口:
*" IMPORTING
*" REFERENCE(INPUT)
*" EXPORTING
*" REFERENCE(OUTPUT)
*"--------------------------------------------------------------------
DATA: lv_num(16) TYPE p DECIMALS 4,
lv_char TYPE char50.
CHECK input IS NOT INITIAL.
TRY.
lv_num = input.
CATCH cx_root.
CLEAR output.
RETURN.
ENDTRY.
output = lv_num.
ENDFUNCTION.
之后我们需要在ALV的Fieldcat参数里设置这个例程
最后ALV输出就可以达到想要的效果了。
注意:
一定需要做一对相反的转换历程output和input,不然ALV的排序和筛选功能会报错,同时,用了历程之后会对筛选产生一定影响,点击按钮会出现乱码,如下图,不过并不影响筛选功能的作用,暂时没有找到解决办法。
以上是关于ABAP ALV例程用法的主要内容,如果未能解决你的问题,请参考以下文章