ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OOALV双屏界面互动

2022-07-18 09:40:54  阅读:195  来源: 互联网

标签:ITAB GT 界面 FIELDCAT 双屏 OOALV GS FIELDCAT2 TOOLBAR


最近根据用户要求,要将ALV表做成透视表样子。于是想到了OOALV的多屏展示。接着就是一顿万物互联操作,最终形成了一个简单DEMO。

首先做的就是创建程序,接着创建屏幕,接着在屏幕上画2个ALV框。分别取号名字,这里取con1\con2.

 

 

 

 PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
MODULE INIT_CON.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.

上面是屏幕代码,程序代码如下

REPORT ZMMR0093.
"使用画屏的方法的双屏DEMO
TYPE-POOLS: ICON.

TABLES: ZTMM006.
DATA GT_ITAB        TYPE STANDARD TABLE OF ZTMM006 .
DATA GS_ITAB        TYPE  ZTMM006 .
*DATA GT_PRINT       TYPE STANDARD TABLE OF EBAN .
DATA:BEGIN OF GS_PRINT OCCURS 0.
    INCLUDE STRUCTURE EBAN.
DATA:BOX(1).
DATA:END OF GS_PRINT.
DATA:GT_PRINT LIKE TABLE OF  GS_PRINT.

DATA:BEGIN OF GS_ITAB_HEAD OCCURS 0.
    INCLUDE STRUCTURE ZTMM006.
DATA:BOX(1).
DATA:END OF GS_ITAB_HEAD.

DATA:GT_ITAB_HEAD LIKE TABLE OF  GS_ITAB_HEAD.


DATA  CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA  CON2_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

DATA  G_GRID1 TYPE REF TO CL_GUI_ALV_GRID.
DATA  G_GRID2 TYPE REF TO CL_GUI_ALV_GRID.

"-------------------------------------
"-----------ALV1的HOTSPOT单击事件------------
"-------------------------------------
"1 定义ALV1的事件

CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS  HANDLE_CLICK
      FOR EVENT HOTSPOT_CLICK
      OF CL_GUI_ALV_GRID

      IMPORTING
          E_ROW_ID
          E_COLUMN_ID
          ES_ROW_NO.
ENDCLASS.

"2 事件的执行方法
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_CLICK.

    MESSAGE E_ROW_ID  TYPE 'S'.

    "清空原来的X
    LOOP AT GT_ITAB_HEAD INTO GS_ITAB_HEAD.
      GS_ITAB_HEAD-BOX = ''.
      MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD.
    ENDLOOP.

    "补上当前行的X
    READ TABLE GT_ITAB_HEAD INTO GS_ITAB_HEAD INDEX E_ROW_ID.   "读取当前行
    GS_ITAB_HEAD-BOX = 'X'.
    MODIFY GT_ITAB_HEAD FROM GS_ITAB_HEAD INDEX E_ROW_ID.



    "刷新X
    DATA: LS_STABLE TYPE LVC_S_STBL.
    LS_STABLE-ROW = 'X'.
    LS_STABLE-COL = 'X'.


    CALL METHOD G_GRID1->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE      = LS_STABLE
        I_SOFT_REFRESH = 'X'.


    "准备和显示第二个ALV的数据
*    DATA GV_TZNUM LIKE  GT_ZSDT030-TZNUM.
    DATA: GV_TZNUM LIKE ZTMM006-BANFN.

    "得到用户选的一个数据
    LOOP AT GT_ITAB_HEAD INTO GS_ITAB_HEAD.

      IF GS_ITAB_HEAD-BOX = 'X'.

        GV_TZNUM = GS_ITAB_HEAD-BANFN.

      ENDIF.

    ENDLOOP.



    IF GV_TZNUM IS NOT INITIAL.

      SELECT *
      INTO CORRESPONDING FIELDS OF TABLE GT_PRINT
      FROM EBAN AS A
      WHERE A~BANFN = GV_TZNUM.


      DATA GS_LAYOUT2 TYPE LVC_S_LAYO.

      GS_LAYOUT2-CWIDTH_OPT = 'X'.
      GS_LAYOUT2-GRID_TITLE = '详细项目'.
      GS_LAYOUT2-SEL_MODE = 'B'.
      GS_LAYOUT2-ZEBRA = 'X'.



      CALL METHOD G_GRID2->SET_FRONTEND_LAYOUT
        EXPORTING
          IS_LAYOUT = GS_LAYOUT2.



      CALL METHOD G_GRID2->REFRESH_TABLE_DISPLAY
        EXPORTING
          IS_STABLE      = LS_STABLE
          I_SOFT_REFRESH = 'X'.

    ENDIF.
  ENDMETHOD.
ENDCLASS.


"3 事件引用变量
DATA EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.



"-------------------------------------
"-----------ALV1的加图标事件----------
"-------------------------------------
"1 定义ALV1的事件

CLASS LCL_EVENT_RECEIVER2 DEFINITION.
  PUBLIC SECTION.
    METHODS  HANDLE_TOOLBAR
      FOR EVENT TOOLBAR
      OF CL_GUI_ALV_GRID

      IMPORTING E_OBJECT  E_INTERACTIVE.
ENDCLASS.


"2 事件的执行方法
CLASS LCL_EVENT_RECEIVER2 IMPLEMENTATION.
  METHOD HANDLE_TOOLBAR.

    DATA LS_TOOLBAR TYPE STB_BUTTON.

    CLEAR LS_TOOLBAR.
    LS_TOOLBAR-BUTN_TYPE = 3.
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.



    CLEAR LS_TOOLBAR.
    LS_TOOLBAR-FUNCTION = 'MYSHEN'.
    LS_TOOLBAR-ICON = ICON_SET_STATE.
    LS_TOOLBAR-QUICKINFO = '审批确认'.
    LS_TOOLBAR-TEXT = '审批确认'.
    LS_TOOLBAR-DISABLED = ''.
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

    CLEAR LS_TOOLBAR.
    LS_TOOLBAR-FUNCTION = 'MYSCAN'.
    LS_TOOLBAR-ICON = ICON_STORNO.
    LS_TOOLBAR-QUICKINFO = '取消审批'.
    LS_TOOLBAR-TEXT = '取消审批'.
    LS_TOOLBAR-DISABLED = ''.
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.

    CLEAR LS_TOOLBAR.
    LS_TOOLBAR-FUNCTION = 'MYPRINT'.
    LS_TOOLBAR-ICON = ICON_PRINT.
    LS_TOOLBAR-QUICKINFO = '单据打印'.
    LS_TOOLBAR-TEXT = '单据打印'.
    LS_TOOLBAR-DISABLED = ''.
    APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.


  ENDMETHOD.
ENDCLASS.


"3 事件引用变量
DATA EVENT_RECEIVER2 TYPE REF TO LCL_EVENT_RECEIVER2.


"-------------------------------------
"-----------ALV1的加按钮响应事件------
"-------------------------------------
"1 定义ALV1的事件

CLASS LCL_EVENT_RECEIVER3 DEFINITION.
  PUBLIC SECTION.
    METHODS  HANDLE_COMMAND
      FOR EVENT USER_COMMAND
      OF CL_GUI_ALV_GRID

      IMPORTING E_UCOMM.
ENDCLASS.


"2 事件的执行方法
CLASS LCL_EVENT_RECEIVER3 IMPLEMENTATION.
  METHOD HANDLE_COMMAND.

    CASE E_UCOMM.

      WHEN 'MYSHEN'.
        PERFORM SHENFORM.

      WHEN 'MYSCAN'.
        PERFORM  SCANCELFORM .

      WHEN 'MYPRINT'.
        PERFORM  PPPFORM .

    ENDCASE.

  ENDMETHOD.
ENDCLASS.

"3 事件引用变量
DATA EVENT_RECEIVER3 TYPE REF TO LCL_EVENT_RECEIVER3.

"选择屏幕
SELECT-OPTIONS GS_BANFN FOR ZTMM006-BANFN.  "三包索赔单号


START-OF-SELECTION.

  SELECT * FROM ZTMM006 INTO CORRESPONDING FIELDS OF TABLE GT_ITAB WHERE BANFN IN GS_BANFN.
  "为第一个控件准备数据

  LOOP AT GT_ITAB INTO GS_ITAB.

    MOVE GS_ITAB-BANFN  TO GS_ITAB_HEAD-BANFN.
    MOVE GS_ITAB-BNFPO  TO GS_ITAB_HEAD-BNFPO.
    MOVE GS_ITAB-ZFLAG_MSG  TO GS_ITAB_HEAD-ZFLAG_MSG.
    MOVE GS_ITAB-ZFLAG_DATE  TO GS_ITAB_HEAD-ZFLAG_DATE.
    MOVE GS_ITAB-ZFLAG_TIME  TO GS_ITAB_HEAD-ZFLAG_TIME.
    APPEND GS_ITAB_HEAD TO GT_ITAB_HEAD.
    CLEAR GS_ITAB_HEAD.
    CLEAR GS_ITAB.

  ENDLOOP.

  SORT GT_ITAB_HEAD.
  DELETE ADJACENT DUPLICATES FROM GT_ITAB_HEAD.

  CALL  SCREEN 100.

*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'TOPS'.
*  SET TITLEBAR 'xxx'.

ENDMODULE.                 " STATUS_0100  OUTPUT

*&---------------------------------------------------------------------*
*&      Module  INIT_CON  OUTPUT
*&---------------------------------------------------------------------*
*       text 控件初始化模块
*----------------------------------------------------------------------*
MODULE INIT_CON OUTPUT.


  "---------第一个ALV控件-----------------
  IF CON1_REF IS INITIAL.

    DATA GS_LAYOUT1 TYPE LVC_S_LAYO.

    GS_LAYOUT1-CWIDTH_OPT = 'X'.
*    GS_LAYOUT1-GRID_TITLE = '三包索赔单'.
    GS_LAYOUT1-GRID_TITLE = '采购申请传输日志'.
    GS_LAYOUT1-SEL_MODE = 'B'.
    GS_LAYOUT1-ZEBRA = 'X'.


    DATA GT_FIELDCAT TYPE LVC_T_FCAT.
    DATA GS_FIELDCAT TYPE LVC_S_FCAT.

    GS_FIELDCAT-COL_POS   = 1. GS_FIELDCAT-FIELDNAME = 'BOX'.          GS_FIELDCAT-CHECKBOX = 'X'.    GS_FIELDCAT-HOTSPOT = 'X'.       APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
    GS_FIELDCAT-COL_POS   = 2. GS_FIELDCAT-FIELDNAME = 'BANFN'.        GS_FIELDCAT-COLTEXT = 'PR'.      APPEND GS_FIELDCAT TO GT_FIELDCAT. CLEAR GS_FIELDCAT.
    GS_FIELDCAT-COL_POS   = 3. GS_FIELDCAT-FIELDNAME = 'BNFPO'.        GS_FIELDCAT-COLTEXT = 'PRNO'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
    GS_FIELDCAT-COL_POS   = 4. GS_FIELDCAT-FIELDNAME = 'ZFLAG_MSG'.        GS_FIELDCAT-COLTEXT = 'MESSAGE'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
    GS_FIELDCAT-COL_POS   = 5. GS_FIELDCAT-FIELDNAME = 'ZFLAG_DATE'.        GS_FIELDCAT-COLTEXT = 'DATE'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.
    GS_FIELDCAT-COL_POS   = 6. GS_FIELDCAT-FIELDNAME = 'ZFLAG_TIME'.        GS_FIELDCAT-COLTEXT = 'TIME'.        APPEND GS_FIELDCAT TO GT_FIELDCAT.CLEAR GS_FIELDCAT.

    CREATE OBJECT CON1_REF
      EXPORTING
        CONTAINER_NAME = 'CON1'.

    CREATE OBJECT G_GRID1
      EXPORTING
        I_PARENT = CON1_REF.


    "4 注册事件句柄,图标的还必须加在这里,不然不行
    CREATE OBJECT EVENT_RECEIVER2.
    SET HANDLER EVENT_RECEIVER2->HANDLE_TOOLBAR FOR G_GRID1.

    "4 注册事件句柄
    CREATE OBJECT EVENT_RECEIVER.
    SET HANDLER EVENT_RECEIVER->HANDLE_CLICK FOR G_GRID1.

    "4 注册事件句柄
    CREATE OBJECT EVENT_RECEIVER3.
    SET HANDLER EVENT_RECEIVER3->HANDLE_COMMAND FOR G_GRID1.


    CALL METHOD G_GRID1->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT       = GS_LAYOUT1
      CHANGING
        IT_OUTTAB       = GT_ITAB_HEAD
        IT_FIELDCATALOG = GT_FIELDCAT.

  ENDIF.

  "---------第二个ALV控件-----------------
  IF CON2_REF IS INITIAL.

    DATA GS_LAYOUT2 TYPE LVC_S_LAYO.

    GS_LAYOUT2-CWIDTH_OPT = 'X'.
    GS_LAYOUT2-GRID_TITLE = '采购申请详细项目'.
    GS_LAYOUT2-SEL_MODE = 'B'.
    GS_LAYOUT2-ZEBRA = 'X'.

    DATA GT_FIELDCAT2 TYPE LVC_T_FCAT.
    DATA GS_FIELDCAT2 TYPE LVC_S_FCAT.

    GS_FIELDCAT2-COL_POS   = 1. GS_FIELDCAT2-FIELDNAME = 'BOX'.          GS_FIELDCAT2-CHECKBOX = 'X'.    GS_FIELDCAT2-HOTSPOT = 'X'.       APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 2. GS_FIELDCAT2-FIELDNAME = 'BANFN'.        GS_FIELDCAT2-COLTEXT = 'PR号'.      APPEND GS_FIELDCAT2 TO GT_FIELDCAT2. CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 3. GS_FIELDCAT2-FIELDNAME = 'BNFPO'.        GS_FIELDCAT2-COLTEXT = 'PR行号'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 4. GS_FIELDCAT2-FIELDNAME = 'BSART'.        GS_FIELDCAT2-COLTEXT = '类型'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 5. GS_FIELDCAT2-FIELDNAME = 'BSTYP'.        GS_FIELDCAT2-COLTEXT = '型号'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 6. GS_FIELDCAT2-FIELDNAME = 'EKGRP'.        GS_FIELDCAT2-COLTEXT = '采购组'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 7. GS_FIELDCAT2-FIELDNAME = 'ERNAM'.        GS_FIELDCAT2-COLTEXT = '创建人'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 7. GS_FIELDCAT2-FIELDNAME = 'ERDAT'.        GS_FIELDCAT2-COLTEXT = '创建时间'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 8. GS_FIELDCAT2-FIELDNAME = 'MATNR'.        GS_FIELDCAT2-COLTEXT = '物料编码 '.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 9. GS_FIELDCAT2-FIELDNAME = 'TXZ01'.        GS_FIELDCAT2-COLTEXT = '物料描述'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.
    GS_FIELDCAT2-COL_POS   = 10. GS_FIELDCAT2-FIELDNAME = 'WERKS'.        GS_FIELDCAT2-COLTEXT = '工厂'.        APPEND GS_FIELDCAT2 TO GT_FIELDCAT2.CLEAR GS_FIELDCAT2.

    CREATE OBJECT CON2_REF
      EXPORTING
        CONTAINER_NAME = 'CON2'.

    CREATE OBJECT G_GRID2
      EXPORTING
        I_PARENT = CON2_REF.


    CALL METHOD G_GRID2->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
        IS_LAYOUT       = GS_LAYOUT2
      CHANGING
        IT_OUTTAB       = GT_PRINT[]
        IT_FIELDCATALOG = GT_FIELDCAT2.


  ENDIF.

ENDMODULE.                 " INIT_CON  OUTPUT


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text 这个用户命令,是最上面的 【标准工具条】上的按钮
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.


  CASE SY-UCOMM.

    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN 'SCAN'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.

  ENDCASE.


ENDMODULE.                 " USER_COMMAND_0100  INPUT

"------------取消审批的FORM--------------------
FORM SCANCELFORM .
  MESSAGE '你点了取消审批按钮' TYPE 'I'.
ENDFORM.
"------------SHENFORM的FORM--------------------
FORM SHENFORM .
  MESSAGE '你点了审批按钮' TYPE 'I'.
ENDFORM .

"-------------打印FORM-----------------
FORM PPPFORM .
  MESSAGE '你点了打印按钮' TYPE 'I'.
ENDFORM.

 

 

 

 如果用不到新加的按钮  可以换成全选或者取消全选。

 

标签:ITAB,GT,界面,FIELDCAT,双屏,OOALV,GS,FIELDCAT2,TOOLBAR
来源: https://www.cnblogs.com/BruceKing/p/16489250.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有