使用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.