*&---------------------------------------------------------------------*
*& 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.