OO ALV 测试关闭ALV按钮
*&---------------------------------------------------------------------* *& Report YWWZ_TEST904 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ywwz_test904. *INCLUDE ywwz_test904_c01 . *INCLUDE ywwz_test904_t01 . *INCLUDE ywwz_test904_f01 . *INCLUDE ywwz_test904_m01 . *&---------------------------------------------------------------------* *& 包含 YWWZ_TEST904_T01 *&---------------------------------------------------------------------* TABLES:vbak. *TYPES:BEGIN OF ty_head, * * vbeln TYPE vbak-vbeln, * erdat TYPE vbak-erdat, * erzet TYPE vbak-erzet, * ernam TYPE vbak-ernam, * auart TYPE vbak-auart, * * * END OF ty_head. * *TYPES:BEGIN OF ty_item, * vbeln TYPE vbap-vbeln, * posnr TYPE vbap-posnr, * matnr TYPE vbap-matnr, * matkl TYPE vbap-matkl, * arktx TYPE vbap-arktx, * END OF ty_item. DATA:gt_head TYPE TABLE OF vbak, gt_item TYPE TABLE OF vbap. DATA:gv_title_9000 TYPE char30 VALUE '测试'. DATA:g_container_9000_top TYPE REF TO cl_gui_custom_container, g_container_9000_bottom TYPE REF TO cl_gui_docking_container. DATA:go_alv_grid_head TYPE REF TO cl_gui_alv_grid, go_alv_grid_item TYPE REF TO cl_gui_alv_grid. "ALV容器 cl_gui_docking_container 不用画屏幕容器 , "ALV container容器 cl_gui_custom_container 需要画屏幕容器 DATA:gv_item_alv_flag TYPE c. SELECT-OPTIONS s_erdat FOR vbak-erdat. **&---------------------------------------------------------------------* **& DESC:搜索条件子屏幕的定义 **&---------------------------------------------------------------------* *SELECTION-SCREEN BEGIN OF SCREEN 9010 AS SUBSCREEN. * SELECTION-SCREEN BEGIN OF LINE . * "---系统状态 * SELECTION-SCREEN COMMENT 1(10) TEXT-001 . * SELECT-OPTIONS s_erdat FOR vbak-erdat. * * "---执行按钮 * SELECTION-SCREEN PUSHBUTTON 81(30) zexec USER-COMMAND zexec. * SELECTION-SCREEN END OF LINE . * *SELECTION-SCREEN END OF SCREEN 9010. INITIALIZATION. PERFORM frm_initial. START-OF-SELECTION . PERFORM frm_get_data. CALL SCREEN 9000 . *&---------------------------------------------------------------------* *& 包含 YWWZ_TEST904_F01 *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* MODULE status_9000 OUTPUT. SET PF-STATUS 'STATUS_9000'. SET TITLEBAR 'TITLE_9000' WITH gv_title_9000. ENDMODULE. *&---------------------------------------------------------------------* *& Module DISPLAY_ALV OUTPUT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* MODULE display_alv OUTPUT. PERFORM frm_display_alv. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_9000 INPUT. CASE sy-ucomm. WHEN '&F03' OR '&F15'. LEAVE TO SCREEN 0. WHEN '&F12'. LEAVE PROGRAM. WHEN 'ZTEST'. PERFORM frm_close_item_alv. WHEN OTHERS. ENDCASE. ENDMODULE. *&---------------------------------------------------------------------* *& Form frm_display_alv *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM frm_initial . * zexec = icon_execute_object && '执行'. ENDFORM. FORM frm_display_alv . IF g_container_9000_top IS NOT BOUND. CREATE OBJECT g_container_9000_top EXPORTING * parent = container_name = 'GRID1' * style = * lifetime = lifetime_default * repid = * dynnr = * no_autodef_progid_dynnr = EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. IF sy-subrc <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. * CREATE OBJECT g_container_9000_top * EXPORTING * parent = cl_gui_container=>screen0 * repid = sy-repid * dynnr = '9000' ** side = cl_gui_docking_container=>dock_at_right ”ALV贴屏幕右边,从屏幕右边开始算宽度 ** side = cl_gui_docking_container=>dock_at_top "ALV贴屏幕左边,从左边算屏幕宽度, ** extension = 5000 "屏幕宽度 ** ratio = 95 "屏幕比例 小于5大于95会报cntl_error异常 ** style = cl_gui_control=>ws_child "可选参数,设置ALV是否可用手动拖动大小 * EXCEPTIONS * cntl_error = 1 * cntl_system_error = 2 * create_error = 3 * lifetime_error = 4 * lifetime_dynpro_dynpro_link = 5 * OTHERS = 6. CREATE OBJECT go_alv_grid_head EXPORTING * i_shellstyle = 0 * i_lifetime = i_parent = g_container_9000_top * i_appl_events = SPACE * i_parentdbg = * i_applogparent = * i_graphicsparent = * i_name = * i_fcat_complete = SPACE * o_previous_sral_handler = * i_use_one_ux_appearance = ABAP_FALSE EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. PERFORM frm_alv_head. ENDIF. IF go_alv_grid_head IS BOUND. * CALL METHOD g_container_9000_top->set_height( height = 1000 ). PERFORM frm_refresh_alv_9000 USING go_alv_grid_head. ENDIF. * CREATE OBJECT go_alv_grid_head"上半部分 * EXPORTING * I_PARENT = G_CONTAINER_T. * * CREATE OBJECT G_GRID_T"上半部分 * EXPORTING * I_PARENT = G_CONTAINER_T. ENDFORM. FORM frm_alv_head . DATA: ls_layout TYPE lvc_s_layo, lt_fieldcat TYPE lvc_t_fcat, lt_tools TYPE ui_functions. *&----layout ls_layout-zebra = 'X'. ls_layout-sel_mode = 'C'. ls_layout-col_opt = 'X'. * ls_layout-box_fname = 'SEL'. *&----fieldcat CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING * I_BUFFER_ACTIVE = i_structure_name = 'VBAK' * I_CLIENT_NEVER_DISPLAY = 'X' * I_BYPASSING_BUFFER = * I_INTERNAL_TABNAME = CHANGING ct_fieldcat = lt_fieldcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. CALL METHOD go_alv_grid_head->set_table_for_first_display EXPORTING i_save = rs_c_true "#EC NOTEXT is_layout = ls_layout * it_toolbar_excluding = lt_tools CHANGING it_outtab = gt_head it_fieldcatalog = lt_fieldcat EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. FORM frm_alv_item . DATA: ls_layout TYPE lvc_s_layo, lt_fieldcat TYPE lvc_t_fcat, lt_tools TYPE ui_functions. *&----layout ls_layout-zebra = 'X'. ls_layout-sel_mode = 'C'. ls_layout-col_opt = 'X'. * ls_layout-box_fname = 'SEL'. *&----fieldcat CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING * I_BUFFER_ACTIVE = i_structure_name = 'VBAP' * I_CLIENT_NEVER_DISPLAY = 'X' * I_BYPASSING_BUFFER = * I_INTERNAL_TABNAME = CHANGING ct_fieldcat = lt_fieldcat EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. CALL METHOD go_alv_grid_item->set_table_for_first_display EXPORTING i_save = rs_c_true "#EC NOTEXT is_layout = ls_layout * it_toolbar_excluding = lt_tools CHANGING it_outtab = gt_item it_fieldcatalog = lt_fieldcat EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc NE 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. FORM frm_get_data. SELECT * FROM vbak WHERE erdat IN @s_erdat[] INTO TABLE @gt_head UP TO 20 ROWS. SELECT * FROM vbap FOR ALL ENTRIES IN @gt_head WHERE vbeln = @gt_head-vbeln INTO TABLE @gt_item UP TO 20 ROWS. ENDFORM. FORM frm_close_item_alv. IF gv_item_alv_flag IS INITIAL. gv_item_alv_flag = 'X'. PERFORM frm_open_item. ELSEIF gv_item_alv_flag = 'X'. CLEAR gv_item_alv_flag. PERFORM frm_close_item. ENDIF. ENDFORM. FORM frm_open_item. IF g_container_9000_bottom IS NOT BOUND. CREATE OBJECT g_container_9000_bottom EXPORTING repid = sy-repid dynnr = '9000' * side = cl_gui_docking_container=>dock_at_right ”ALV贴屏幕右边,从屏幕右边开始算宽度 side = cl_gui_docking_container=>dock_at_bottom "ALV贴屏幕左边,从左边算屏幕宽度, extension = 1000 "屏幕宽度 ratio = 30 "屏幕比例 小于5大于95会报cntl_error异常 style = cl_gui_control=>ws_child "可选参数,设置ALV是否可用手动拖动大小 EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5 OTHERS = 6. CREATE OBJECT go_alv_grid_item EXPORTING i_parent = g_container_9000_bottom EXCEPTIONS error_cntl_create = 1 error_cntl_init = 2 error_cntl_link = 3 error_dp_create = 4 OTHERS = 5. PERFORM frm_alv_item. ENDIF. ENDFORM. FORM frm_close_item. CALL METHOD g_container_9000_bottom->free. FREE g_container_9000_bottom. FREE go_alv_grid_item. CLEAR g_container_9000_bottom. CLEAR go_alv_grid_item. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_REFRESH_ALV_9000 *&---------------------------------------------------------------------* FORM frm_refresh_alv_9000 USING pv_grid TYPE REF TO cl_gui_alv_grid. DATA: lt_celltab TYPE lvc_t_styl, ls_celltab TYPE lvc_s_styl, ls_stable TYPE lvc_s_stbl. ls_stable-row = 'X'. "固定行 ls_stable-col = 'X'. "固定列 CHECK pv_grid IS NOT INITIAL. CALL METHOD pv_grid->refresh_table_display EXPORTING is_stable = ls_stable * I_SOFT_REFRESH = 'X' EXCEPTIONS finished = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL METHOD cl_gui_cfw=>flush. ENDFORM.