*&---------------------------------------------------------------------*
*& Report ZTEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_ALV.
tables: makt.
*********************************************************************************
selection-screen begin of block b1.
select-options:
se_matnr for makt-matnr.
selection-screen end of block b1.
*********************************************************************************
type-pools: slis. "这个类型组有很多ALV的自定义数据类型以及结构化数据类型
data:
i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息)
i_layout type slis_layout_alv, "alv格式
i_fieldcat type slis_fieldcat_alv, "
i_events type slis_t_event, "alv事件
w_events like line of i_events,
i_list_comments type slis_t_listheader, "alv表单标题区域设置
w_list_comments like line of i_list_comments,
w_repid like sy-repid. "当前程序
**********************************************************
*定义内表
data:
begin of itab occurs 0,
matnr like rseg-matnr,
maktx like makt-maktx,
end of itab.
********************************************************************
start-of-selection.
perform getdata. "1.从数据库中取数据到相应内表中
perform layout_build. "2.用于定义ALV表单的相关格式、属性
perform fields_build. "3.用来定义表单中的各个列的相关信息,比如列名等
perform display_data. "4.用来显示ALV表单
end-of-selection.
*&---------------------------------------------------------------------*
*& 1.Form getdata 从数据库中取数据到相应内表中
*&---------------------------------------------------------------------*
form getdata.
select matnr maktx from makt into itab
WHERE MAKT~MATNR IN se_matnr.
APPEND ITAB.
ENDSELECT.
endform.
*&---------------------------------------------------------------------*
*& 3.Form fields_build 设置报表显示列属性信息
*&---------------------------------------------------------------------*
form fields_build .
refresh i_fieldcat_alv.
clear i_fieldcat.
data colnum type i.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'MATNR'.
i_fieldcat-seltext_s = '物料编号'.
i_fieldcat-seltext_m = '物料编号'.
i_fieldcat-seltext_l = '物料编号'.
i_fieldcat-outputlen = 10.
i_fieldcat-key = 'X'.
append i_fieldcat to i_fieldcat_alv.
clear i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'MAKTX'.
i_fieldcat-seltext_s = '物料描述'.
i_fieldcat-seltext_m = '物料描述'.
i_fieldcat-seltext_l = '物料描述'.
i_fieldcat-outputlen = 20.
append i_fieldcat to i_fieldcat_alv.
clear i_fieldcat.
endform.
*&---------------------------------------------------------------------*
*& Form events_build
*&---------------------------------------------------------------------*
form events_build .
call function 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = i_events .
* read table i_events with key name = 'TOP_OF_PAGE'
* into w_events.
* if sy-subrc = 0.
* move 'ALV_TOP_OF_PAGE' to w_events-form.
* modify i_events from w_events index sy-tabix.
* endif.
READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.
IF SY-SUBRC EQ 0.
w_events-name = 'USER_COMMAND'.
MODIFY i_events FROM w_events index sy-tabix.
ENDIF.
endform. " events_build
*&---------------------------------------------------------------------*
*& 4.Form display_data 用来显示ALV表单
*&---------------------------------------------------------------------*
form display_data .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "用户触发事件
i_callback_pf_status_set = 'PF_STATUS_SET'(001) "调用用户事件和按钮事件
i_callback_program = w_repid "当前程序
is_layout = i_layout "子函数layout_build填充的格式定义
it_fieldcat = i_fieldcat_alv[] "子函数fields填充的各列
it_events = i_events[]
" i_grid_title = ''
I_SAVE = 'A' "保存变式
tables
t_outtab = itab. "假设数据都在itab内表中
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " display_data
*&---------------------------------------------------------------------*
*& 2.Form layout_build 设置alv显示格式和属性
*&---------------------------------------------------------------------*
form layout_build .
* i_layout-detail_popup = 'X'. "是否弹出详细信息窗口
* i_layout-no_vline = ' '. "这个用来设置列间隔线
i_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置
i_layout-detail_initial_lines = 'X'. "show also initial lines
i_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏
* i_layout-f2code = '&ETA'. "设置触发弹出详细信息窗口的功能码,这里是双击
i_layout-no_colhead = ' '.
w_repid = sy-repid. "程序为当前程序
endform. "layout_build
*---------------------------------
FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab. "调用的FORM
set pf-status 'TEST1'.
endform.
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
form user_command using i_ucomm like sy-ucomm "这段程序表明了自定义按钮是做什么用的。可以在SE41中自定义返回值
is_selfield type slis_selfield.
case i_ucomm.
when '&IC1'.
message i888(sabapdocu) with '双击事件'.
when 'REF'.
message i888(sabapdocu) with '刷新事件'.
is_selfield-refresh = 'X'.
clear itab[].
endcase.
endform. "user_command
*& Report ZTEST_ALV
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_ALV.
tables: makt.
*********************************************************************************
selection-screen begin of block b1.
select-options:
se_matnr for makt-matnr.
selection-screen end of block b1.
*********************************************************************************
type-pools: slis. "这个类型组有很多ALV的自定义数据类型以及结构化数据类型
data:
i_fieldcat_alv type slis_t_fieldcat_alv, "定义列标题(属性/信息)
i_layout type slis_layout_alv, "alv格式
i_fieldcat type slis_fieldcat_alv, "
i_events type slis_t_event, "alv事件
w_events like line of i_events,
i_list_comments type slis_t_listheader, "alv表单标题区域设置
w_list_comments like line of i_list_comments,
w_repid like sy-repid. "当前程序
**********************************************************
*定义内表
data:
begin of itab occurs 0,
matnr like rseg-matnr,
maktx like makt-maktx,
end of itab.
********************************************************************
start-of-selection.
perform getdata. "1.从数据库中取数据到相应内表中
perform layout_build. "2.用于定义ALV表单的相关格式、属性
perform fields_build. "3.用来定义表单中的各个列的相关信息,比如列名等
perform display_data. "4.用来显示ALV表单
end-of-selection.
*&---------------------------------------------------------------------*
*& 1.Form getdata 从数据库中取数据到相应内表中
*&---------------------------------------------------------------------*
form getdata.
select matnr maktx from makt into itab
WHERE MAKT~MATNR IN se_matnr.
APPEND ITAB.
ENDSELECT.
endform.
*&---------------------------------------------------------------------*
*& 3.Form fields_build 设置报表显示列属性信息
*&---------------------------------------------------------------------*
form fields_build .
refresh i_fieldcat_alv.
clear i_fieldcat.
data colnum type i.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'MATNR'.
i_fieldcat-seltext_s = '物料编号'.
i_fieldcat-seltext_m = '物料编号'.
i_fieldcat-seltext_l = '物料编号'.
i_fieldcat-outputlen = 10.
i_fieldcat-key = 'X'.
append i_fieldcat to i_fieldcat_alv.
clear i_fieldcat.
colnum = colnum + 1.
i_fieldcat-col_pos = colnum.
i_fieldcat-fieldname = 'MAKTX'.
i_fieldcat-seltext_s = '物料描述'.
i_fieldcat-seltext_m = '物料描述'.
i_fieldcat-seltext_l = '物料描述'.
i_fieldcat-outputlen = 20.
append i_fieldcat to i_fieldcat_alv.
clear i_fieldcat.
endform.
*&---------------------------------------------------------------------*
*& Form events_build
*&---------------------------------------------------------------------*
form events_build .
call function 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = i_events .
* read table i_events with key name = 'TOP_OF_PAGE'
* into w_events.
* if sy-subrc = 0.
* move 'ALV_TOP_OF_PAGE' to w_events-form.
* modify i_events from w_events index sy-tabix.
* endif.
READ TABLE i_events INTO w_events WITH KEY NAME = 'USER_COMMAND'.
IF SY-SUBRC EQ 0.
w_events-name = 'USER_COMMAND'.
MODIFY i_events FROM w_events index sy-tabix.
ENDIF.
endform. " events_build
*&---------------------------------------------------------------------*
*& 4.Form display_data 用来显示ALV表单
*&---------------------------------------------------------------------*
form display_data .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "用户触发事件
i_callback_pf_status_set = 'PF_STATUS_SET'(001) "调用用户事件和按钮事件
i_callback_program = w_repid "当前程序
is_layout = i_layout "子函数layout_build填充的格式定义
it_fieldcat = i_fieldcat_alv[] "子函数fields填充的各列
it_events = i_events[]
" i_grid_title = ''
I_SAVE = 'A' "保存变式
tables
t_outtab = itab. "假设数据都在itab内表中
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " display_data
*&---------------------------------------------------------------------*
*& 2.Form layout_build 设置alv显示格式和属性
*&---------------------------------------------------------------------*
form layout_build .
* i_layout-detail_popup = 'X'. "是否弹出详细信息窗口
* i_layout-no_vline = ' '. "这个用来设置列间隔线
i_layout-colwidth_optimize = 'X'. "优化列宽选项是否设置
i_layout-detail_initial_lines = 'X'. "show also initial lines
i_layout-detail_titlebar = '详细内容'. "设置弹出窗口的标题栏
* i_layout-f2code = '&ETA'. "设置触发弹出详细信息窗口的功能码,这里是双击
i_layout-no_colhead = ' '.
w_repid = sy-repid. "程序为当前程序
endform. "layout_build
*---------------------------------
FORM PF_STATUS_SET USING rt_extab TYPE slis_t_extab. "调用的FORM
set pf-status 'TEST1'.
endform.
*&--------------------------------------------------------------------*
*& Form user_command
*&--------------------------------------------------------------------*
form user_command using i_ucomm like sy-ucomm "这段程序表明了自定义按钮是做什么用的。可以在SE41中自定义返回值
is_selfield type slis_selfield.
case i_ucomm.
when '&IC1'.
message i888(sabapdocu) with '双击事件'.
when 'REF'.
message i888(sabapdocu) with '刷新事件'.
is_selfield-refresh = 'X'.
clear itab[].
endcase.
endform. "user_command