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.
"-----------------------------------------@斌将军--------------------------------------------

 

定期更文,欢迎关注

posted @ 2020-08-25 15:05  斌将军  阅读(1381)  评论(0编辑  收藏  举报