ALV开发流程:
1. 将得到并整理好的数据以ALV的形式显示出来 4
1.1. 在子FORM(这里如:F_FIELDS)指定需要显示的字段 4
1.2. 在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性 4
1.3. 在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示 51.4. 为ALV程序添加表头标题(这里以添加HTML表头标题为主) 5
1.4.1. 在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数 5
1.4.2. 在子FORM(F_TOP_OF_PAGE)里定义好需要的变量 5
1.4.3. 准备好所需数据,如登录用户的描述、制表日期等 6
1.4.4. 将表头数据输出 6
2. 函数“REUSE_ALV_GRID_DISPLAY_LVC”中输入参数的应用 7
2.1. 排序 7
2.1.1. 在显示ALV的子FORM里定义排序用到的变量 7
2.1.2. 设置好需要排序的字段 8
2.1.3. 在显示ALV的函数的输入参数里添加排序的属性 8
2.2. 隐藏不必要的标准按钮 8
2.2.1. 先在显示ALV的子FORM里定义隐藏按钮用到的变量 8
2.2.2. 得到需要隐藏的标准按钮的“FCODE” 8
2.3. 自定义“工具栏” 9
2.3.1. 在显示ALV的函数的输入参数里指定自定义按钮的子FORM 9
3. 热点链接、用户动作的捕捉、调用其他程序或标准事务程序 11
3.1. 在显示ALV的函数的输入参数里指定捕捉用户动作的子FORM 11
3.2. 在“字段和列名”的子FORM(F_FIELDS)里,对需要链接的列添加“热点”属性 11
3.3. 操作代码 11
3.4. 显示具体细节 12
3.5. 调用其他事务 14
3.6. 打开并选择文件: 14
4. 关于设置字段和列名的子FORM(F_FIELDS)的参数设置: 15
4.1. 单列优化宽度 15
4.2. 单列求和或者取消求和,添加属性 15
4.3. 对其方式 15
4.4. 作为图标输出 16
4.5. 固定列和关键列 16
4.6. 列的字符宽度 16
5. 单元格的F1、F4帮助: 17
5.1. F1帮助: 17
5.2. F4帮助: 17
6. 输入并保存、回调修改内表(输入时的小数位错位的问题、指定数据类型、小说位数) 17
7. 界面颜色的更改 18
7.1. 更改单元格(字体)的前景、背景颜色 19
7.2. 更改行的颜色和列的颜色: 19
7.3. 利用设置字段和列名子的FORM(F_FIELDS)里来设置列的颜色 20
8. ALV自带的最左端复选框按钮和自定义复选框按钮 20
8.1. ALV自带的复选框按钮: 20
8.2. 自定义复选框按钮 20
9. 按照上传的模板格式导出为本地文件 21
9.1. 定义导出为EXCEL用到的数据变量 21
9.2. 上传模板 21
9.3. 代码 22
10. 为ALV标题添加图片 26
10.1. 上传图片 26
10.2. 在子FORM(F_TOP_OF_PAGE2)里的代码
ALV:ABAP LIST VIEW,一种比较美观的报表显示工具
REUSE_ALV_LIST_DISPLAY
Grid的是Excel单元格的格式,而list不是
REUSE_ALV_GRID_DISPLAY 可以控制某一行 某一列,甚至某一格(CELL)的读写
ALV用到的函数,目前我们有2个:REUSE_ALV_GRID_DISPLAY、REUSE_ALV_GRID_DISPLAY_LVC;两个函数都可以将数据用ALV的形式显示出来,只是在一些小的地方有些不同。
其中这两个函数都用到的全局变量为:1个类型池SLIS和一个指定列数的变量
DATA: v_pos TYPE i. " 指定第几列 pos表示列
第1个函数用到的全局变量如下:都是slis类型池中的类型,结尾都是alv(表示他们用于alv)
DATA: wa_fieldcat TYPE slis_fieldcat_alv , " 相当于工作区
i_fieldcat TYPE slis_t_fieldcat_alv , " 存放列名的内表
i_layout TYPE slis_layout_alv . " 负责整个ALV的全局属性
第2个函数用到的全局变量:
DATA: wa_fieldcat TYPE lvc_s_fcat , " 相当于工作区
i_fieldcat_lvc TYPE lvc_t_fcat , " 存放列名的内表
i_layout_lvc TYPE lvc_s_layo . " 负责整个ALV的全局属性
下面以第2个函数(REUSE_ALV_GRID_DISPLAY_LVC)来介绍ALV的用法;
1. 将得到并整理好的数据以ALV的形式显示出来
1.1. 在子FORM(这里如:F_FIELDS)指定需要显示的字段 wa_fieldcat 工作区,可以赋值
v_pos = v_pos + 1 . 初始值是零
wa_fieldcat-col_pos = v_pos . " 指定列数
wa_fieldcat-fieldname = 'PSPID' . " 需要输出的内表的字段名
wa_fieldcat-scrtext_l = '项目定义 '. " 字段的描述-长字段标签 screen text long
wa_fieldcat-scrtext_m = '项目定义 '. " 字段描述-中字段标签
wa_fieldcat-scrtext_s = '项目定义 '. " 字段描述-短字段标签
wa_fieldcat-fix_column = 'X' . " 是否是固定列 column ['kɔləm]列
APPEND wa_fieldcat TO i_fieldcat_lvc.
CLEAR wa_fieldcat.
这样逐步的将需要显示的字段都添加到内表i_fieldcat中;
1.2. 在子FORM(这里如:F_BUILD_LAYOUT)里设置ALV的全局属性
i_layout_lvc-zebra = 'X' . " 使ALV界面呈现颜色交替
i_layout_lvc-sel_mode = 'A' . " 选择模式,“A”在最左端有选择按钮
i_layout_lvc-cwidth_opt = 'X' . " 自动优化列宽
i_layout_lvc-detailinit = 'X' . " 是否出现细节屏幕
i_layout_lvc-detailtitl = '详细内容' . " 细节屏幕标题
1.3. 在子FORM(这里如:F_DISPLAY)里将内表中的数据进行显示
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid " 当前程序
is_layout_lvc = i_layout_lvc " 属性内表
it_fieldcat_lvc = i_fieldcat_lvc[] " 列明内表
i_save = 'X' " 是否保存布局
TABLES
t_outtab = i_tab " 数据内表
EXCEPTIONS
program_error = 1
OTHERS = 2.
通过这一步后,一个基本的ALV程序就完成了;下面是对ALV程序的优化和扩展。
1.4. 为ALV程序添加表头标题(这里以添加HTML表头标题为主)
1.4.1. 在显示ALV的函数(REUSE_ALV_GRID_DISPLAY_LVC)里添加一个参数
i_callback_html_top_of_page = 'F_TOP_OF_PAGE'
其中“F_TOP_OF_PAGE”是书写ALV表头标题的子FORM,只是在这里使用,没有明显的“PERFORM”调用,如下:
FORM f_top_of_page USING p_cl_dd TYPE REF TO cl_dd_document.
1.4.2. 在子FORM(F_TOP_OF_PAGE)里定义好需要的变量
" 定义登录用户的描述
DATA: l_name TYPE string ,
name_first LIKE adrp-name_first ,
name_last LIKE adrp-name_last .
" 定义登录日期
DATA: l_date TYPE string .
" 定义缓冲区变量
DATA: m_p TYPE i ,
m_buffer TYPE string .
1.4.3. 准备好所需数据,如登录用户的描述、制表日期等
" 得到登录用户的描述
SELECT SINGLE adrp~name_first
adrp~name_last
INTO (name_first,name_last)
FROM adrp
INNER JOIN usr21 ON adrp~persnumber = usr21~persnumber
WHERE usr21~bname = sy-uname .
IF sy-subrc = 0 .
CONCATENATE name_last name_first INTO l_name .
ELSE .
l_name = sy-uname .
ENDIF.
CLEAR name_first .
CLEAR name_last .
" 拼接制表日期
CONCATENATE sy-datum+0(4) '.'
sy-datum+4(2) '.'
sy-datum+6(2) '.'
INTO l_date .
1.4.4. 将表头数据输出
" 开始输出表头标题
m_buffer = '<HTML><CENTER><H1>ALV测试</H1></CENTER></HTML>' .
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
" 输出制表人和制表日期
CONCATENATE '<P ALIGN = CENTER >出表人:' l_name'出表日期:' l_date INTO m_buffer .
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
现将需要显示的表头数据放到变量“M_BUFFER”中,然后调用方法“P_CL_DD->HEML_INSERT”将数据插入到HTML页面中显示,至此显示表头数据完成;
2. 函数“REUSE_ALV_GRID_DISPLAY_LVC”中输入参数的应用
2.1. 排序
排序之前,如果同一列有相同的数据,则排好序以后,在该列会自