YTEST4
*&---------------------------------------------------------------------*
*& Report YTEST4
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT YTEST4.
**1、相关数据定义
*类定义
CLASS : lcl_event_receiver DEFINITION DEFERRED.
**定义alv数据显示内表
**sreen 1
DATA(gs_data_a) = VALUE mara( ).
DATA gt_data_a LIKE TABLE OF gs_data_a.
DATA(gs_data_b) = VALUE marc( ).
DATA gt_data_b LIKE TABLE OF gs_data_b.
**sreen 1
DATA BEGIN OF gs_out_a .
INCLUDE TYPE mara.
DATA:
check(1) , "复选框
END OF gs_out_a.
DATA gt_out_a LIKE TABLE OF gs_out_a.
***dock --ooalv定义
DATA :
go_docking TYPE REF TO cl_gui_docking_container,
go_splitter1 TYPE REF TO cl_gui_splitter_container,
go_sp_container1 TYPE REF TO cl_gui_container, "screen1 的容器
go_sp_container2 TYPE REF TO cl_gui_container, "screen2 的容器
go_alv_grid1 TYPE REF TO cl_gui_alv_grid, "alv1
go_alv_grid2 TYPE REF TO cl_gui_alv_grid, "alv2
go_event1 TYPE REF TO lcl_event_receiver, "事件2
go_event2 TYPE REF TO lcl_event_receiver. "事件1
DATA :
gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat1 TYPE lvc_t_fcat,
gt_fieldcat2 TYPE lvc_t_fcat,
gs_layout TYPE lvc_s_layo,
gs_variant1 TYPE disvariant,
gs_variant2 TYPE disvariant,
gt_exclude TYPE ui_functions, "按钮
gs_exclude TYPE ui_func.
*---------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
**双击
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
**功能键
METHODS handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm sender.
**数据更改
METHODS handle_data_changed FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed sender.
**按钮
METHODS handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive sender.
**单击,热键
METHODS handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
*& 包含 ZCLS
*&---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click .
PERFORM handle_double_click USING e_row e_column es_row_no.
ENDMETHOD . "HANDLE_BUTTON_CLICK
METHOD handle_user_command.
" PERFORM handle_user_command USING e_ucomm sender.
ENDMETHOD. "HANDLE_DATA_CHANGED
METHOD handle_data_changed.
" PERFORM handle_data_changed USING er_data_changed sender.
ENDMETHOD. "HANDLE_DATA_CHANGED
METHOD handle_toolbar.
" PERFORM handle_toolbar USING e_object e_interactive sender.
ENDMETHOD.
METHOD handle_hotspot_click.
PERFORM handle_hotspot_click USING e_row_id e_column_id.
ENDMETHOD. "HANDLE_HOTSPOT_CLICK
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
PARAMETERS matnr LIKE mara-matnr.
PARAMETERS DATE LIKE SY-DATUM.
START-OF-SELECTION.
PERFORM get_data_a USING matnr .
PERFORM call_screen_a.
*&---------------------------------------------------------------------*
*& Form get_data_a
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> MATNR
*&---------------------------------------------------------------------*
FORM get_data_a USING p_matnr LIKE mara-matnr.
SELECT *
FROM mara
INTO CORRESPONDING FIELDS OF TABLE gt_out_a
UP TO 10 ROWS.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form call_screen_a
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM call_screen_a .
CALL SCREEN 9000.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'STUAI'.
SET TITLEBAR '分屏测试'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT .
DATA ok_code LIKE sy-ucomm.
ok_code = sy-ucomm.
CASE ok_code.
WHEN '&F03' OR '&F12'."退出
LEAVE TO SCREEN 0.
WHEN '&F15'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module INIT_DOCKING OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_docking OUTPUT.
IF go_docking IS INITIAL.
PERFORM init_docking_alv_proc.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form init_docking_alv_proc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM init_docking_alv_proc .
**创建docking
CREATE OBJECT go_docking
EXPORTING
repid = sy-repid
dynnr = sy-dynnr
extension = '1500' "屏幕大小
side = cl_gui_docking_container=>dock_at_top.
"将屏幕拆分成上下两个屏幕:两行一列
CREATE OBJECT go_splitter1
EXPORTING
parent = go_docking
rows = 2
columns = 1.
"第一个屏幕放在第一行第一列
CALL METHOD go_splitter1->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = go_sp_container1.
"第一个屏幕高度
CALL METHOD go_splitter1->set_row_height
EXPORTING
id = 1
height = 50.
"第二个屏幕 放在第二行第一列
CALL METHOD go_splitter1->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = go_sp_container2.
*--容器1
CREATE OBJECT go_alv_grid1
EXPORTING
i_parent = go_sp_container1
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*-- 容器 2.
CREATE OBJECT go_alv_grid2
EXPORTING
i_parent = go_sp_container2
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
***创建格式
PERFORM frm_layout_gri CHANGING gs_layout.
***TOOLBAR
PERFORM frm_tolber_gri.
***FEILDCAT
PERFORM frm_feildcat_gri .
***event data
"screen 1
PERFORM frm_event_handler_proc CHANGING go_event1
go_alv_grid1.
"screen 2
PERFORM frm_event_handler_proc CHANGING go_event1
go_alv_grid2.
*>> ALV LIST 显示
PERFORM frm_call_alv_list_proc_a.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_layout_gri
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GS_LAYOUT
*&---------------------------------------------------------------------*
FORM frm_layout_gri CHANGING p_gs_layout LIKE gs_layout.
p_gs_layout-sel_mode = 'D'.
p_gs_layout-zebra = 'X'.
p_gs_layout-cwidth_opt = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_tolber_gri
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_tolber_gri .
REFRESH gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND gs_exclude TO gt_exclude.
gs_exclude = cl_gui_alv_grid=>mc_fc_refresh.
APPEND gs_exclude TO gt_exclude.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_feildcat_gri
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GS_FIELDCAT
*&---------------------------------------------------------------------*
FORM frm_feildcat_gri .
DEFINE add_fieldcat1.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-reptext = &2.
gs_fieldcat-cfieldname = &3.
gs_fieldcat-f4availabl = &4.
gs_fieldcat-hotspot = &5.
gs_fieldcat-edit = &6.
gs_fieldcat-checkbox = &7.
APPEND gs_fieldcat TO gt_fieldcat1.
CLEAR gs_fieldcat.
END-OF-DEFINITION.
add_fieldcat1:
" 'CHECK' '' '' '' '' 'X' 'X',
'MATNR' '物料编码' '' 'X' 'X' '' '',
'PSTAT' '维护状态' '' '' '' '' '',
'MTART' '物料类型' '' '' '' '' '',
'MBRSH' '行业领域' '' '' '' '' '',
'MATKL' '物料组' '' '' '' '' '',
'MEINS' '基本计量单位' '' '' '' '' '',
'VOLEH' '体积单位' '' '' '' '' '',
'BEHVO' '容器需求' '' '' '' '' '',
'RAUBE' '存储条件' '' '' '' '' '',
'TRAGR' '运输组' '' '' '' '' ''.
DEFINE add_fieldcat2.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-reptext = &2.
gs_fieldcat-cfieldname = &3.
gs_fieldcat-f4availabl = &4.
gs_fieldcat-hotspot = &5.
gs_fieldcat-edit = &6.
gs_fieldcat-no_out = &7.
APPEND gs_fieldcat TO gt_fieldcat2.
CLEAR gs_fieldcat.
END-OF-DEFINITION.
add_fieldcat2:
'MATNR' '物料编码' '' '' '' '' '',
'PSTAT' '维护状态' '' '' '' '' '',
'WERKS' '工厂' '' '' '' '' '',
'BWTTY' '评估类别' '' '' '' '' '',
'MAABC' 'ABC标识' '' '' '' '' '',
'EKGRP' '采购组' '' '' '' '' '',
'EISBE' '安全库存' '' '' '' '' '',
'MABST' '最大库存级别' '' '' '' '' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_event_handler_proc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GO_EVENT1
*& <-- GO_ALV_GRID1
*&---------------------------------------------------------------------*
FORM frm_event_handler_proc CHANGING p_go_event1 TYPE REF TO lcl_event_receiver
p_go_alv_grid1 TYPE REF TO cl_gui_alv_grid.
CALL METHOD p_go_alv_grid1->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
"修改,按钮后刷新
CALL METHOD p_go_alv_grid1->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD p_go_alv_grid1->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
CREATE OBJECT p_go_event1.
IF p_go_alv_grid1 = go_alv_grid1.
MESSAGE '触发事件' TYPE 'I'.
SET HANDLER p_go_event1->handle_double_click FOR p_go_alv_grid1.
SET HANDLER p_go_event1->handle_toolbar FOR p_go_alv_grid1.
SET HANDLER p_go_event1->handle_data_changed FOR p_go_alv_grid1.
" SET HANDLER p_go_event1->handle_onf4 FOR p_go_alv_grid1.
ENDIF.
SET HANDLER p_go_event1->handle_hotspot_click FOR p_go_alv_grid1.
SET HANDLER p_go_event1->handle_user_command FOR p_go_alv_grid1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_call_alv_list_proc
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
FORM frm_call_alv_list_proc_a.
CALL METHOD go_alv_grid1->set_table_for_first_display
EXPORTING
is_variant = gs_variant1
i_save = 'A'
is_layout = gs_layout
it_toolbar_excluding = gt_exclude[]
CHANGING
it_outtab = gt_out_a[]
it_fieldcatalog = gt_fieldcat1[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
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 go_alv_grid2->set_table_for_first_display
EXPORTING
is_variant = gs_variant2
i_save = 'A'
is_layout = gs_layout
it_toolbar_excluding = gt_exclude[]
CHANGING
it_outtab = gt_data_b[]
it_fieldcatalog = gt_fieldcat2[]
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
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.
*&---------------------------------------------------------------------*
*& Form handle_data_changed
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> ER_DATA_CHANGED
*& --> SENDER
*&---------------------------------------------------------------------*
FORM handle_data_changed USING po_data_changed TYPE REF TO cl_alv_changed_data_protocol
po_sender TYPE REF TO cl_gui_alv_grid.
DATA : ls_stable TYPE lvc_s_stbl,
ls_s_col TYPE lvc_s_col. "#EC NEEDED
CLEAR : ls_stable.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
DATA gt_out LIKE TABLE OF gs_out_a.
LOOP AT gt_out_a INTO gs_out_a WHERE check = 'X'.
APPEND gs_out_a TO gt_out.
ENDLOOP.
IF gt_out[] IS NOT INITIAL.
SELECT *
FROM marc
INTO CORRESPONDING FIELDS OF TABLE gt_data_b
FOR ALL ENTRIES IN gt_out
WHERE matnr = gt_out-matnr.
ENDIF.
CALL METHOD go_alv_grid2->set_frontend_layout
EXPORTING
is_layout = gs_layout.
CALL METHOD go_alv_grid2->refresh_table_display
EXPORTING
i_soft_refresh = ' '
is_stable = ls_stable.
* CALL METHOD go_alv_grid2->refresh_table_display "数据刷新时固定位置
* EXPORTING
* is_stable = ls_stable.
* CLEAR gt_data_b[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form handle_double_click
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_ROW
*& --> E_COLUMN
*& --> ES_ROW_NO
*&---------------------------------------------------------------------*
FORM handle_double_click USING pv_row TYPE lvc_s_row
pv_column TYPE lvc_s_col
pv_row_no TYPE lvc_s_roid.
DATA ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
READ TABLE gt_out_a INTO gs_out_a INDEX pv_row-index.
IF sy-subrc = 0.
SELECT *
FROM marc
INTO CORRESPONDING FIELDS OF TABLE gt_data_b
WHERE matnr = gs_out_a-matnr.
ENDIF.
CALL METHOD go_alv_grid2->set_frontend_layout
EXPORTING
is_layout = gs_layout.
CALL METHOD go_alv_grid2->refresh_table_display
EXPORTING
i_soft_refresh = ' '
is_stable = ls_stable.
MESSAGE '双击' TYPE 'S'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form handle_hotspot_click
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> E_ROW_ID
*& --> E_COLUMN_ID
*&---------------------------------------------------------------------*
FORM handle_hotspot_click USING p_e_row_id TYPE lvc_s_row
p_e_column_id TYPE lvc_s_col.
DATA ls_stable TYPE lvc_s_stbl.
ls_stable-row = 'X'.
ls_stable-col = 'X'.
READ TABLE gt_out_a INTO gs_out_a INDEX p_e_row_id-index.
IF sy-subrc = 0.
SELECT *
FROM marc
INTO CORRESPONDING FIELDS OF TABLE gt_data_b
WHERE matnr = gs_out_a-matnr.
ENDIF.
CALL METHOD go_alv_grid2->set_frontend_layout
EXPORTING
is_layout = gs_layout.
CALL METHOD go_alv_grid2->refresh_table_display
EXPORTING
i_soft_refresh = ' '
is_stable = ls_stable.
MESSAGE '单击' TYPE 'S'.
ENDFORM.
docking 分屏显示ALV
最新推荐文章于 2024-07-16 16:18:17 发布