OOALV 分割屏幕
1功能说明
需要开发一个报表,分为上下两个部分,下边需要再分割为左右两个部分,点击上边部分的行,下边两个报表信息发生变化。
效果如下:

2代码实现
1、数据查询
分别查询MARA、MARC、MAKT三张表,存放在三个内表中,分别放在1、2、3界面,并调用9000屏幕
9000屏幕中逻辑流

2、创建容器
FRM_CREATE_CONTAINER_9000

创建容器对象方法:

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

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

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

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

创建ALV对象

其他逻辑与创建普通OOALV一致,在最终显示时,分别调用三个ALV对象的SET_TABLE_FOR_FIRST_DISPLAY方法即可。
4、双击事件
点击一行时,查询这行物料对应的MARC和MAKT表中的数据,并展示在2、3区域内
5、方法说明
在实现容器时,常用两种实现方式,一种是在屏幕中画区域,一种是只创建屏幕。
① 需要画区域时,定义容器为:

创建对象方法:

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

创建容器对象方法:

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

此处传入的容器参数PARENT参照CL_GUI_CONTAINER类,所以传入的容器对象可以是G_CONTAINER_9000,也可以是G_CONTAINER_9001,因为CL_GUI_CUSTOM_CONTAINER和CL_GUI_DOCKING_CONTAINER都是继承了CL_GUI_CONTAINER类。
个人倾向于不画区域的方法,最终展示的效果也会比较美观,文档源代码展示的是不画区域的做法
3源代码
"-----------------------------------------@斌将军--------------------------------------------
*&---------------------------------------------------------------------*
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.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化 *
*&---------------------------------------------------------------------*
INITIALIZATION. CLASS ALV_EVENT_9000 DEFINITION DEFERRED." CLASS ALV_EVENT_9000 DEFINITION. PUBLIC SECTION.
METHODS HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID"双击事件
IMPORTING E_ROW E_COLUMN ES_ROW_NO. METHODS HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID"用户按钮事件
IMPORTING E_UCOMM. METHODS HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID"工具条事件
IMPORTING E_OBJECT E_INTERACTIVE.
ENDCLASS. "alv_event_9000 DEFINITION *----------------------------------------------------------------------*
* CLASS BELOW_ALV_EVENT IMPLEMENTATION 定义的事件类对应的事件响应模块
*----------------------------------------------------------------------*
CLASS ALV_EVENT_9000 IMPLEMENTATION. METHOD HANDLE_DOUBLE_CLICK . "双击事件
PERFORM FRM_DOUBLE_CLICK USING E_ROW E_COLUMN ES_ROW_NO.
ENDMETHOD. "HANDLE_USER_COMMAND METHOD HANDLE_USER_COMMAND. "用户按钮事件
PERFORM FRM_HANDLE_USER_COMMAND9000 USING E_UCOMM.
ENDMETHOD. "handle_hotspot_click METHOD HANDLE_TOOLBAR. "工具条事件
PERFORM FRM_HANDLE_TOOLBAR9000 USING E_OBJECT E_INTERACTIVE."设置工具条图标
ENDMETHOD. "HANDLE_DOUBLE_CLICK ENDCLASS. "alv_event_9000 IMPLEMENTATION AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕 *
*&---------------------------------------------------------------------*
START-OF-SELECTION. "获取数据
PERFORM FRM_GET_DATA. *&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
FORM FRM_LAYOUT.
CLEAR:GS_LAYOUT,GS_LAYOUT_L,GS_LAYOUT_R.
GS_LAYOUT-GRID_TITLE = '第1个界面'. "标题
GS_LAYOUT-CWIDTH_OPT = 'A'. "优化列宽
GS_LAYOUT-ZEBRA = 'X'. "斑马线
GS_LAYOUT-SEL_MODE = 'A'. "设置行模式"
GS_LAYOUT-BOX_FNAME = 'ZCHECK'."选择行控制 GS_LAYOUT_L = GS_LAYOUT_R = GS_LAYOUT. GS_LAYOUT_L-GRID_TITLE = '第2个界面'. "标题
GS_LAYOUT_R-GRID_TITLE = '第3个界面'. "标题
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_GET_DATA3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA. SELECT
MATNR"物料号
MTART"物料类型
MATKL"物料组
MEINS"基本计量单位
FROM MARA
INTO TABLE GT_ALV1
WHERE MATNR IN S_MATNR
AND ERSDA IN S_ERSDA. IF GT_ALV1 IS NOT INITIAL.
SELECT
MATNR"物料号
WERKS"工厂
BWTTY"评估类别
FROM MARC
INTO TABLE GT_MARC
FOR ALL ENTRIES IN GT_ALV1
WHERE MATNR = GT_ALV1-MATNR. SELECT
MATNR"物料号
SPRAS"语言代码
MAKTX"物料描述
FROM MAKT
INTO TABLE GT_MAKT
FOR ALL ENTRIES IN GT_ALV1
WHERE MATNR = GT_ALV1-MATNR.
ENDIF. IF GT_ALV1 IS INITIAL.
MESSAGE '系统中无相关数据' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ELSE.
CALL SCREEN 9000.
ENDIF. ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT3
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_FIELDCAT4.
*&---alv 表头宏
DEFINE INIT_FIELDCAT.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1. " 字段技术名称
gs_fieldcat-coltext = &2. " 显示名称
gs_fieldcat-ref_table = &3. " 参照表,标准功能实现例如搜索帮助
gs_fieldcat-ref_field = &4. " 参照表字段,标准功能实现例如搜索帮助
gs_fieldcat-no_init_ch = &5.
gs_fieldcat-EDIT = &6. " 是否可以编辑
gs_fieldcat-KEY = &7. "
gs_fieldcat-HOTSPOT = &8. "
gs_fieldcat-outputlen = &9. "
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION. REFRESH:GT_FIELDCAT.
INIT_FIELDCAT 'MATNR' '物料号' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'MTART' '物料类型' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'MATKL' '物料组' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'MEINS' '基本计量单位' '' '' '' '' '' '' '' .
GT_FIELDCAT_T = GT_FIELDCAT. REFRESH:GT_FIELDCAT.
INIT_FIELDCAT 'MATNR' '物料号' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'WERKS' '工厂' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'BWTTY' '评估类别' '' '' '' '' '' '' '' .
GT_FIELDCAT_L = GT_FIELDCAT. REFRESH:GT_FIELDCAT.
INIT_FIELDCAT 'MATNR' '物料号' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'SPRAS' '语言代码' '' '' '' '' '' '' '' .
INIT_FIELDCAT 'MAKTX' '物料描述' '' '' '' '' '' '' '' .
GT_FIELDCAT_R = GT_FIELDCAT. ENDFORM. FORM FRM_ENTER_DATA.
MESSAGE '调用方法成功' TYPE 'S'.
ENDFORM. MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'STANDARD'.
ENDMODULE. MODULE DISPLAY_ALV_9000 OUTPUT.
IF G_CONTAINER_9000 IS NOT BOUND.
PERFORM FRM_CREATE_CONTAINER_9000.
* PERFORM FRM_ALV_SORT_9000.
PERFORM FRM_FIELDCAT4.
PERFORM FRM_LAYOUT.
PERFORM FRM_ALV_BTN_EXCLUDE_9000.
PERFORM FRM_ALV_EVENT_9000.
PERFORM FRM_ALV_DISPLAY_9000.
ELSE.
PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_T.
PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_L.
PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_R.
ENDIF.
ENDMODULE. MODULE USER_COMMAND_9000 INPUT.
DATA: LT_ROW TYPE LVC_T_ROW,
LT_ROID TYPE LVC_T_ROID,
LS_ROW TYPE LVC_S_ROW. SAVE_CODE = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_CODE.
WHEN '&BACK'."设置功能键返回按钮单击事件
LEAVE TO SCREEN 0.
WHEN '&EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. *&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER_9000
*& 创建容器
*&---------------------------------------------------------------------*
FORM FRM_CREATE_CONTAINER_9000.
* 创建 容器 CREATE OBJECT G_CONTAINER_9000
EXPORTING
REPID = SY-REPID
DYNNR = '9000'
* side = cl_gui_docking_container=>dock_at_right ”ALV贴屏幕右边,从屏幕右边开始算宽度
SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_TOP "ALV贴屏幕左边,从左边算屏幕宽度,
EXTENSION = 1000 "屏幕宽度
* ratio = 95 "屏幕比例 小于5大于95会报cntl_error异常
STYLE = CL_GUI_CONTROL=>WS_CHILD "可选参数,设置ALV是否可用手动拖动大小
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
OTHERS = 6. IF SY-SUBRC <> 0.
MESSAGE S001(00) WITH '屏幕初始化失败'.
LEAVE LIST-PROCESSING.
ENDIF. "拆分成2行1列部分
CREATE OBJECT G_SPLITTER
EXPORTING
PARENT = G_CONTAINER_9000
ROWS = 2
COLUMNS = 1. "一行一列
CALL METHOD G_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = G_CONTAINER_T. CALL METHOD G_SPLITTER->SET_COLUMN_WIDTH
EXPORTING
ID = 1
WIDTH = 100. "二行一列*
CALL METHOD G_SPLITTER->GET_CONTAINER
EXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = G_CONTAINER_B. "拆分成一行二列部分*
CREATE OBJECT G_SPLITTER1
EXPORTING
PARENT = G_CONTAINER_B
ROWS = 1
COLUMNS = 2. "一行一列*
CALL METHOD G_SPLITTER1->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = G_CONTAINER_L. CALL METHOD G_SPLITTER1->SET_COLUMN_WIDTH
EXPORTING
ID = 2
WIDTH = 50. "*一行二列*
CALL METHOD G_SPLITTER1->GET_CONTAINER
EXPORTING
ROW = 1
COLUMN = 2
RECEIVING
CONTAINER = G_CONTAINER_R. CALL METHOD G_SPLITTER1->SET_COLUMN_WIDTH
EXPORTING
ID = 3
WIDTH = 50. CREATE OBJECT G_GRID_T"上半部分
EXPORTING
I_PARENT = G_CONTAINER_T. CREATE OBJECT G_GRID_L"左半部分
EXPORTING
I_PARENT = G_CONTAINER_L. CREATE OBJECT G_GRID_R"右半部分
EXPORTING
I_PARENT = G_CONTAINER_R.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_ALV_BTN_EXCLUDE_9000
*& 排除不用的按钮
*&---------------------------------------------------------------------*
FORM FRM_ALV_BTN_EXCLUDE_9000. DATA: LS_EXCLUDE TYPE UI_FUNC.
REFRESH GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_DETAIL.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. CLEAR LS_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REFRESH.
APPEND LS_EXCLUDE TO GT_EXCLUDE_9000. ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_ALV_EVENT_9000
*&---------------------------------------------------------------------*
FORM FRM_ALV_EVENT_9000.
DATA: LR_EVENT_HANDLER TYPE REF TO ALV_EVENT_9000. * CALL METHOD G_GRID_T->register_edit_event "注册回车事件
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
*
* CALL METHOD g_grid_9000->register_edit_event "注册失去鼠标事件
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_modified. IF LR_EVENT_HANDLER IS INITIAL.
CREATE OBJECT LR_EVENT_HANDLER.
ENDIF. * SET HANDLER LR_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID_9000. "数据改动事件
SET HANDLER LR_EVENT_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID_T.
* SET HANDLER LR_EVENT_HANDLER->HANDLE_ON_F4 FOR G_GRID_9000.
* SET HANDLER LR_EVENT_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID_9000 .
SET HANDLER LR_EVENT_HANDLER->HANDLE_TOOLBAR FOR G_GRID_T. "工具栏事件
SET HANDLER LR_EVENT_HANDLER->HANDLE_USER_COMMAND FOR G_GRID_T. "用户命令事件 ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY_9000
*&---------------------------------------------------------------------*
FORM FRM_ALV_DISPLAY_9000.
CALL METHOD G_GRID_T->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
IS_VARIANT = GS_VARIANT_T
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE_9000
I_SAVE = 'A'
I_DEFAULT = 'X' "允许定义默认布局
IS_LAYOUT = GS_LAYOUT
CHANGING
IT_OUTTAB = GT_ALV1
IT_FIELDCATALOG = GT_FIELDCAT_T
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF. CALL METHOD G_GRID_L->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
IS_VARIANT = GS_VARIANT_L
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE_9000
I_SAVE = 'A'
I_DEFAULT = 'X' "允许定义默认布局
IS_LAYOUT = GS_LAYOUT_L
* IS_PRINT = GS_PRINT_H
CHANGING
IT_OUTTAB = LT_ALV2
IT_FIELDCATALOG = GT_FIELDCAT_L
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF. CALL METHOD G_GRID_R->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_CONSISTENCY_CHECK = 'X'
IS_VARIANT = GS_VARIANT_R
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE_9000
I_SAVE = 'A'
I_DEFAULT = 'X' "允许定义默认布局
IS_LAYOUT = GS_LAYOUT_R
* IS_PRINT = GS_PRINT_H
CHANGING
IT_OUTTAB = LT_ALV3
IT_FIELDCATALOG = GT_FIELDCAT_R
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
ENDIF.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
FORM FRM_DOUBLE_CLICK USING P_E_ROW_ID TYPE LVC_S_ROW
P_E_COLUMN_ID TYPE LVC_S_COL
P_ES_ROW_NO TYPE LVC_S_ROID.
READ TABLE GT_ALV1 INTO GS_ALV1 INDEX P_ES_ROW_NO-ROW_ID."得到点击的行
IF SY-SUBRC EQ 0.
REFRESH:LT_ALV2,LT_ALV3.
LOOP AT GT_MARC INTO GS_MARC WHERE MATNR = GS_ALV1-MATNR.
CLEAR:LS_ALV2.
MOVE-CORRESPONDING GS_MARC TO LS_ALV2. APPEND LS_ALV2 TO LT_ALV2.
CLEAR:GS_MARC.
ENDLOOP. LOOP AT GT_MAKT INTO GS_MAKT WHERE MATNR = GS_ALV1-MATNR.
CLEAR:LS_ALV3.
MOVE-CORRESPONDING GS_MAKT TO LS_ALV3.
APPEND LS_ALV3 TO LT_ALV3.
CLEAR:GS_MAKT.
ENDLOOP. PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_T.
PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_L.
PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_R.
ENDIF. ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_HANDLE_USER_COMMAND
*&---------------------------------------------------------------------*
FORM FRM_HANDLE_USER_COMMAND9000 USING PV_UCOMM. CALL METHOD G_GRID_T->GET_SELECTED_ROWS
IMPORTING
ET_INDEX_ROWS = LT_ROW
ET_ROW_NO = LT_ROID. FIELD-SYMBOLS:<FS_ZCHECK>.
* 因为OOALV中侧边栏选择框不起作用,但是需要使用,就将选中的行的侧边栏的值修改一下
LOOP AT GT_ALV1 ASSIGNING <FS_ALV1>.
<FS_ALV1>-ZCHECK = ''.
ENDLOOP. IF LT_ROW IS NOT INITIAL.
LOOP AT LT_ROW INTO LS_ROW.
LOOP AT GT_ALV1 ASSIGNING <FS_ALV1>.
IF SY-TABIX = LS_ROW-INDEX.
<FS_ALV1>-ZCHECK = 'X'.
ENDIF.
ENDLOOP.
CLEAR:LS_ROW.
ENDLOOP.
ELSE.
MESSAGE '请选择数据' TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF. CASE PV_UCOMM.
WHEN '&ENTER'."审批通过
PERFORM FRM_ENTER_DATA.
WHEN OTHERS.
ENDCASE. PERFORM FRM_REFRESH_ALV_9000 USING G_GRID_T.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR
*&---------------------------------------------------------------------*
FORM FRM_HANDLE_TOOLBAR9000 USING P_OBJECT P_INTERACTIVE. PERFORM FRM_HANDLE_TOOLBAR_PRO USING P_OBJECT '&ENTER' '@0V@' '确认'.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_HANDLE_TOOLBAR_PRO
*&---------------------------------------------------------------------*
FORM FRM_HANDLE_TOOLBAR_PRO USING P_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET
P_FUNCTION TYPE STB_BUTTON-FUNCTION
P_ICON TYPE STB_BUTTON-ICON
P_TEXT TYPE STB_BUTTON-TEXT.
DATA: LS_TOOLBAR TYPE STB_BUTTON,
LV_QUICKINFO TYPE STB_BUTTON-QUICKINFO. CLEAR LS_TOOLBAR.
MOVE 3 TO LS_TOOLBAR-BUTN_TYPE. " 分隔符
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR. CLEAR LS_TOOLBAR.
MOVE 0 TO LS_TOOLBAR-BUTN_TYPE. " 按钮(正常)
MOVE P_FUNCTION TO LS_TOOLBAR-FUNCTION. "功能码
MOVE P_ICON TO LS_TOOLBAR-ICON. "图标
MOVE P_TEXT TO LS_TOOLBAR-TEXT. "显示文本
LV_QUICKINFO = P_TEXT.
MOVE LV_QUICKINFO TO LS_TOOLBAR-QUICKINFO.
APPEND LS_TOOLBAR TO P_OBJECT->MT_TOOLBAR.
ENDFORM. *&---------------------------------------------------------------------*
*& Form FRM_REFRESH_ALV_9000
*&---------------------------------------------------------------------*
FORM FRM_REFRESH_ALV_9000 USING PV_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA: LT_CELLTAB TYPE LVC_T_STYL,
LS_CELLTAB TYPE LVC_S_STYL,
LS_STABLE TYPE LVC_S_STBL. LS_STABLE-ROW = 'X'. "固定行
LS_STABLE-COL = 'X'. "固定列 CHECK PV_GRID IS NOT INITIAL. CALL METHOD PV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LS_STABLE
* I_SOFT_REFRESH = 'X'
EXCEPTIONS
FINISHED = 1
OTHERS = 2. IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.
"-----------------------------------------@斌将军--------------------------------------------
定期更文,欢迎关注

OOALV 分割屏幕的更多相关文章
- links and softwares
links 普通 http://www.ncpa-classic.com//special/2014gejujie/index.shtml ; 中国大剧院 http://tieba.baidu.com ...
- linux commands
abrt-cli --since ;查看abrt捕捉的异常 alias ;别名,alias rm='rm -i':使用“ \rm ” 使用原命令 alsamixer ;图形音量调节,q 增加左声道, ...
- linux command screen
喜欢这句话 “我们永远相信,分享是一种美德 | We Believe, Great People Share Knowledge...” 但是这种美德不是为什么都要问的人准备的 ——————————— ...
- square开源vim,tmux配置在linux上使用
首先安装需要的软件 apt-get install vim ack-grep git tmux gnome-terminal ctags xclip silversearcher-ag 这里tmux需 ...
- [转载] Tmux 速成教程:技巧和调整
原文: http://blog.jobbole.com/87584/ 决定从 screen 转向 tmux 了, 非常喜欢 tmux 的窗格功能. 简介 有些开发者经常要使用终端控制台工作,导致最终打 ...
- VI打开和编辑多个文件的命令 分屏操作
VI打开和编辑多个文件的命令 可分两种情况: 1.在同一窗口中打开多个文件: vi file1 file2 file3:n 切换到下一个文件 (n=next):N 切换到上一个文件 2.在不同窗口 ...
- R语言 如何为图片添加文字说明(转载)
转载:(中文翻译者)[http://blog.csdn.net/chen790646223/article/details/49766659] (原文链接)[http://datascienceplu ...
- 乱译文档--Musca介绍
胡乱翻译的,信,达,雅只能到达的水平.发现错误的话望留言好修改. 原文地址:http://aerosuidae.net/musca.html aerosuidae.net Musca 果蝇 A sim ...
- Linux screen 常用命令
想必,只要接触过Linux一段时间的人,一定知道screen这个神奇的工具了,它主要有如下些优势: 1. 后台运行:当你在ssh terminal执行shell时,如果网络这时断开,你的程序会怎样?T ...
- vim置于后台,vim 编辑多文件
这里介绍一个很实用的方法:1.将vim置于后台,直接按 ctrl + z可以将当前的vim置于后台 2.然后可以去别的目录再打开一个 当你需要打开之前的vim的时候3.打jobs命令看当前有哪些vim ...
随机推荐
- 归并排序(merge_sort)
算法时间复杂度:妥妥的nlogn 步骤: 1.确定分界点 mid = (l+r) >> 1 2.递归排序左右两边 3.归并--合二为一(用两个指针,分别指向两个序列) 就是递归到最底部,然 ...
- 字节跳动AB实验经验分享:企业如何构建数据驱动的实验文化?
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,CCF TF 举办了第 123 期分享活动,本期主题为"用户体验工程". CCF TF ...
- MySQL运行在docker容器中会损失多少性能
前言 自从使用docker以来,就经常听说MySQL数据库最好别运行在容器中,性能会损失很多.一些之前没使用过容器的同事,对数据库运行在容器中也是忌讳莫深,甚至只要数据库跑在容器中出现性能问题时,首先 ...
- MySQL-mysqldump 报错:[ERROR] unknown variable 'local_infile=1'.
版权声明:原创作品,谢绝转载!否则将追究法律责任. ----- 作者:kirin mysqldump: [ERROR] unknown variable 'local_infile=1'. 解决方法: ...
- JQuery_2
1.动画: 1.三种方式显示和隐藏元素 1.默认方式 1.show([speed,[easing],[fn]]) 1.参数: 1. ...
- 华企盾DSC在苹果电脑上申请审批没有通知
由于系统通知这里没有允许DSC通知,开启后即可.系统偏好设置-通知与专注模式-通知
- 三维GIS渲染引擎盘点,以Cesium为核心的拓展优化
目前,以Cesium为核心的各类产品繁多,本文将挑选一些以Cesium为核心的软件案例,为大家进行介绍. 1. CesiumJS CesiumJS相信凡是GIS行业相关人员都特别熟悉了,CesiumJ ...
- Android辅助功能
1:AccessibilityService 新建service public class AccessibilityService extends android.accessibilityserv ...
- 文心一言 VS 讯飞星火 VS chatgpt (173)-- 算法导论13.3 2题
二.用go语言,将关键字41.38.31.12.19.8连续地插入一棵初始为空的红黑树之后,试画出该结果树. 文心一言: 首先,我们需要了解红黑树的性质.红黑树是一种自平衡二叉查找树,其中每个节点要么 ...
- Java 集合(一)List
在 Java 中,主要存在以下三种类型的集合:Set.List 和 Map,按照更加粗略的划分,可以分为:Collection 和 Map,这些类型的继承关系如下图所示: Collection 是集合 ...