[ABAP]多个屏幕界面

18 篇文章 0 订阅

报表显示左右2个屏幕界面

REPORT zrfi.

*&---------------------------------------------------------------------*
*& DATA
*&---------------------------------------------------------------------*
TABLES:sscrfields.

DATA:BEGIN OF gs_out_tab.
DATA:
  zno TYPE char10,       
  ...
  END OF gs_out_tab.

DATA:BEGIN OF gs_out_right.
DATA:
  zno TYPE char10,       
  ...
  END OF gs_out_right.

DATA:
  gt_out_tab   LIKE STANDARD TABLE OF gs_out_tab,
  gt_out_right LIKE STANDARD TABLE OF gs_out_right,
  go_alv1      TYPE REF TO cl_gui_alv_grid,
  go_alv2      TYPE REF TO cl_gui_alv_grid,
  gs_layout1    TYPE lvc_s_layo,
  gs_layout2    TYPE lvc_s_layo,
  go_container TYPE REF TO cl_gui_docking_container,
  go_splitter  TYPE REF TO cl_gui_splitter_container,
  g_container1 TYPE REF TO cl_gui_container,
  g_container2 TYPE REF TO cl_gui_container,
  gs_fieldcat  TYPE lvc_s_fcat,
  gt_fieldcat1 TYPE lvc_t_fcat,
  gt_fieldcat2 TYPE lvc_t_fcat,
  ok_code      TYPE sy-ucomm.


*----------------------------------------------------------------------*
* DEFINITION
*----------------------------------------------------------------------*
DEFINE alv_append_field.
  CLEAR gs_fieldcat.
    gs_fieldcat-fieldname    = &1.      "要显示的字段
    gs_fieldcat-coltext      = &2.      "字段名
    gs_fieldcat-just         = &3.      "对齐方式L左 C居中 R右
    gs_fieldcat-no_zero      = &4.      "前导0
    gs_fieldcat-ref_table    = &5.      "引用表
    gs_fieldcat-ref_field    = &6.      "引用字段
    gs_fieldcat-tabname      = &7.

   CASE &7.
     WHEN 'GT_OUT_TAB'.
       APPEND gs_fieldcat TO gt_fieldcat1.
     WHEN 'GT_OUT_RIGHT'.
       APPEND gs_fieldcat TO gt_fieldcat2.
     WHEN OTHERS.
   ENDCASE.
END-OF-DEFINITION.

*----------------------------------------------------------------------*
* CLASS
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
  PUBLIC SECTION.

    DATA:
    objid    TYPE char10.
    METHODS constructor IMPORTING
                          i_objid TYPE char10 OPTIONAL.
    "设置工具栏
    METHODS:
      handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING
            e_object
            e_interactive.

    "工具栏按钮件
    METHODS  handle_user_command FOR EVENT user_command
                  OF cl_gui_alv_grid
      IMPORTING e_ucomm.

ENDCLASS.

DATA: g_event_receiver TYPE REF TO lcl_event_receiver.
CLASS lcl_event_receiver IMPLEMENTATION.
  "构造方法:设定对象编号,实现该class可以监听多个alv且不冲突
  METHOD constructor.
    objid = i_objid.
  ENDMETHOD.

  "设置工具栏
  METHOD handle_toolbar.
    PERFORM handle_toolbar USING e_object e_interactive objid.
  ENDMETHOD.
  "工具栏按钮件
  METHOD handle_user_command .
    PERFORM handle_user_command USING e_ucomm.
  ENDMETHOD.

ENDCLASS.

*&---------------------------------------------------------------------*
*& SELECTION-SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1.
PARAMETERS: p_bukrs TYPE bukrs." OBLIGATORY.
PARAMETERS: r_1 RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND rd,
            r_2 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN: END OF BLOCK b1.


*&---------------------------------------------------------------------*
*& F8
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM frm_get_data.

*&---------------------------------------------------------------------*
*& ALV显示
*&---------------------------------------------------------------------*
END-OF-SELECTION.
  CALL SCREEN 8000.



*&---------------------------------------------------------------------*
*&      Module  STATUS_8000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_8000 OUTPUT.
  SET PF-STATUS 'STANDARD'.
  SET TITLEBAR 'STANDARD'.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_8000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_8000 INPUT.
  DATA l_code TYPE sy-ucomm.

  l_code = ok_code.

  CASE l_code.
    WHEN '&F03'.
      LEAVE TO SCREEN 0.
    WHEN '&F15'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Module  SET_SCREEN  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_screen OUTPUT.
  PERFORM frm_create_container1."左屏
  PERFORM frm_create_container2."右屏
ENDMODULE.

*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_CONTAINER1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create_container1 .
  IF go_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        repid     = sy-repid
        dynnr     = sy-dynnr
        extension = 2050
        side      = cl_gui_docking_container=>dock_at_top.

    CREATE OBJECT go_splitter "定义屏幕上窗口数量
      EXPORTING
        parent  = go_container
        rows    = 1
        columns = 2.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = g_container1.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 1
        column    = 2
      RECEIVING
        container = g_container2.

  ENDIF.

  IF go_alv1 IS INITIAL.
    CREATE OBJECT go_alv1
      EXPORTING
        i_parent = g_container1.

    CALL METHOD go_alv1->set_visible
      EXPORTING
        visible = 'X'.

    PERFORM fm_show_alv1.
  ELSE.
    PERFORM frm_refresh_alv USING go_alv1 gs_layout1.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_CONTAINER2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create_container2 .
  IF go_container IS INITIAL.
    CREATE OBJECT go_container
      EXPORTING
        repid     = sy-repid
        dynnr     = sy-dynnr
        extension = 2050
        side      = cl_gui_docking_container=>dock_at_top.

    CREATE OBJECT go_splitter "定义屏幕上窗口数量
      EXPORTING
        parent  = go_container
        rows    = 1
        columns = 2.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 1
        column    = 1
      RECEIVING
        container = g_container1.

    CALL METHOD go_splitter->get_container
      EXPORTING
        row       = 1
        column    = 2
      RECEIVING
        container = g_container2.

  ENDIF.

  IF go_alv2 IS INITIAL.
    CREATE OBJECT go_alv2
      EXPORTING
        i_parent = g_container2.

    CALL METHOD go_alv2->set_visible
      EXPORTING
        visible = 'X'.

    PERFORM fm_show_alv2.
  ELSE.
    PERFORM frm_refresh_alv USING go_alv2 gs_layout2.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FM_SHOW_ALV1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_show_alv1 .
  DATA:
  l_variant   TYPE disvariant.

  l_variant-report = sy-repid && '001'.
  l_variant-handle = 1.

  PERFORM frm_build_fieldcat USING 'ALV1'.
  PERFORM frm_set_layout USING gs_layout1 'ALV1'.

* 调用ALV
  CALL METHOD go_alv1->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout1
      i_save          = 'A'
      is_variant      = l_variant
    CHANGING
      it_fieldcatalog = gt_fieldcat1
      it_outtab       = gt_out_tab.

  CREATE OBJECT g_event_receiver
    EXPORTING
      i_objid = 'LEFT'.
  "命令
  SET HANDLER g_event_receiver->handle_user_command  FOR go_alv1.
  "工具栏
  SET HANDLER g_event_receiver->handle_toolbar       FOR go_alv1.

  CALL METHOD go_alv1->set_toolbar_interactive.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FM_SHOW_ALV2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fm_show_alv2 .
  DATA:
  l_variant   TYPE disvariant.

  l_variant-report = sy-repid && '002'.
  l_variant-handle = 1.

  PERFORM frm_build_fieldcat USING 'ALV2'.
  PERFORM frm_set_layout USING gs_layout2 'ALV2'.

* 调用ALV
  CALL METHOD go_alv2->set_table_for_first_display
    EXPORTING
      is_layout       = gs_layout2
      i_save          = 'A'
      is_variant      = l_variant
    CHANGING
      it_fieldcatalog = gt_fieldcat2
      it_outtab       = gt_out_right.

  CREATE OBJECT g_event_receiver
    EXPORTING
      i_objid = 'RIGHT'.
  "命令
  SET HANDLER g_event_receiver->handle_user_command  FOR go_alv2.
  "工具栏
  SET HANDLER g_event_receiver->handle_toolbar       FOR go_alv2.

  CALL METHOD go_alv2->set_toolbar_interactive.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& 布局字段
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_build_fieldcat  USING p_alv TYPE char4.
  IF p_alv = 'ALV1'.
    alv_append_field:
       'ZNO' '订单号      ' 'L'  ' ' '   '  '    ' 'GT_OUT_TAB'.

  ELSEIF p_alv = 'ALV2'.
    alv_append_field:
       'ZNO '  '订单号      '  'L'  ' ' '   '  '    ' 'GT_OUT_RIGHT'.

  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_SET_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> G_LAYOUT1
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_set_layout USING p_gs_layout TYPE lvc_s_layo p_alv TYPE char4.
  p_gs_layout-zebra      = 'X' .
  p_gs_layout-cwidth_opt = 'X'.
  p_gs_layout-stylefname = 'STYLE'.
  p_gs_layout-info_fname = 'ROWCOLOR'.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_REFRESH_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_GRID  text
*      -->P_G_LAYOUT  text
*----------------------------------------------------------------------*
FORM frm_refresh_alv  USING  p_grid TYPE REF TO  cl_gui_alv_grid
      p_lay TYPE lvc_s_layo.
  DATA: ls_stable TYPE lvc_s_stbl.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.

  CALL METHOD p_grid->set_frontend_layout
    EXPORTING
      is_layout = p_lay.

  CALL METHOD p_grid->refresh_table_display
    EXPORTING
      is_stable = ls_stable.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_E_UCOMM  text
*----------------------------------------------------------------------*
FORM handle_user_command  USING    p_e_ucomm.

  CASE p_e_ucomm.
    WHEN 'CHECK'.
      PERFORM frm_check.
    WHEN 'CREATE'.
      PERFORM frm_create_skd.
    WHEN OTHERS.
  ENDCASE.

* 刷新
  PERFORM frm_refresh_alv USING go_alv2 gs_layout2.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> E_OBJECT
*&      --> E_INTERACTIVE
*&---------------------------------------------------------------------*
FORM handle_toolbar  USING    e_object TYPE REF TO  cl_alv_event_toolbar_set
                              e_interactive TYPE char1
                              e_objid.
  DATA: ls_toolbar TYPE stb_button.

  IF e_objid = 'LEFT'.
    CLEAR ls_toolbar.
    MOVE 'CHECK     ' TO ls_toolbar-function.
    MOVE '检查      ' TO ls_toolbar-quickinfo.
    MOVE '检查      ' TO ls_toolbar-text.
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ELSEIF e_objid = 'RIGHT'.
    CLEAR ls_toolbar.
    MOVE 'CREATE    ' TO ls_toolbar-function.
    MOVE '创建收款单 ' TO ls_toolbar-quickinfo.
    MOVE '创建收款单 ' TO ls_toolbar-text.
    APPEND ls_toolbar TO e_object->mt_toolbar.
  ENDIF.

  DELETE e_object->mt_toolbar WHERE function = '&GRAPH'
                                 OR function = '&INFO'
                                 OR function = '&REFRESH'
                                 OR function = '&CHECK'
                                 OR function = '&LOCAL&CUT'
                                 OR function = '&LOCAL&COPY'
                                 OR function = '&LOCAL&PASTE'
                                 OR function = '&LOCAL&UNDO'
                                 OR function = '&LOCAL&APPEND'
                                 OR function = '&LOCAL&INSERT_ROW'
                                 OR function = '&LOCAL&DELETE_ROW'
                                 OR function = '&LOCAL&COPY_ROW'.
  CLEAR ls_toolbar.
ENDFORM.


*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_check .

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_CREATE_SKD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_create_skd .

ENDFORM.
*8000屏幕

PROCESS BEFORE OUTPUT.
  MODULE status_8000.
  MODULE set_screen.

PROCESS AFTER INPUT.
  MODULE user_command_8000.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值