REUSEALVGRIDDISPLAYLVC超详细讲解.docx
- 文档编号:6142676
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:24
- 大小:177.24KB
REUSEALVGRIDDISPLAYLVC超详细讲解.docx
《REUSEALVGRIDDISPLAYLVC超详细讲解.docx》由会员分享,可在线阅读,更多相关《REUSEALVGRIDDISPLAYLVC超详细讲解.docx(24页珍藏版)》请在冰豆网上搜索。
REUSEALVGRIDDISPLAYLVC超详细讲解
REUSE-ALV-GRID-DISPLAY-LVC超详细讲解
ALV开发流程:
" 数据内表
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 = '
ALV测试
CALL METHOD p_cl_dd->html_insert
EXPORTING
contents = m_buffer
CHANGING
position = m_p.
" 输出制表人和制表日期
CONCATENATE '
出表人:
' 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.排序
排序之前,如果同一列有相同的数据,则排好序以后,在该列会自动将相同的数据合并为一行显示,不再出现多行重复的情况(但是若该ALV中有字段设置了“可编辑”,合并这一现象会失效),步骤如下:
2.1.1.在显示ALV的子FORM里定义排序用到的变量
" 定义排序变量
DATA:
wa_sort_lvc TYPE lvc_s_sort ,struture
it_sort_lvc TYPE lvc_t_sort .table
2.1.2.设置好需要排序的字段
" 设置排序参数
wa_sort_lvc-spos = 1 . " 排序顺序
wa_sort_lvc-fieldname = 'CITYFROM' . " 排序字段
wa_sort_lvc-up = 'X' . " 升序
APPEND wa_sort_lvc TO it_sort_lvc .
CLEAR wa_sort_lvc .
wa_sort_lvc-spos = 2 . " 排序顺序
wa_sort_lvc-fieldname = 'CITYTO' . " 排序字段
wa_sort_lvc-up = 'X' . " 升序
APPEND wa_sort_lvc TO it_sort_lvc .
CLEAR wa_sort_lvc .
2.1.3.在显示ALV的函数的输入参数里添加排序的属性
it_sort_lvc = it_sort_lvc
2.2.隐藏不必要的标准按钮
2.2.1.先在显示ALV的子FORM里定义隐藏按钮用到的变量
" 定义隐藏标准按钮的变量
DATA:
wa_excluding TYPE slis_t_extab ,
it_excluding TYPE slis_extab .
2.2.2.得到需要隐藏的标准按钮的“FCODE”
首先用事务码“SE24”进入SAP的“类别制作器”,在“Objecttype”后面输入ALV的类“CL_GUI_ALV_GRID”,点击“Display”进入显示界面,点击“Attributes”选项卡,找到自己需要的“属性”和“初始值”,这个初始值就是我们要找的标准按钮的“FCODE”(注意:
每一个标准按钮代表的FCODE是靠经验积累而掌握的);
1>、设将需要隐藏的标准按钮的“FCODE”添加到内表IT_EXCLUDING中,代码如下:
" 设置要隐藏的按钮的“FCODE”
wa_excluding-fcode = '&ABC' .
APPEND wa_excluding TO it_excluding .
2>、在显示ALV的函数的输入参数里添加隐藏按钮的属性参数:
it_excluding = it_excluding
1、ALV标题,定义标题变量并赋值,然后在显示ALV的函数的输入参数里添加“小标题”的参数,代码如下:
" 小标题
DATA:
i_grid_title TYPE lvc_title .
i_grid_title = '小标题'.
**********************************
i_grid_title = i_grid_title
2.3.自定义“工具栏”
2.3.1.在显示ALV的函数的输入参数里指定自定义按钮的子FORM
i_callback_pf_status_set = 'F_SET_STATUS'
当然该子FORM和产生表头的子FORM一样,也不显式的调用,代码如下:
FORM f_set_status USING p_extab TYPE slis_t_extab .
SET PF-STATUS 'Z_ALV_STATUS' .
ENDFORM. " f_set_status
双击其中的“Z_ALV_STATUS”,进入创建工具栏的界面,输入名字后进入最终的界面在界面右侧,
点击“应用工具条”后面的展开符号,在“项目”后面的白色方框内输入“自定义按钮”的代码后回车,选择静态文本回车,在“函数文本”后面输入想要显示的按钮的名称,在“图标名称”后面选择相应的图标(可选),回车在这一界面选择一个“快捷键”(必填)后回车,这样一个自定义按钮就做好了,也可以修改,记住刚刚创建的按钮的代码,在下面的捕捉用户的动作的自FORM(F_USER_COMMAND)会根据刚才的代码来进行相应的操作;
1、点开“功能键”后面的展开符号,进入功能键的设置,下图是各个动作对应的代码:
2、没有自定义按钮时候,函数里的“i_callback_pf_status_set = 'F_SET_STATUS'”这个参数可以不要,这时会显示ALV标准的按钮,当然这些按钮可以部分隐藏(见三、2);
3、当我们使用自定义按钮后,ALV自带的标准按钮,就会失效,这时我们需要将一些用户要求我们必须显示的按钮一一地在“应用工具条”后面补上,如下图:
其中“分隔符”的插入方法为:
在需要插入分隔符的方框内选择菜单“Edit”→“Insert”→“Separatorline”即可插入分隔符;
下面是上图中的标准工具的名称、代码、图标名称、快捷键
名称
代码
图标名称
快捷键
刷新
REFRESH
ICON_REFRESH
F8(可随便更改)
导出为EXCEL表格
EXCEL
无
Shift-F8(可随便更改)
ABC分析
&ABC
ICON_ABC
Ctrl-F1
按升序排列
&OUP
ICON_SORT_UP
Ctrl-F4
设置过滤器
&ILT
ICON_FILTER
Ctrl-F5
总计
&UMC
ICON_SUM
Ctrl-F6
邮件查收件
%SL
ICON_MAIL
Ctrl-F7
更改布局…
&OL0
ICON_ALV_VARIANTS
Ctrl-F8
选择布局…
&OAD
ICON_ALV_VARIANT_CHOOSE
Ctrl-F9
保存布局…
&AVE
ICON_ALV_VARIANT_SAVE
Ctrl-F10
信息
&INFO
ICON_INFORMATION
Ctrl-F12
明细
&ETA
ICON_SELECT_DETAIL
Ctrl-Shift-F3
按降序排列
&ODN
ICON_SORT_DOWN
Ctrl-Shift-F4
删除过滤器
&ILD
ICON_FILTER_UNDO
Ctrl-Shift-F5
小计…
&SUM
ICON_INTERMEDIATE_SUM
Ctrl-Shift-F6
Microsof
&VEXCEL
ICON_XLS
Ctrl-Shift-F7
字处理
&AQW
ICON_WORD_PROCESSING
Ctrl-Shift-F8
本地文件
%PC
ICON_EXPORT
Ctrl-Shift-F9
打印预览
&RNT_PREV
ICON_LAYOUT_CONTROL
Ctrl-Shift-F10
图形
&GRAPH
ICON_GRAPHICS
Ctrl-Shift-F11
上表中红色的属于自定义按钮,自定义按钮可以使用标准的图标名称,也可以不适用图标;
3.热点链接、用户动作的捕捉、调用其他程序或标准事务程序
3.1.在显示ALV的函数的输入参数里指定捕捉用户动作的子FORM
FORM f_user_command USING p_ucomm TYPE sy-ucomm
p_rs_selfield TYPE slis_selfield .
当然该子FORM和产生表头的子FORM一样,也不显式的调用;
3.2.在“字段和列名”的子FORM(F_FIELDS)里,对需要链接的列添加“热点”属性
v_pos = v_pos + 1 .
wa_fieldcat-col_pos = v_pos .
wa_fieldcat-fieldname = 'CITYFROM' .
wa_fieldcat-scrtext_l = '起飞城市' .
wa_fieldcat-fix_column = 'X' .
wa_fieldcat-hotspot = 'X' . " 热点,链接用
APPEND wa_fieldcat TO i_fieldcat .
CLEAR wa_fieldcat .
这样在显式界面上“起飞城市”所代表的字段“CITYFROM”的下面就会出现一条下划线,同时当鼠标移动到该列时,就会变成“等待”的手势,当用户单击每一条时,就会触动子FORM(F_USER_COMMAND)中的动作,进而引起某些操作;
3.3.操作代码
对于热点链接,所对应的动作码为“&IC1”,在子FORM(F_USER_COMMAND)中捕捉用户的动作,并进行相应的操作,代码如下:
FORM f_user_command USING p_ucomm TYPE sy-ucomm
p_rs_selfield TYPE slis_selfield .
CASE p_ucomm.
WHEN '&IC1' . " 判断用户的动作
" 读取用户点击的当前行的一行内容
READ TABLE i_tab INTO wa_tab INDEX p_rs_selfield-tabindex .
IF p_rs_selfield-fieldname EQ 'CITYFROM'. " 判断用户点击的是哪一列
IF NOT wa_tab-cityfrom IS INITIAL .
PERFORM f_show_detail USING p_rs_selfield . " 显示具体细节
ENDIF.
ELSEIF p_rs_selfield-fieldname EQ 'TCODE' .
IF NOT wa_tab-tcode IS INITIAL .
PERFORM f_call_tran USING p_rs_selfield . " 调用其他事务
ENDIF .
ELSEIF p_rs_selfield-fieldname EQ 'ICON_FOLDER' .
PERFORM f_open_folder USING p_rs_selfield . " 打开文件
ENDIF.
CLEAR wa_tab .
WHEN '&SAVE_DATA' .
PERFORM f_save_data . " 保存数据
WHEN 'PRINT' .
PERFORM f_print_data. " 打印数据
WHEN 'EXCEL' .
PERFORM f_export . " 导出数据
ENDCASE.
p_rs_selfield-refresh = 'X' . " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
ENDFORM. " f_user_command
3.4.显示具体细节
1>、先定义一个存放具体内容的内表并整理好相关数据;
2>、调用一个指定大小的屏幕来显示具体的内容,代码如下:
CALL SCREEN 0100 STARTING AT 12 12 ENDING AT 137 24 .
3>、双击该屏幕号码“0100”创建该屏幕,在“属性”卡输入该屏幕的描述,在“逻辑流”卡里将系统默认注释掉的PBO、PAI事件的模块取消注释并产生这两个模块(双击并确定);
4>、在“屏幕制作器”界面点击
进入“屏幕制作器”的图形界面,开始绘制我们需要的屏幕元素,这里我们需要一个“表控制”(最左边从下数第四个元素),该表格的属性设置为:
名称:
起始行列和高宽
上图表示“列标题”为“具体内容”,可以水平或垂直的调节大小,有水平和垂直的分隔符,只能同时选中一行一列,带选择列(DE_BOX),最左端两列固定不滚动;
5>、接下来给单元格和列标题名称并给单元格指定内表的字段,
6>、屏幕的PBO、PAI事件的代码如下:
PROCESS BEFORE OUTPUT.
MODULE status_0100.
LOOP AT i_detail INTO wa_detail
WITH CONTROL vs_detail CURSOR i_detail-current_line .
ENDLOOP.
*
PROCESS AFTER INPUT.
LOOP AT i_detail .
ENDLOOP.
MODULE user_command_0100.
7>、需要在定义变量的时候声明一下表控制和动作的接受者(OK_CODE)如下:
* 表控制IS_MATNR
CONTROLS vs_detail TYPE TABLEVIEW USING SCREEN 0100 .
" 利用同名传递原理,来接受细节屏幕上的元素“ok_code”的值
DATA:
ok_code TYPE sy-ucomm .
8>“MODULE status_0100.”的代码如下:
MODULE status_0100 OUTPUT.
SET PF-STATUS '0100' .
DESCRIBE TABLE i_detail LINES vs_detail-current_line .
ENDMODULE. " status_0100 OUTPUT
在“0100”的工具栏里,只设置
即可满足需求;
“MODULE user_command_0100.”的代码如下:
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'BACK' .
SET SCREEN 0 . " 返回主屏幕
ENDCASE.
ENDMODULE. " user_command_0100 INPUT
完成调用细节屏幕;
注意:
在显示细节屏幕的字段的类型上,当内表中有数据为货币类型的时候,要在“格式”里指明该字段是货币类型的数据,如下图:
3.5.调用其他事务
FORM f_call_tran USING p_rs_selfield TYPE slis_selfield .
SET PARAMETER ID 'LIB' FIELD p_rs_selfield-value .
CALL TRANSACTION 'SE37' ."AND SKIP FIRST SCREEN .
ENDFORM. " f_call_tran
“LIB”是指参数ID,查找方法:
用一个事务码进入事务界面,在输入框内按F1,在弹出来的界面中点击
,新界面中的
就是参数ID;
“SE37”是指我们要调用的事务代码,“AND SKIP FIRST SCREEN”表示跳过第一屏屏幕;
3.6.打开并选择文件:
1>、现则内表中定义好存放文件路径的字段(这里是FILE_PATH),当用户点击界面上设置好的打开文件图标时,就会触发子FORM(F_USER_COMMAND)里的打开文件的子FORM(F_OPEN_FOLDER);
2>子FORM(F_OPEN_FOLDER)的代码如下:
FORM f_open_folder USING p_rs_selfield TYPE slis_selfield .
DATA:
l_file_path LIKE rlgrap-filename .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
title = '选择文件'
IMPORTING
filename = l_file_path
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc = 0.
wa_tab-file_path = l_file_path . " 将得到的文件的路径赋给当前行的路径
MODIFY i_tab INDEX wa_tab-numer FROM wa_tab TRANSPORTING file_path .
CLEAR l_file_path .
ELSE .
MESSAGE s000 WITH '没有选择文件' .
ENDIF.
ENDFORM. " f_open_folder
4.关于设置字段和列名的子FORM(F_FIELDS)的参数设置:
4.1.单列优化宽度
当在子FORM(F_BUILD_LAYOUT)里没有指明全局优化列宽的时候,在需要指定优化的字段的属性里指定下列属性就可以单列优化了,
wa_fieldcat-col_opt = 'X' .
4.2.单列求和或者取消求和,添加属性
wa_fieldcat-do_sum = 'X' . " 求和
wa_fieldcat-no_sum = 'X' . " 取消求和
如果此时在子FORM(F_BUILD_L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- REUSEALVGRIDDISPLAYLVC 详细 讲解