引用类:定义OOALV需要的容器网格控制器
data:
go_container_9100 TYPE REF TO cl_gui_custom_container,
go_grid_9100 TYPE REF TO cl_gui_alv_grid. "定义ALV控件名
*输出表字段
TYPES:BEGIN OF gty_alv,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
END OF gty_alv ,
gtt_alv TYPE TABLE OF gty_alv.
DATA :
gs_layout_9100 TYPE lvc_s_layo,
gt_fieldcat_9100 TYPE lvc_t_fcat,
gs_fieldcat_9100 TYPE lvc_s_fcat,
gt_alv_show TYPE gtt_alv.
定义选择屏幕
在这里 9101 是子屏幕号码,1001是主屏幕
SELECTION-SCREEN BEGIN OF SCREEN 9101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
*下拉菜单
PARAMETERS:
l_status LIKE g_status AS LISTBOX VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 9101.
START-OF-SELECTION.
CALL SCREEN '1001'.
双击1001进入主屏幕逻辑流,subscr_9100是画屏幕里面子屏幕名称。
PROCESS BEFORE OUTPUT.
MODULE status_1001.
CALL SUBSCREEN : subscr_9100 INCLUDING sy-repid g_sid."调用子屏幕
MODULE dispay_alv.
*
PROCESS AFTER INPUT.
* MODULE user_command_1001.
CALL SUBSCREEN : subscr_9100."执行子屏幕 要放在执行功能代码之前
MODULE user_command_1001.

进入“格式” 画一个子屏幕和定制屏幕


REPORT ZVIVIAN2020_08.
* 子屏幕的开发
TABLES : mara.
TYPES:BEGIN OF gty_alv,
matnr TYPE mara-matnr,
ersda TYPE mara-ersda,
ernam TYPE mara-ernam,
END OF gty_alv ,
gtt_alv TYPE TABLE OF gty_alv.
DATA :
gt_list TYPE vrm_values, "list box的值
g_flag TYPE char1, "列表初始化标识
g_status TYPE char10,
g_sid TYPE char4 VALUE '9101', "子屏幕编号
gs_stbl TYPE lvc_s_stbl VALUE 'XX',
gt_exclubar_9100 TYPE ui_functions,
go_container_9100 TYPE REF TO cl_gui_custom_container,
go_grid_9100 TYPE REF TO cl_gui_alv_grid. "定义ALV控件名
DATA :
gs_layout_9100 TYPE lvc_s_layo,
gt_fieldcat_9100 TYPE lvc_t_fcat,
gs_fieldcat_9100 TYPE lvc_s_fcat,
gt_alv_show TYPE gtt_alv. "用于保存当前显示数据.
SELECTION-SCREEN BEGIN OF SCREEN 9101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_matnr FOR mara-matnr.
PARAMETERS:
l_status LIKE g_status AS LISTBOX VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 9101.
START-OF-SELECTION.
CALL SCREEN '1001'.
FORM alvshow.
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
WHERE matnr IN s_matnr.
CREATE OBJECT go_container_9100 "创建容器对象
EXPORTING
container_name = 'ALV_CONTROL'.
CREATE OBJECT go_grid_9100
EXPORTING
i_parent = go_container_9100. "创建控件对象
* CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* IMPORTING
* e_grid = go_grid_9100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_1001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_1001 INPUT.
CASE sy-ucomm.
WHEN '&F03'.
LEAVE TO SCREEN 0.
WHEN 'EXEC'.
PERFORM display_alv.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_1001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1001 OUTPUT.
SET PF-STATUS 'ST01'.
* SET TITLEBAR 'xxx'.
PERFORM frm_set_status_list.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
WHERE matnr IN s_matnr.
go_grid_9100->refresh_table_display( is_stable = gs_stbl ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Module DISPAY_ALV OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE dispay_alv OUTPUT.
PERFORM frm_data_init.
IF go_container_9100 IS INITIAL.
PERFORM frm_get_data.
CREATE OBJECT go_container_9100
EXPORTING
container_name = 'ALV_CONTROL'.
CREATE OBJECT go_grid_9100
EXPORTING
i_parent = go_container_9100.
"格式设置
PERFORM frm_alv_set_layout_9100.
* "注册事件
PERFORM frm_alv_event_reg_9100.
"设置列属性
PERFORM frm_alv_set_fieldcat_9100.
*
CALL METHOD go_grid_9100->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
* "去掉不需要的功能
PERFORM frm_alv_exclude_func_9100
TABLES
gt_exclubar_9100.
"ALV显示
PERFORM frm_alv_first_display_9100
USING
go_grid_9100.
ELSE.
go_grid_9100->refresh_table_display( is_stable = gs_stbl ).
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_INIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_data_init .
* CHECK gt_d_ssqy IS INITIAL.
* SELECT domvalue_l,
* ddtext
* INTO TABLE @gt_d_ssqy
* FROM dd07t
* WHERE domname = 'ZD_POMP_SSQY'
* AND ddlanguage = @sy-langu.
* IF sy-subrc EQ 0.
* SORT gt_d_ssqy
* BY domvalue_l ASCENDING.
* ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_alv_show
WHERE matnr IN s_matnr.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_EVENT_REG_9100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_event_reg_9100 .
* CREATE OBJECT go_event_handler.
*
** 设置enter事件
* CALL METHOD go_grid_9100->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter
* EXCEPTIONS
* error = 1
* OTHERS = 2.
CALL METHOD go_grid_9100->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
* SET HANDLER go_event_handler->handle_changed_finished_9100 FOR go_grid_9100.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_FIRST_DISPLAY_9100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GO_GRID_9100 text
*----------------------------------------------------------------------*
FORM frm_alv_first_display_9100
USING
lcl_grid TYPE REF TO cl_gui_alv_grid.
DATA lv_variant TYPE disvariant.
lv_variant-report = sy-repid.
lv_variant-username = sy-uname.
CALL METHOD lcl_grid->set_table_for_first_display
EXPORTING
is_layout = gs_layout_9100 "显示格式
is_variant = lv_variant "变式布局
it_toolbar_excluding = gt_exclubar_9100 "排除按钮
* it_hyperlink = gt_hyperlink_9001
i_save = 'A'
CHANGING
* it_sort = gt_sort_9001 "排序
it_fieldcatalog = gt_fieldcat_9100 "显示列
it_outtab = gt_alv_show. "数据
lcl_grid->refresh_table_display( is_stable = gs_stbl ).
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SET_FIELDCAT_9100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_set_fieldcat_9100 .
REFRESH:
gt_fieldcat_9100.
* 请求单号
CLEAR gs_fieldcat_9100 .
gs_fieldcat_9100-fieldname = 'MATNR'.
gs_fieldcat_9100-ref_field = 'MATNR'.
gs_fieldcat_9100-ref_table = 'MARA'.
gs_fieldcat_9100-reptext = '物料编号'.
gs_fieldcat_9100-scrtext_l = gs_fieldcat_9100-reptext.
gs_fieldcat_9100-scrtext_m = gs_fieldcat_9100-reptext.
gs_fieldcat_9100-scrtext_s = gs_fieldcat_9100-reptext.
APPEND gs_fieldcat_9100 TO gt_fieldcat_9100 .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_SET_LAYOUT_9100
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_set_layout_9100 .
gs_layout_9100-language = '1'. "语言
gs_layout_9100-zebra = 'X'. "斑马线显示
gs_layout_9100-cwidth_opt = 'X'. "自动调整列宽
gs_layout_9100-sel_mode = 'A'. "选择方式
gs_layout_9100-stylefname = 'STYLE'. "设置单元格格式
gs_layout_9100-box_fname = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SET_STATUS_LIST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_set_status_list .
DATA:
lv_name TYPE vrm_id, " list box的名称
lv_value LIKE LINE OF gt_list . "list box的结构
CHECK g_flag IS INITIAL.
REFRESH gt_list .
lv_name = 'L_STATUS'.
DEFINE fill_list.
lv_value-key = &1. "个就是变量P_LIST的值
* lv_value-text = &2. "这个是text
APPEND lv_value TO gt_list.
END-OF-DEFINITION.
fill_list '全部'.
fill_list '下拉选择1'.
fill_list '下拉选择2'.
fill_list '下拉选择3'.
"---〉调用函数显示listbox里面的值
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = lv_name " PARAMETERS's Name
values = gt_list.
l_status = '下拉默认初始值'.
g_flag = 'X'.
ENDFORM.
FORM frm_alv_exclude_func_9100
TABLES
p_gt_exclubar_9100.
DATA: ls_exclude TYPE ui_func.
ls_exclude = '&PRINT'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&INSERT_ROW'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&DELETE_ROW'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&MAINTAIN'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&INFO'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&SL'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '%PC'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&UMC'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&GRAPH'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&PNT_PREV'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&ETA'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&PASTE_NEW_ROW'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL©_ROW'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&DETAIL'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&CHECK'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&CUT'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL©'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&MB_PASTE'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&APPEND'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&CUT'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&LOCAL&UNDO'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&MB_EXPORT'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&MB_SUBTOT'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ls_exclude = '&FIND_MORE'.
APPEND ls_exclude TO p_gt_exclubar_9100.
ENDFORM.
最终效果图:

4135

被折叠的 条评论
为什么被折叠?



