https://www.cnblogs.com/VerySky/articles/2192401.html
一般一个ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。
ALV的报表显示方式有两种
一种调用"REUSE_ALV_GRID_DISPLAY" 函数
一种调用"REUSE_ALV_LIST_DISPLAY"函数
这里我们以alv_grid 来举例
一般我们约定俗称在报表中用以下格式开发
REPORT ZXXXXX.
INCLUDE ZXXXX_TOP
INCLUDE ZXXXX_FORM
INCLUDE ZXXXX_......
一般在ZXXXXX_TOP中,我们用来存储变量
而在ZXXXX_FORM 中,我们一般来存储各个 form
ZXXXX_FORM 还可以分开命名为ZXXXX_F01 ZXXXX_F02 ZXXXX_F03等
ABAP 开发属于事件驱动开发, 所以SAP程序就需要由一个个事件去触发才能够执行的程序,当我们使用SE38去创建一个可执行程序(以REPORT 开头)时,我们可以直接调试,然后会发现,程序就是按事件块的顺序去执行的。
下面介绍几个事件块
INITIALIZATION. (初始化。在所有以下事件块运行之前运行的,只运行一次的事件块)
AT SELECTION-SCREEN OUTPUT. (PBO事件块,即屏幕输出前事件块)
AT SELECTION-SCREEN ON VALUE-REQUEST FOR 选择屏幕字段名称(自定义搜索帮助事件块)
AT SELECTION-SCREEN (PAI 事件块,即屏幕操作后事件块)
START-OF-SELECTION. (程序运行事件块)
而在 START-OF-SELECTION 中,我们一般都会写以下几个PERFORM,
PERFORM frm_get_data.(取数逻辑)
PERFORM frm_alv_layout_build. (创建ALV显示格式)
PERFORM frm_alv_set_columns. (调用ALV函数)
二、开发ALV的基本流程:
第一步: 定义ALV所要用到的类型池: TYPE-POOLS: SLIS;
第二步: 定义ALV所要显示的数据对应的内表数据类型及内表数据对象;
第三步: 定义一些显示ALV时索要用到的变量,例如:
Data: w_repid like sy-repid, “ABAP程序,我们一般取当前程序
w_callback_ucomm type slis_formname, "字符型,功能
w_print type slis_print_alv, "类型组
w_layout type slis_layout_alv, "类型组
w_html_top_of_page type slis_formname, "字符型
w_fieldcat_alv like line of i_fieldcat_alv, “从上面的数据结构类型引用过来的
w_excluding like line of i_excluding, “同上
w_events like line of i_events, “同上
w_event_exit like line of i_event_exit, “同上
w_list_comments like line of i_list_comments.“同上
第四步: 定义选择屏幕
第五步: 声明各个选择屏幕事件块,例如:
定义initialization 部分,在这个部分往往需要指定w_repid = sy_repid.
定义 start-of-selection 部分, 在这通常会调用各种子程序,以下以标准ALV显示为例:
1.调用一个子程序(通常命名为frm_get_dataXXX)用于获取 ALV所要显示的数据,
FORM frm_get_data.
… … “其它处理逻辑
SELECT lifnr "供应商账号
ktokk "账号组
name1 "名称1
name2 "名称2
INTO CORRESPONDING FIELDS OF TABLE it_main
FROM zmmjyht003
WHERE (l_where)
.
… … “其它处理逻辑
ENDFORM.
2) 调用一个子程序 (通常命名为frm_alv_layout_build),用于设置ALV所要显示的样式;
例如:
FORM