在同一屏幕创建一个上下分割样式的ALV

使用CL_GUI_SPLITTER_CONTAINER分割容器,OOALV的方式实现

创建屏幕

在这里插入图片描述

将屏幕分成上下两个部分

定义类型和变量

声明类型

*----------------------------------------------------------------------*
* 声明类型
*----------------------------------------------------------------------*
*&---ALV显示
TYPES:BEGIN OF TY_ALV,
        SEL    TYPE C,                               " ALV 选择框
        WERKS  TYPE AUFK-WERKS, "工厂
        ZXMH   TYPE MARA-ZXMH,  "项目号
        XMNGA  TYPE AFVV-XMNGA, "工序报废数量
        MEINS  TYPE RESB-MEINS, "单位
        GEWEI  TYPE MARA-GEWEI, "重量单位
        LLBFZL TYPE MARA-BRGEW, "理论报废重量
        SJCLZL TYPE MARA-BRGEW, "实际超领重量 ADD BY LHY 20250324
        SJTLZL TYPE MARA-BRGEW, "理论退料重量
        FLJKZL TYPE MARA-BRGEW, "Z91+Z92缴库重量
      END OF TY_ALV.

TYPES:BEGIN OF TY_ALV_DOWN, "结构类型
        WERKS     TYPE AUFK-WERKS, "工厂
        ZXMH      TYPE MARA-ZXMH,  "项目号
        AUFNR     TYPE AUFK-AUFNR, "生产订单
        MATNR     TYPE AFPO-MATNR, "工单物料
        MAKTX     TYPE MAKT-MAKTX, "物料描述
        PSMNG     TYPE AFPO-PSMNG, "工单数量
        VORNR     TYPE RESB-VORNR, "组件扣料工序
        MATKL     TYPE RESB-MATKL, "组件物料组
        SUB_MATNR TYPE RESB-MATNR, "组件物料
        SUB_MAKTX TYPE MAKT-MAKTX, "组件物料描述
        MEINS     TYPE RESB-MEINS, "组件单位
        ZJBZZL    TYPE MARA-BRGEW, "组件标准重量
        BDMNG     TYPE RESB-BDMNG, "组件需求数量
        ZJBFSL    TYPE MARA-BRGEW, "组件理论报废数量
        LLBFZL    TYPE MARA-BRGEW, "理论报废重量
      END OF TY_ALV_DOWN.

定义变量

*----------------------------------------------------------------------*
* 变量定义
*----------------------------------------------------------------------*
*&--- ALV 显示变量
DATA: GT_ALV TYPE TABLE OF TY_ALV,
      GS_ALV TYPE TY_ALV.
DATA:GV_SUBRC TYPE SY-SUBRC.

DATA:GT_ALV_DOWN TYPE TABLE OF TY_ALV_DOWN, "ADD BY LHY 20250324
     GS_ALV_DOWN TYPE TY_ALV_DOWN. "ADD BY LHY 20250324
DATA:GT_EXCLUDE TYPE UI_FUNCTIONS.

定义容器和ALV表格

*&---定义ALV显示的字段列及其描述等属性
DATA:GT_FIELDCAT TYPE  LVC_T_FCAT,
     GS_FIELDCAT TYPE  LVC_S_FCAT,
     GS_LAYOUT   TYPE LVC_S_LAYO.
DATA: GT_EVENTS TYPE SLIS_T_EVENT  .
DATA:GS_EVENTS TYPE LINE OF SLIS_T_EVENT.
DATA G_GRID        TYPE REF TO CL_GUI_ALV_GRID.

*--------Begin-------- Add By LiuHongyu 25.03.2025 13:54:57-----------
DATA: G_SPLITTER_CONTAINER TYPE REF TO CL_GUI_SPLITTER_CONTAINER. "容器
DATA: G_GUI_ALV_UP         TYPE REF TO CL_GUI_ALV_GRID.
DATA: G_GUI_ALV_DOWN       TYPE REF TO CL_GUI_ALV_GRID.
DATA: G_CONTAINER_UP     TYPE REF TO CL_GUI_CONTAINER.
DATA: G_CONTAINER_DOWN   TYPE REF TO CL_GUI_CONTAINER.
DATA: GV_VARIANT TYPE DISVARIANT. "屏幕变式
DATA:GT_FIELDCAT_DOWN TYPE LVC_T_FCAT,
     GS_FIELDCAT_DOWN TYPE LVC_S_FCAT.
* -------- End -------------------------------------------------------

屏幕逻辑流

在这里插入图片描述

STATUS_9000模块

*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
  SET PF-STATUS 'STATUS_9000'.
  SET TITLEBAR 'TITLE_9000' WITH '生产理论与实际报废对比表'.
ENDMODULE.

SET_SCREEN_ALV模块

*&---------------------------------------------------------------------*
*& Module SET_SCREEN_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE SET_SCREEN_ALV OUTPUT.
  CHECK G_SPLITTER_CONTAINER IS INITIAL.
  PERFORM INIT_LAYOUT.       " 设置ALV输出格式
  PERFORM INIT_FIELDCAT  .   " 设置ALV输出字段
  PERFORM INIT_FIELDCAT_DOWN.    " 设置ALV输出字段
  PERFORM FRM_EXCLUDE_TB_FUNCTIONS.
  GV_VARIANT-REPORT = SY-REPID.
  CREATE OBJECT G_SPLITTER_CONTAINER
    EXPORTING
      PARENT  = CL_GUI_CONTAINER=>SCREEN0
      ROWS    = 2
      COlUMNS = 1.

  "第一个屏幕高度
  CALL METHOD G_SPLITTER_CONTAINER->SET_ROW_HEIGHT
    EXPORTING
      ID     = 1
      HEIGHT = 35.

  "第一个容器放在第一行第一列
  CALL METHOD G_SPLITTER_CONTAINER->GET_CONTAINER
    EXPORTING
      ROW       = 1
      COLUMN    = 1
    RECEIVING
      CONTAINER = G_CONTAINER_UP.

  "第一个屏幕高度
  CALL METHOD G_SPLITTER_CONTAINER->SET_ROW_HEIGHT
    EXPORTING
      ID     = 2
      HEIGHT = 65.

  "第二个容器放在第二行第一列
  CALL METHOD G_SPLITTER_CONTAINER->GET_CONTAINER
    EXPORTING
      ROW       = 2
      COLUMN    = 1
    RECEIVING
      CONTAINER = G_CONTAINER_DOWN.

  " 创建alv对象
  CREATE OBJECT G_GUI_ALV_UP
    EXPORTING
      I_PARENT = G_CONTAINER_UP.

  CREATE OBJECT G_GUI_ALV_DOWN
    EXPORTING
      I_PARENT = G_CONTAINER_DOWN.

  CALL METHOD G_GUI_ALV_UP->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT           = GV_VARIANT
      IS_LAYOUT            = GS_LAYOUT
      IT_TOOLBAR_EXCLUDING = GT_EXCLUDE[]
      I_SAVE               = 'A'
      I_DEFAULT            = 'X'
    CHANGING
      IT_OUTTAB            = GT_ALV
      IT_FIELDCATALOG      = GT_FIELDCAT.

  CALL METHOD G_GUI_ALV_DOWN->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT           = GV_VARIANT
      IS_LAYOUT            = GS_LAYOUT
      IT_TOOLBAR_EXCLUDING = GT_EXCLUDE[]
      I_SAVE               = 'A'
      I_DEFAULT            = 'X'
    CHANGING
      IT_OUTTAB            = GT_ALV_DOWN
      IT_FIELDCATALOG      = GT_FIELDCAT_DOWN.

ENDMODULE.
SET_SCREEN_ALV模块的FORM子例程

FORM INIT_LAYOUT .
  CLEAR GS_LAYOUT.
  GS_LAYOUT-ZEBRA      = 'X' .    " 斑马线
  GS_LAYOUT-CWIDTH_OPT = 'X' .    " 自动调整ALV列宽
  GS_LAYOUT-BOX_FNAME  = 'SEL'.   " 选择框
*  gs_layout-stylefname = 'STYLE'."单元格输入控制
ENDFORM.

FORM INIT_FIELDCAT .

  CLEAR GT_FIELDCAT.
  PERFORM ADD_FIELDCAT TABLES  GT_FIELDCAT
     USING :
      'WERKS'       '工厂'                   'X' '4'  ''  ''  ''  'MARC'  'WERKS',
      'ZXMH'       '项目号'                   '' '8'  ''  ''  ''  'AUFK'  'ZXMH',
      'XMNGA'       '报废数量'                   '' '20'  ''  ''  ''  'AFVV'  'XMNGA',
      'LLBFZL'      '理论报废重量'                   '' '20'  ''  ''  ''  'RESB'  'BDMNG',
      'SJCLZL'      '实际超领重量'                   '' '20'  ''  ''  ''  'RESB'  'BDMNG', " ADD BY LHY 20250324
     " 'SJTLZL'      '实际退料重量'                   '' '20'  ''  ''  ''  'RESB'  'BDMNG', "DELETE BY LHY 20250324
      'FLJKZL'      '实际报废重量'                   '' '20'  ''  ''  ''  'RESB'  'BDMNG',
      'MEINS'       '单位'                   '' '20'  ''  ''  ''  'RESB'  'MEINS'.

ENDFORM.

FORM ADD_FIELDCAT TABLES PT_FIELDCAT USING P1  P2 P3 P4 P5 P6 P7 P8 P9 .
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME    =  P1.
  GS_FIELDCAT-SCRTEXT_S =
  GS_FIELDCAT-SCRTEXT_M =
  GS_FIELDCAT-SCRTEXT_L = GS_FIELDCAT-COLTEXT      =  P2.
  GS_FIELDCAT-KEY          =  P3.
  GS_FIELDCAT-OUTPUTLEN    =  P4.
  GS_FIELDCAT-NO_OUT       =  P5.
  GS_FIELDCAT-EDIT         =  P6.
  GS_FIELDCAT-CHECKBOX     =  P7.
  GS_FIELDCAT-REF_TABLE    =  P8.  "REF_TABNAME
  GS_FIELDCAT-REF_FIELD    =  P9.  "REF_FIELDNAME
  APPEND GS_FIELDCAT TO PT_FIELDCAT.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form INIT_FIELDCAT_DOWN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM INIT_FIELDCAT_DOWN .

  CLEAR GT_FIELDCAT_DOWN.
  PERFORM ADD_FIELDCAT TABLES GT_FIELDCAT_DOWN
    USING:
      'WERKS'     '工厂'  'X' '4'  ''  ''  ''  'MARC'  'WERKS',
      'ZXMH'      '项目号' '' '8'  ''  ''  ''  'AUFK'  'ZXMH',
      'AUFNR'     '生产订单'  '' ''  '' '' ''  'AUFK'  'AUFNR',
      'MATNR'     '工单物料'  '' ''  '' '' ''  'AFPO'  'MATNR',
      'MAKTX'     '物料描述'  '' ''  '' '' ''  'MAKT'  'MAKTX',
      'PSMNG'     '工单数量'  '' ''  '' '' ''  'AFPO'  'PSMNG',
      'VORNR'     '组件扣料工序'  '' ''  '' '' ''  'RESB'  'VORNR',
      'MATKL'     '组件物料组'  '' ''  '' '' ''  'RESB'  'MATKL',
      'SUB_MATNR' '组件物料'  '' ''  '' '' ''  'RESB'  'MATNR',
      'SUB_MAKTX' '组件物料描述'  '' ''  '' '' ''  'MAKT'  'MAKTX',
      'MEINS'     '组件单位'  '' ''  '' '' ''  'RESB'  'MEINS',
      'ZJBZZL'    '组件标准重量'  '' ''  ''  ''  ''  'MARA'  'BRGEW',
      'BDMNG'     '组件需求数量'  '' ''  '' '' ''  'RESB'  'BDMNG',
      'ZJBFSL'    '组件理论报废数量'  '' ''  '' '' ''  'MARA'  'BRGEW',
      'LLBFZL'    '理论报废重量'  '' ''  ''  ''  ''  'MARA'  'BRGEW'.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form FRM_EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_EXCLUDE_TB_FUNCTIONS .
  DATA LS_EXCLUDE TYPE UI_FUNC.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_CRBATCH.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIND.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_VIEW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_GRAPH.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REFRESH.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
  APPEND  LS_EXCLUDE TO GT_EXCLUDE.
ENDFORM.

USER_COMMAND_9000模块

MODULE USER_COMMAND_9000 INPUT.
  CASE SY-UCOMM.
    WHEN '&F03' OR '&F12' OR '&F15'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值