docking 分屏显示ALV

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. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值