ALV 排序、汇总

目录

前言

实战

汇总

分类汇总

排序

分类汇总分隔方式(仅适用于LIST ALV)

完整代码:


前言

         在SAP ABAP ALV中,排序和汇总是两个关键特性,用于组织和分析数据显示。

        排序
        排序功能允许用户根据一个或多个列的值对ALV中的数据行进行升序或降序排列。这可以通过在调用显示函数REUSE_ALV_GRID_DISPLAY时传递适当的参数来实现。
        汇总
        汇总功能允许在ALV中对指定列的数据进行求和计算,并在报表底部或每组数据末尾显示结果。

实战

汇总

核心代码:
    gt_fieldcat-do_sum = 'X'.

展示效果:

分类汇总

核心代码:
    gt_sort-subtot    = 'X'.

展示效果:


注意:分类汇总出现的前提是gt_fieldcat-do_sum = 'X',另外还需对gt_sort-subtot进行设置;如果此参数(gt_fieldcat-do_sum)不设置的话,则汇总与分类汇总都没有。


排序

核心代码:
      gt_sort-spos      = '1'."排序的顺序,如果根据多个字段来排时,决定哪个先排
      gt_sort-fieldname = 'KEY1'.
      gt_sort-up        = 'X'."升序,如果不指定排序,默认为升序
      "gt_sort-down        = 'X'."降序
      gt_sort-subtot    = 'X'. "是否需要以此字段进行分类小计
    
注意:如果同一列有相同的数据,则排好序以后,在该列会自动将相同的数据合并为一行显示,不再出现多行重复的情况(但是若该ALV中有字段设置了“可编辑”,则不会合并),_LVC的FM如果要避免单元格合并,可设置gs_layout-no_merging = 'X' 。

参考文章:ALV IT_SORT-排序

分类汇总分隔方式(仅适用于LIST ALV)

核心代码:

         gt_sort-group = '*/UL' 只在REUSE_ALV_LIST_DISPLAY列表方式输出时起作用

未设置 gt_sort-group时:

 gt_sort-group = '*' 时,小分类之间用分页符分开,即小分类之间完全隔断:

gt_sort-group = 'UL' 时,小分类之间不隔断,而是使用下划线分隔:

完整代码:

TYPE-POOLS:slis.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: gt_sort     TYPE slis_t_sortinfo_alv WITH HEADER LINE.
DATA:BEGIN OF gt_data OCCURS 0,
  key1(1),
  key2(2),
  str(3),
  int1 TYPE i,
  int2 TYPE i,
  int3 TYPE i,
  END OF gt_data.

START-OF-SELECTION.
  PERFORM f_inital.
  DEFINE def_fdcat.
    clear gt_fieldcat.
    gt_fieldcat-fieldname = &1.
    gt_fieldcat-seltext_l = &2.
    gt_fieldcat-key = &3.
    "需要进行分类小计及汇总的字段:INT1、INT2
    if &1 = 'INT1' or &1 = 'INT2'.
      gt_fieldcat-do_sum = 'X'.
    endif.
    append gt_fieldcat.
  END-OF-DEFINITION.

  def_fdcat 'KEY1' 'KEY1' 'X'.
  def_fdcat 'KEY2' 'KEY2' 'X'.
  def_fdcat 'STR' 'STR' ''.
  def_fdcat 'INT1' 'INT1' ''.
  def_fdcat 'INT2' 'INT2' ''.
  def_fdcat 'INT3' 'INT3' ''.

  "* alv sort
  gt_sort-spos      = '1'."排序的顺序,如果根据多个字段来排时,决定哪个先排
  gt_sort-fieldname = 'KEY1'.
  gt_sort-up        = 'X'."升序,如果不指定排序,默认为升序
  gt_sort-subtot    = 'X'. "是否需要以此字段进行分类小计
  APPEND gt_sort.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat = gt_fieldcat[]
      it_sort     = gt_sort[]
    TABLES
      t_outtab    = gt_data.

FORM f_inital .
  gt_data-key1 = 'a'.
  gt_data-key2 = 'aa'.
  gt_data-str = 'aaa'.
  gt_data-int1 = 2.
  gt_data-int2 = 1.
  gt_data-int3 = 8.
  APPEND gt_data.

  gt_data-key1 = 'a'.
  gt_data-key2 = 'aa'.
  gt_data-str = 'aab'.
  gt_data-int1 = 3.
  gt_data-int2 = 2.
  gt_data-int3 = 7.
  APPEND gt_data.

  gt_data-key1 = 'c'.
  gt_data-key2 = 'aa'.
  gt_data-str = 'aab'.
  gt_data-int1 = 4.
  gt_data-int2 = 2.
  gt_data-int3 = 6.
  APPEND gt_data.

  gt_data-key1 = 'a'.
  gt_data-key2 = 'ab'.
  gt_data-str = 'aba'.
  gt_data-int1 = 6.
  gt_data-int2 = 1.
  gt_data-int3 = 2.
  APPEND gt_data.

  gt_data-key1 = 'a'.
  gt_data-key2 = 'ab'.
  gt_data-str = 'abb'.
  gt_data-int1 = 3.
  gt_data-int2 = 4.
  gt_data-int3 = 2.
  APPEND gt_data.

  gt_data-key1 = 'e'.
  gt_data-key2 = 'ca'.
  gt_data-str = 'eca'.
  gt_data-int1 = 2.
  gt_data-int2 = 2.
  gt_data-int3 = 4.
  APPEND gt_data.

  gt_data-key1 = 'b'.
  gt_data-key2 = 'ba'.
  gt_data-str = 'bba'.
  gt_data-int1 = 8.
  gt_data-int2 = 5.
  gt_data-int2 = 2.
  APPEND gt_data.

  gt_data-key1 = 'b'.
  gt_data-key2 = 'bb'.
  gt_data-str = 'bbb'.
  gt_data-int1 = 1.
  gt_data-int2 = 2.
  gt_data-int3 = 4.
  APPEND gt_data.

  gt_data-key1 = 'c'.
  gt_data-key2 = 'ca'.
  gt_data-str = 'cca'.
  gt_data-int1 = 5.
  gt_data-int2 = 1.
  gt_data-int2 = 3.
  APPEND gt_data.

  gt_data-key1 = 'c'.
  gt_data-key2 = 'cc'.
  gt_data-str = 'ccc'.
  gt_data-int1 = 2.
  gt_data-int2 = 1.
  gt_data-int3 = 5.
  APPEND gt_data.

  gt_data-key1 = 'd'.
  gt_data-key2 = 'ca'.
  gt_data-str = 'dca'.
  gt_data-int1 = 4.
  gt_data-int2 = 6.
  gt_data-int3 = 2.
  APPEND gt_data.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_亮亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值