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_COMMANDMETHOD HANDLE_USER_COMMAND.       "用户按钮事件PERFORM FRM_HANDLE_USER_COMMAND9000 USING E_UCOMM.ENDMETHOD.                    "handle_hotspot_clickMETHOD  HANDLE_TOOLBAR.            "工具条事件PERFORM FRM_HANDLE_TOOLBAR9000 USING E_OBJECT E_INTERACTIVE."设置工具条图标ENDMETHOD.                    "HANDLE_DOUBLE_CLICKENDCLASS. "alv_event_9000 IMPLEMENTATIONAT 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.SELECTMATNR"物料号MTART"物料类型MATKL"物料组MEINS"基本计量单位FROM MARAINTO TABLE GT_ALV1WHERE MATNR IN S_MATNRAND ERSDA IN S_ERSDA.IF GT_ALV1 IS NOT INITIAL.SELECTMATNR"物料号WERKS"工厂BWTTY"评估类别FROM MARCINTO TABLE GT_MARCFOR ALL ENTRIES IN GT_ALV1WHERE MATNR = GT_ALV1-MATNR.SELECTMATNR"物料号SPRAS"语言代码MAKTX"物料描述FROM MAKTINTO TABLE GT_MAKTFOR ALL ENTRIES IN GT_ALV1WHERE 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_9000EXPORTINGREPID                       = SY-REPIDDYNNR                       = '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是否可用手动拖动大小EXCEPTIONSCNTL_ERROR                  = 1CNTL_SYSTEM_ERROR           = 2CREATE_ERROR                = 3LIFETIME_ERROR              = 4LIFETIME_DYNPRO_DYNPRO_LINK = 5OTHERS                      = 6.IF SY-SUBRC <> 0.MESSAGE S001(00) WITH '屏幕初始化失败'.LEAVE LIST-PROCESSING.ENDIF."拆分成2行1列部分CREATE OBJECT G_SPLITTEREXPORTINGPARENT  = G_CONTAINER_9000ROWS    = 2COLUMNS = 1."一行一列CALL METHOD G_SPLITTER->GET_CONTAINEREXPORTINGROW       = 1COLUMN    = 1RECEIVINGCONTAINER = G_CONTAINER_T.CALL METHOD G_SPLITTER->SET_COLUMN_WIDTHEXPORTINGID    = 1WIDTH = 100."二行一列*CALL METHOD G_SPLITTER->GET_CONTAINEREXPORTINGROW       = 2COLUMN    = 1RECEIVINGCONTAINER = G_CONTAINER_B."拆分成一行二列部分*CREATE OBJECT G_SPLITTER1EXPORTINGPARENT  = G_CONTAINER_BROWS    = 1COLUMNS = 2."一行一列*CALL METHOD G_SPLITTER1->GET_CONTAINEREXPORTINGROW       = 1COLUMN    = 1RECEIVINGCONTAINER = G_CONTAINER_L.CALL METHOD G_SPLITTER1->SET_COLUMN_WIDTHEXPORTINGID    = 2WIDTH = 50."*一行二列*CALL METHOD G_SPLITTER1->GET_CONTAINEREXPORTINGROW       = 1COLUMN    = 2RECEIVINGCONTAINER = G_CONTAINER_R.CALL METHOD G_SPLITTER1->SET_COLUMN_WIDTHEXPORTINGID    = 3WIDTH = 50.CREATE OBJECT G_GRID_T"上半部分EXPORTINGI_PARENT = G_CONTAINER_T.CREATE OBJECT G_GRID_L"左半部分EXPORTINGI_PARENT = G_CONTAINER_L.CREATE OBJECT G_GRID_R"右半部分EXPORTINGI_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_DISPLAYEXPORTING
*     I_CONSISTENCY_CHECK           = 'X'IS_VARIANT                    = GS_VARIANT_TIT_TOOLBAR_EXCLUDING          = GT_EXCLUDE_9000I_SAVE                        = 'A'I_DEFAULT                     = 'X' "允许定义默认布局IS_LAYOUT                     = GS_LAYOUTCHANGINGIT_OUTTAB                     = GT_ALV1IT_FIELDCATALOG               = GT_FIELDCAT_TEXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR                 = 2TOO_MANY_LINES                = 3OTHERS                        = 4.IF SY-SUBRC <> 0.ENDIF.CALL METHOD G_GRID_L->SET_TABLE_FOR_FIRST_DISPLAYEXPORTING
*     I_CONSISTENCY_CHECK           = 'X'IS_VARIANT                    = GS_VARIANT_LIT_TOOLBAR_EXCLUDING          = GT_EXCLUDE_9000I_SAVE                        = 'A'I_DEFAULT                     = 'X' "允许定义默认布局IS_LAYOUT                     = GS_LAYOUT_L
*     IS_PRINT                      = GS_PRINT_HCHANGINGIT_OUTTAB                     = LT_ALV2IT_FIELDCATALOG               = GT_FIELDCAT_LEXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR                 = 2TOO_MANY_LINES                = 3OTHERS                        = 4.IF SY-SUBRC <> 0.ENDIF.CALL METHOD G_GRID_R->SET_TABLE_FOR_FIRST_DISPLAYEXPORTING
*     I_CONSISTENCY_CHECK           = 'X'IS_VARIANT                    = GS_VARIANT_RIT_TOOLBAR_EXCLUDING          = GT_EXCLUDE_9000I_SAVE                        = 'A'I_DEFAULT                     = 'X' "允许定义默认布局IS_LAYOUT                     = GS_LAYOUT_R
*     IS_PRINT                      = GS_PRINT_HCHANGINGIT_OUTTAB                     = LT_ALV3IT_FIELDCATALOG               = GT_FIELDCAT_REXCEPTIONSINVALID_PARAMETER_COMBINATION = 1PROGRAM_ERROR                 = 2TOO_MANY_LINES                = 3OTHERS                        = 4.IF SY-SUBRC <> 0.ENDIF.
ENDFORM.*&---------------------------------------------------------------------*
*&      Form  FRM_DOUBLE_CLICK
*&---------------------------------------------------------------------*
FORM FRM_DOUBLE_CLICK USING P_E_ROW_ID TYPE LVC_S_ROWP_E_COLUMN_ID TYPE LVC_S_COLP_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_ROWSIMPORTINGET_INDEX_ROWS = LT_ROWET_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_SETP_FUNCTION TYPE STB_BUTTON-FUNCTIONP_ICON TYPE STB_BUTTON-ICONP_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_DISPLAYEXPORTINGIS_STABLE = LS_STABLE
*     I_SOFT_REFRESH = 'X'EXCEPTIONSFINISHED  = 1OTHERS    = 2.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.CALL METHOD CL_GUI_CFW=>FLUSH.
ENDFORM.
"-----------------------------------------@斌将军--------------------------------------------

OOALV 分割屏幕相关推荐

  1. SAP OOALV分割屏幕

    同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据. 需要用到四个对象类: cl_gui_docking_container 屏幕容器类 cl_gui_splitter_container 分割屏 ...

  2. SAP OOALV分割屏幕 cl_gui_docking_containercl_gui_splitter_container <转载>

    原文链接:https://blog.csdn.net/LuciferousYam/article/details/124527800 同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据. 需要用到 ...

  3. ScrollView 分割屏幕效果

    1 CGRect screentRect = self.view.bounds; 2 CGRect bigRect = screentRect; 3 bigRect.size.width *= 2.0 ...

  4. 启扬i.MX8M Plus开发板适配LVDS屏幕的调试思路

    i.MX 8M Plus是NXP推出的一款具有高可靠性,适合用于机器学习和视觉.高级多媒体和工业物联网的处理器.为发挥其强大的多媒体性能,启扬在i.MX8M Plus配套底板上引出1 路 4 通道 M ...

  5. 斯坦佛编程教程-Unix编程工具(四)

    emacs 下面将会简单的介绍一个叫做emacs的文本编辑器,它是由GNU组织提供的自由软件.它是一个非常优秀的编译器,并且,它能很好地和其他UNIX工具整合在一起.很多编辑器都有着非常多的理由来说明 ...

  6. [转载] Tmux 速成教程:技巧和调整

    原文: http://blog.jobbole.com/87584/ 决定从 screen 转向 tmux 了, 非常喜欢 tmux 的窗格功能. 简介 有些开发者经常要使用终端控制台工作,导致最终打 ...

  7. linux 终端管理工具,linux服务器-远程管理-screen:强大的终端管理工具

    screen 能够支持多个终端窗口 这样能给我们在终端的操作带来大量的便利 比如:我们可以在一个window中编译程序,在另一个windows中写代码,在第三个window中下载软件,在第四个wind ...

  8. VI打开和编辑多个文件的命令

    VI打开和编辑多个文件的命令 可分两种情况: 1.在同一窗口中打开多个文件: vi file1 file2 file3 :n  切换到下一个文件 (n=next) :N  切换到上一个文件 2.在不同 ...

  9. 从 Windows 切换到 Mac,不能错过这9条Tips

    作者 | Cathal Mac Donnacha .译者 | 弯月 我原本是一名 Windows 的粉丝,从 10 岁起就开始在家学习编程,而后又从事了 8 年多的前端开发,这期间使用的都是 Wind ...

最新文章

  1. 数据中台:宜信敏捷数据中台建设实践
  2. 我的同学是计算机作文,同学相见作文
  3. python真实环境与虚拟环境均配置jupyter的方法,虚拟开发环境增加到notebook选项中
  4. 简单分析EnableAutoConfiguration
  5. mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数
  6. html5 打包ios.上架,iOS帮客户打包App上架的正确姿势
  7. Spring Cloud 微服务入门(一)--初识分布式及其发展历程
  8. 【ElasticSearch】Es 源码之 ActionModule 源码解读
  9. MacBook Air 是什么意思
  10. redis的lpush、rpush、rpop、lpop位置的简单理解
  11. 怎么查看电脑开关机时间记录
  12. 12点转成0点(原因时间格式化为十二小时制导致)
  13. 如何提高思维能力(不止针对程序猿)
  14. 许久没更新,安装Python第三方库python-docx都困难系列(统信UOS)
  15. a5 1c语言实现,A5算法的C语言实现
  16. 真爱 vs. 种姓:新一代印度人的婚恋观
  17. Reddit的发帖注意事项和技巧
  18. chatgpt赋能python:Python圆柱体积计算器:简单、高效、快速解决计算难题
  19. 2013年最损的话,搞笑得经典,快进…
  20. UI设计师都在用这5个网站,赶紧马住~

热门文章

  1. 机械设计制造及其自动化技术的特点分析
  2. 面向对象游戏案例:贪吃蛇
  3. fcn网络结构代码_经典网络复现系列(一):FCN
  4. Spring三种注入方法(set注入、构造方法注入、p标签注入)
  5. J - Subway Chasing ( 差分约束 )
  6. 第七届楚慧杯web writeup
  7. 新一代 PHP 框架 QeePHP 发布 - 主要特征
  8. 广东移动宽带dns服务器未响应,宽带连不上 dns 无响应
  9. 新年礼物:给大家送 AirPods Pro!
  10. bug:ORA-20002: Directory creation failed