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例程用法的主要内容,如果未能解决你的问题,请参考以下文章

abap ALV字段怎么设置搜索帮助?

怎么用ABAP 代码判断,,某程序的某个屏幕上,输出了 ALV 且 计算 输出ALV 的内表有 多少个字段?

ABAP ALV 怎么用?

abap开发中,在屏幕上怎样显示alv

ABAP ALV控件的使用

abap alv 不同字段 分类汇总