OOALV 分割屏幕

作者:斌将军 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

1、功能说明

需要开发一个报表,分为上下两个部分,下边需要再分割为左右两个部分,点击上边部分的行,下边两个报表信息发生变化。

效果如下:

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

**2.1** **、数据查询**

分别查询MARA、MARC、MAKT三张表,存放在三个内表中,分别放在1、2、3界面,并调用9000屏幕

9000屏幕中逻辑流

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

**2.2、创建容器**

FRM_CREATE_CONTAINER_9000

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

创建容器对象方法:

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

**2.3、分割容器**

将创建的容器分割为两行一列

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

获得拆分后的上半部分(第一行,第一列),并设置宽度

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

获得拆分后的下半部分(第二行,第一列),将其再次拆分为一行两列,即左右两个部分

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

同样获取拆分后的左半部分(第一行第一列),设置宽度,同理设置右半部分

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

创建ALV对象

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

其他逻辑与创建普通OOALV一致,在最终显示时,分别调用三个ALV对象的SET_TABLE_FOR_FIRST_DISPLAY方法即可

**2.4、双击事件**

点击一行时,查询这行物料对应的MARC和MAKT表中的数据,并展示在2、3区域内

**2.5、方法说明**

在实现容器时,常用两种实现方式,一种是在屏幕中画区域,一种是只创建屏幕。

** 2.5.1需要画区域时,定义容器为: **

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

创建对象方法:

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

** 2.5.2不需要画区域时,定义容器为: **

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

创建容器对象方法:

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

当分割屏幕是,把容器对象作为参数传入

OOALV 分割屏幕 - 封面图
OOALV 分割屏幕 - 封面图

此处传入的容器参数PARENT参照CL_GUI_CONTAINER类,所以传入的容器对象可以是G_CONTAINER_9000,也可以是G_CONTAINER_9001,因为CL_GUI_CUSTOM_CONTAINER和CL_GUI_DOCKING_CONTAINER都是继承了CL_GUI_CONTAINER类。

个人倾向于不画区域的方法,最终展示的效果也会比较美观,文档源代码展示的是不画区域的做法

"-----------------------------------------@斌将军--------------------------------------------*&---------------------------------------------------------------------*REPORT ZTEST001.

*----------------------------------------------------------------------** 数据库表声明/Database table declaration*----------------------------------------------------------------------*TABLES:MARA.

*--------------------------------------------------------------------**内表定义*--------------------------------------------------------------------*TYPES: BEGIN OF TY_ALV, MATNR TYPE MARA-MATNR, "物料号 MTART TYPE MARA-MTART, "物料类型 MATKL TYPE MARA-MATKL, "物料组 MEINS TYPE MARA-MEINS, "基本计量单位

ZCHECK TYPE C, ICON TYPE CHAR4, MSG TYPE CHAR50, END OF TY_ALV.

TYPES:BEGIN OF TY_MARC, MATNR TYPE MARC-MATNR, "物料号 WERKS TYPE MARC-WERKS, "工厂 BWTTY TYPE MARC-BWTTY, "评估类别

ZCHECK TYPE C, END OF TY_MARC.

TYPES:BEGIN OF TY_MAKT, MATNR TYPE MAKT-MATNR, "物料号 SPRAS TYPE MAKT-SPRAS, "语言代码 MAKTX TYPE MAKT-MAKTX, "物料描述

ZCHECK TYPE C, END OF TY_MAKT.*----------------------------------------------------------------------** 全局变量定义/Global variable definition*----------------------------------------------------------------------*DATA:GT_ALV1 TYPE STANDARD TABLE OF TY_ALV, GS_ALV1 TYPE TY_ALV, GT_MAKT TYPE STANDARD TABLE OF TY_MAKT, GS_MAKT TYPE TY_MAKT, GT_MARC TYPE STANDARD TABLE OF TY_MARC, GS_MARC TYPE TY_MARC, LT_ALV2 TYPE STANDARD TABLE OF TY_MARC, LS_ALV2 TYPE TY_MARC, LT_ALV3 TYPE STANDARD TABLE OF TY_MAKT, LS_ALV3 TYPE TY_MAKT.

"创建ALV屏幕DATA: G_GRID_T TYPE REF TO CL_GUI_ALV_GRID, "顶部 G_GRID_L TYPE REF TO CL_GUI_ALV_GRID, "底部——左部 G_GRID_R TYPE REF TO CL_GUI_ALV_GRID, "底部——右部 G_CONTAINER_9000 TYPE REF TO CL_GUI_DOCKING_CONTAINER, "ALV容器 不用画屏幕容器 cl_gui_custom_container, "ALV container容器 需要画屏幕容器 G_SPLITTER TYPE REF TO CL_GUI_SPLITTER_CONTAINER, G_SPLITTER1 TYPE REF TO CL_GUI_SPLITTER_CONTAINER, G_CONTAINER_T TYPE REF TO CL_GUI_CONTAINER, "顶部 G_CONTAINER_B TYPE REF TO CL_GUI_CONTAINER, "底部 G_CONTAINER_L TYPE REF TO CL_GUI_CONTAINER, "底部——左部 G_CONTAINER_R TYPE REF TO CL_GUI_CONTAINER, "底部——右部 GT_EXCLUDE_9000 TYPE UI_FUNCTIONS, " 用于去掉不要的菜单栏 GT_FIELDCAT_T TYPE LVC_T_FCAT, "顶部字段 GT_FIELDCAT_L TYPE LVC_T_FCAT, "底部——左部字段 GT_FIELDCAT_R TYPE LVC_T_FCAT, "底部——右部字段 GS_LAYOUT_L TYPE LVC_S_LAYO, "底部——左部布局 GS_LAYOUT_R TYPE LVC_S_LAYO, "底部——右部布局 GS_VARIANT_T TYPE DISVARIANT, GS_VARIANT_L TYPE DISVARIANT, GS_VARIANT_R TYPE DISVARIANT, GT_SORT TYPE LVC_T_SORT, "用于排序 GS_SORT TYPE LVC_S_SORT, "用于排序 GT_FILT TYPE LVC_T_FILT.

DATA:GV_9000 TYPE SCRFNAME VALUE 'Z9000', "GV_TABLE 是屏幕中定义的控件 R_UCOMM LIKE SY-UCOMM, OK_CODE TYPE SY-UCOMM, SAVE_CODE TYPE SY-UCOMM.

*&---------------------------------------------------------------------**& 字段串定义/Field-symbols **&---------------------------------------------------------------------*FIELD-SYMBOLS:<FS_ALV1> TYPE TY_ALV.

*--------------------------------------------------------------------**ALV参数声明*--------------------------------------------------------------------*DATA: GT_FIELDCAT TYPE LVC_T_FCAT, "字段目录内表 GS_FIELDCAT TYPE LVC_S_FCAT, "字段目录工作区 GS_LAYOUT TYPE LVC_S_LAYO. "用于定义ALV表单的相关格式、属性

*--------------------------------------------------------------------**定义选择屏幕参数*--------------------------------------------------------------------*SELECTION-SCREEN BEGIN OF BLOCK BLK0 WITH FRAME.SELECT-OPTIONS: S_MATNR FOR MARA-MATNR. "物料SELECT-OPTIONS: S_ERSDA FOR MARA-ERSDA DEFAULT '20190801' TO '20190831'. "创建日期SELECTION-SCREEN END OF BLOCK BLK0.*&-------------------------

...

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「OOALV分割屏幕.md」整理生成,仅用于内部技术分享与学习交流。