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_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 分割屏幕相关推荐
- SAP OOALV分割屏幕
同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据. 需要用到四个对象类: cl_gui_docking_container 屏幕容器类 cl_gui_splitter_container 分割屏 ...
- SAP OOALV分割屏幕 cl_gui_docking_containercl_gui_splitter_container <转载>
原文链接:https://blog.csdn.net/LuciferousYam/article/details/124527800 同一个alv屏幕上显示上下两个屏幕,用于显示不同的数据. 需要用到 ...
- ScrollView 分割屏幕效果
1 CGRect screentRect = self.view.bounds; 2 CGRect bigRect = screentRect; 3 bigRect.size.width *= 2.0 ...
- 启扬i.MX8M Plus开发板适配LVDS屏幕的调试思路
i.MX 8M Plus是NXP推出的一款具有高可靠性,适合用于机器学习和视觉.高级多媒体和工业物联网的处理器.为发挥其强大的多媒体性能,启扬在i.MX8M Plus配套底板上引出1 路 4 通道 M ...
- 斯坦佛编程教程-Unix编程工具(四)
emacs 下面将会简单的介绍一个叫做emacs的文本编辑器,它是由GNU组织提供的自由软件.它是一个非常优秀的编译器,并且,它能很好地和其他UNIX工具整合在一起.很多编辑器都有着非常多的理由来说明 ...
- [转载] Tmux 速成教程:技巧和调整
原文: http://blog.jobbole.com/87584/ 决定从 screen 转向 tmux 了, 非常喜欢 tmux 的窗格功能. 简介 有些开发者经常要使用终端控制台工作,导致最终打 ...
- linux 终端管理工具,linux服务器-远程管理-screen:强大的终端管理工具
screen 能够支持多个终端窗口 这样能给我们在终端的操作带来大量的便利 比如:我们可以在一个window中编译程序,在另一个windows中写代码,在第三个window中下载软件,在第四个wind ...
- VI打开和编辑多个文件的命令
VI打开和编辑多个文件的命令 可分两种情况: 1.在同一窗口中打开多个文件: vi file1 file2 file3 :n 切换到下一个文件 (n=next) :N 切换到上一个文件 2.在不同 ...
- 从 Windows 切换到 Mac,不能错过这9条Tips
作者 | Cathal Mac Donnacha .译者 | 弯月 我原本是一名 Windows 的粉丝,从 10 岁起就开始在家学习编程,而后又从事了 8 年多的前端开发,这期间使用的都是 Wind ...
最新文章
- 数据中台:宜信敏捷数据中台建设实践
- 我的同学是计算机作文,同学相见作文
- python真实环境与虚拟环境均配置jupyter的方法,虚拟开发环境增加到notebook选项中
- 简单分析EnableAutoConfiguration
- mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数
- html5 打包ios.上架,iOS帮客户打包App上架的正确姿势
- Spring Cloud 微服务入门(一)--初识分布式及其发展历程
- 【ElasticSearch】Es 源码之 ActionModule 源码解读
- MacBook Air 是什么意思
- redis的lpush、rpush、rpop、lpop位置的简单理解
- 怎么查看电脑开关机时间记录
- 12点转成0点(原因时间格式化为十二小时制导致)
- 如何提高思维能力(不止针对程序猿)
- 许久没更新,安装Python第三方库python-docx都困难系列(统信UOS)
- a5 1c语言实现,A5算法的C语言实现
- 真爱 vs. 种姓:新一代印度人的婚恋观
- Reddit的发帖注意事项和技巧
- chatgpt赋能python:Python圆柱体积计算器:简单、高效、快速解决计算难题
- 2013年最损的话,搞笑得经典,快进…
- UI设计师都在用这5个网站,赶紧马住~