目录
前言
在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.