OO ALV是面向对象的ALV,在使用之前我们需创建一个control容器(屏幕),在通过CUSTOM_CONTAINER将其实例化为一个ALV屏幕,我们可以将ALV看作是一个对象,按钮,字段,样式,事件都是其属性,使用起来简单方便。

*&---------------------------------------------------------------------*
*& Report ZTEST_OOP_ALV
*&
*&---------------------------------------------------------------------*
*&OO ALV练习
*&
*&---------------------------------------------------------------------*
REPORT ZTEST_OOP_ALV.
INCLUDE <ICON>.
TABLES:MARA, " 常规物料数据
MAKT, " 物料描述
T023T. " 物料组描述
TYPE-POOLS: VRM, SLIS.
TYPES:BEGIN OF TY_ITAB,
CKBOX TYPE C , " ALV 左侧选择框
ICON TYPE ICON-ID, " 状态
MATNR TYPE MARA-MATNR, " 物料号
MAKTX TYPE MAKT-MAKTX, " 物料描述
MTART TYPE MARA-MTART, " 物料类型
MBRSH TYPE MARA-MBRSH, " 行业领域
MATKL TYPE MARA-MATKL, " 物料组
WGBEZ TYPE T023T-WGBEZ, " 物料组描述
MEINS TYPE MARA-MEINS, " 基本计量单位
BRGEW TYPE MARA-BRGEW, " 毛重
NTGEW TYPE MARA-NTGEW, " 净重
GEWEI TYPE MARA-GEWEI, " 重量单位
ROW_COLOR(4) TYPE C, " 行颜色
CEL_COLOR TYPE SLIS_T_SPECIALCOL_ALV, " 列颜色
BNAME(10) TYPE C,
STORE TYPE CHAR10, " 存放地点,搜索帮助字段
ZHTTP TYPE STRING, " 存放URL
ZLINK TYPE INT4,
END OF TY_ITAB.
*&---物料描述(属性信息为附属表,禁止和主表jion使用)
TYPES:BEGIN OF TY_MAKT,
MATNR TYPE MAKT-MATNR, " 物料号
SPRAS TYPE MAKT-SPRAS, " 语言代码
MAKTX TYPE MAKT-MAKTX, " 物料描述
END OF TY_MAKT.
*&---物料组描述(属性信息为附属表,禁止和主表jion使用)
TYPES:BEGIN OF TY_T023T,
MATKL TYPE T023T-MATKL, " 物料组
SPRAS TYPE T023T-SPRAS, " 语言代码
WGBEZ TYPE T023T-WGBEZ, " 物料组描述
END OF TY_T023T.
*&---ALV 搜索帮助类型
TYPES:BEGIN OF TY_STORE,
STORE TYPE CHAR4,
TYPE TYPE CHAR4,
BNAME TYPE CHAR30,
END OF TY_STORE.
*----------------------------------------------------------------------*
* 全局变量定义/Global variable definition
*----------------------------------------------------------------------*
*&---全局内表定义
DATA:GT_ITAB TYPE TABLE OF TY_ITAB, " 主数据表
GT_MAKT TYPE TABLE OF TY_MAKT, " 物料描述
GT_T023T TYPE TABLE OF TY_T023T, " 物料组描述
GT_STORE TYPE TABLE OF TY_STORE. " 搜索帮助内表
*&---全局结构定义
DATA:GS_ITAB TYPE TY_ITAB, " 主数据结构
GS_MAKT TYPE TY_MAKT, " 物料描述结构
GS_STORE TYPE TY_STORE, " 搜索帮助内表
GS_T023T TYPE TY_T023T. " 物料组描述结构
*&---全局变量定义
DATA:GV_MATNR TYPE MARA-MATNR, " 物料号
GV_MAKTX TYPE MAKT-MAKTX, " 物料描述
GV_NAME1 TYPE CHAR10, " 字符串操作变量1
GV_NAME2 TYPE STRING, " 字符串操作变量2
GV_INDEX TYPE I, " 取余值
GV_TIMES TYPE I VALUE 10. " 循环次数
*&---------------------------------------------------------------------*
*& 字段串定义/Field-symbols *
*&---------------------------------------------------------------------*
FIELD-SYMBOLS:<FS_ITAB> TYPE TY_ITAB.
*&---------------------------------------------------------------------*
*& ALV TYPE/ALV 类型定义
*&---------------------------------------------------------------------*
DATA: OK_CODE TYPE SY-UCOMM,
G_REPID LIKE SY-REPID,
G_GRID TYPE REF TO CL_GUI_ALV_GRID,
GS_LAYOUT TYPE LVC_S_LAYO,
CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GT_FIELD_CAT TYPE LVC_T_FCAT,
GS_FIELD_CAT TYPE LVC_S_FCAT,
GS_VARIANT TYPE DISVARIANT,
GT_EXCLUDE TYPE UI_FUNCTIONS.
*&---选择屏幕下拉框/list box
DATA:GT_LIST TYPE VRM_VALUES,
GS_LIST LIKE LINE OF GT_LIST.
*&---ALV HTTP超链接
DATA GS_HYPE TYPE LVC_S_HYPE .
DATA GT_HYPE TYPE LVC_T_HYPE ."网址映射关系表,在具体链接到哪个网址就是根
*&---ALV 下拉列表
DATA:GT_BNAME TYPE LVC_T_DROP, " 用户下拉列表,表存储
GS_BNAME TYPE LVC_S_DROP. " 用户下拉列表,结构
*&---单元格颜色
DATA:GS_CELL TYPE LINE OF SLIS_T_SPECIALCOL_ALV.
*----------------------------------------------------------------------*
*CLASS cl_event_handler DEFINITION
*----------------------------------------------------------------------*
CLASS CL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
"Hotspot Click.
METHODS: HANDLE_CLICK
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO.
METHODS: HANDLE_ONF4
FOR EVENT ONF4 OF CL_GUI_ALV_GRID
IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
METHODS: HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING
ER_DATA_CHANGED
E_ONF4
E_ONF4_BEFORE
E_ONF4_AFTER
E_UCOMM.
ENDCLASS. "cl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS CL_EVENT_HANDLER IMPLEMENTATION.
"Hotspot Click.单击事件
METHOD HANDLE_CLICK.
CASE E_COLUMN_ID-FIELDNAME.
WHEN 'MATNR'.
READ TABLE GT_ITAB ASSIGNING <FS_ITAB> INDEX E_ROW_ID.
IF SY-SUBRC = 0.
SET PARAMETER ID 'MAT' FIELD <FS_ITAB>-MATNR.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "HANDLE_CLICK
METHOD HANDLE_ONF4."搜索帮助
PERFORM HANDLE_ONF4 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
ENDMETHOD. "HANDLE_ONF4
"数据变化事件:更改物料描述
METHOD HANDLE_DATA_CHANGED.
DATA: GT_HEAD TYPE TABLE OF BAPIMATHEAD,
GS_HEAD TYPE BAPIMATHEAD,
LT_MAKT TYPE TABLE OF BAPI_MAKT,
LS_MAKT TYPE BAPI_MAKT,
GT_RET TYPE TABLE OF BAPI_MATRETURN2,
GS_RET TYPE BAPI_MATRETURN2.
DATA: L_MSG TYPE STRING.
TYPES:LTY_ALV_H TYPE STANDARD TABLE OF TY_ITAB WITH NON-UNIQUE DEFAULT KEY.
DATA: L_MAKTX TYPE MAKT-MAKTX.
FIELD-SYMBOLS:<CHANGED> TYPE LTY_ALV_H,
<CHG_ROW> LIKE LINE OF <CHANGED>,
<DEL_ROW> LIKE LINE OF ER_DATA_CHANGED->MT_DELETED_ROWS,
<CHG_CEL> LIKE LINE OF ER_DATA_CHANGED->MT_MOD_CELLS.
LOOP AT ER_DATA_CHANGED->MT_MOD_CELLS ASSIGNING <CHG_CEL> WHERE FIELDNAME = 'MAKTX'.
CASE <CHG_CEL>-FIELDNAME.
WHEN 'MAKTX'.
READ TABLE GT_ITAB INTO GS_ITAB INDEX <CHG_CEL>-ROW_ID.
IF SY-SUBRC EQ 0.
GS_HEAD-MATERIAL = GS_ITAB-MATNR.
ENDIF.
LS_MAKT-LANGU = '1'.
LS_MAKT-MATL_DESC = <CHG_CEL>-VALUE.
APPEND LS_MAKT TO LT_MAKT.
CLEAR LS_MAKT.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
HEADDATA = GS_HEAD
* IMPORTING
* RETURN = GS_RET
TABLES
MATERIALDESCRIPTION = LT_MAKT
RETURNMESSAGES = GT_RET.
LOOP AT GT_RET INTO GS_RET WHERE TYPE = 'S'.
ENDLOOP.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
EXPORTING
INPUT = GS_HEAD-MATERIAL
IMPORTING
OUTPUT = GS_HEAD-MATERIAL.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
COMMIT WORK.
CONCATENATE '物料号' GS_HEAD-MATERIAL '的物料描述修改成功!' INTO L_MSG.
MESSAGE L_MSG TYPE 'S'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ROLLBACK WORK.
CONCATENATE '物料号' GS_HEAD-MATERIAL '的物料描述修改失败!' INTO L_MSG..
MESSAGE L_MSG TYPE 'E'.
ENDIF.
ENDCASE.
ENDLOOP.
ENDMETHOD. "HANDLE_DATA_CHANGED
ENDCLASS. "cl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Selection Screen/选择屏幕
*&---------------------------------------------------------------------*
*&---选择屏幕块
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-101.
*&---单值
PARAMETERS:P_MTART LIKE MARA-MTART OBLIGATORY DEFAULT 'FERT', " 必输
P_MBRSH LIKE MARA-MBRSH DEFAULT 'M'. " 默认值
*&---空行
SELECTION-SCREEN SKIP.
*&---范围
SELECT-OPTIONS:S_MATNR FOR MARA-MATNR,
S_MATKL FOR MARA-MATKL.
*&---空行
SELECTION-SCREEN SKIP.
*&---单选框
SELECTION-SCREEN BEGIN OF BLOCK BLK02 WITH FRAME TITLE TEXT-102.
PARAMETERS:P_SIGLE RADIOBUTTON GROUP GR1,
P_JOIN RADIOBUTTON GROUP GR1.
SELECTION-SCREEN END OF BLOCK BLK02.
SELECTION-SCREEN END OF BLOCK BLK01.
*&---ALV 颜色设置
SELECTION-SCREEN BEGIN OF BLOCK BLK06 WITH FRAME TITLE TEXT-106.
PARAMETERS:P_ROW_C AS CHECKBOX DEFAULT 'X', " 行颜色是否设置
P_COL_C AS CHECKBOX DEFAULT 'X', " 列颜色是否设置
P_CEL_C AS CHECKBOX DEFAULT 'X'. " 单元格颜色设置
SELECTION-SCREEN BEGIN OF BLOCK BLK07 WITH FRAME TITLE TEXT-107.
PARAMETERS:P_ROW TYPE I DEFAULT 10, " 设置颜色行
P_COL TYPE I DEFAULT 6. " 设置颜色列
SELECTION-SCREEN END OF BLOCK BLK07.
SELECTION-SCREEN END OF BLOCK BLK06.
*&---------------------------------------------------------------------*
*& INITIALIZATION/选择屏幕前初始化 *
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*& at selection-screen/选择屏幕开始 *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN.
*&---------------------------------------------------------------------*
*& at selection-screen output/选择屏幕输出 *
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
*&---------------------------------------------------------------------*
*& Start-of-selection/开始选择屏幕 *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---内表数据获取
IF P_SIGLE = 'X'.
PERFORM FRM_GETDATA. " 单语句实现
ELSEIF P_JOIN = 'X'.
PERFORM FRM_GETDATA2 USING GV_TIMES. " join 语句使用
ENDIF.
*&---------------------------------------------------------------------*
*& end-of-selection/结束选择屏幕(程序结束处理,输出等) *
*&---------------------------------------------------------------------*
END-OF-SELECTION.
CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*& Form frm_setdata
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_10 text
*----------------------------------------------------------------------*
FORM FRM_GETDATA.
FREE:GT_ITAB,GT_MAKT,GT_T023T.
*&---获取主数据表内容MARA,此处控制输出p_no 行
SELECT MATNR
MTART
MBRSH
MATKL
MEINS
BRGEW
NTGEW
GEWEI
INTO CORRESPONDING FIELDS OF TABLE GT_ITAB
FROM MARA
WHERE MTART = P_MTART
AND MBRSH = P_MBRSH
AND MATNR IN S_MATNR
AND MATKL IN S_MATKL.
*&---主数据表属性信息获取
IF GT_ITAB[] IS NOT INITIAL.
*&---物料描述
SELECT MATNR
SPRAS
MAKTX
INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
FROM MAKT
FOR ALL ENTRIES IN GT_ITAB
WHERE MATNR = GT_ITAB-MATNR
AND SPRAS = SY-LANGU. " 默认登陆语言
*&---物料组描述
SELECT MATKL
SPRAS
WGBEZ
INTO CORRESPONDING FIELDS OF TABLE GT_T023T
FROM T023T
FOR ALL ENTRIES IN GT_ITAB
WHERE MATKL = GT_ITAB-MATKL
AND SPRAS = SY-LANGU. " 默认登陆语言
ENDIF.
*&---主表数据组织
*&---循环数据前排序
SORT GT_MAKT BY MATNR SPRAS.
SORT GT_T023T BY MATKL SPRAS.
*&---循环内表,赋值物料组,物料描述
LOOP AT GT_ITAB ASSIGNING <FS_ITAB>.
*&---行颜色设置
IF P_ROW_C = 'X' AND SY-TABIX = P_ROW.
<FS_ITAB>-ROW_COLOR = 'C610'.
ENDIF.
*&---赋值物料描述
READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = <FS_ITAB>-MATNR
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_ITAB>-MAKTX = GS_MAKT-MAKTX.
ENDIF.
*&---赋值物料组描述
READ TABLE GT_T023T INTO GS_T023T WITH KEY MATKL = <FS_ITAB>-MATKL
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_ITAB>-WGBEZ = GS_T023T-WGBEZ.
ENDIF.
<FS_ITAB>-ICON = '@5D@'.
<FS_ITAB>-ZHTTP = 'Going to BaiDu'.
<FS_ITAB>-ZLINK = 1.
ENDLOOP.
ENDFORM. " frm_setdata
*&---------------------------------------------------------------------*
*& Form frm_getdata2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GV_TIMES text
*----------------------------------------------------------------------*
FORM FRM_GETDATA2 USING P_NO.
FREE:GT_ITAB,GT_MAKT,GT_T023T.
*&---获取主数据表内容MARA,此处控制输出p_no 行
SELECT A~MATNR
B~MAKTX
MTART
MBRSH
MATKL
MEINS
BRGEW
NTGEW
GEWEI
APPENDING CORRESPONDING FIELDS OF TABLE GT_ITAB
FROM MARA AS A
JOIN MAKT AS B ON A~MATNR = B~MATNR AND SPRAS = SY-LANGU
WHERE MTART = P_MTART
AND MBRSH = P_MBRSH
AND A~MATNR IN S_MATNR
AND MATKL IN S_MATKL.
*&---主数据表属性信息获取
IF GT_ITAB[] IS NOT INITIAL.
*&---物料组描述
SELECT MATKL
SPRAS
WGBEZ
INTO CORRESPONDING FIELDS OF TABLE GT_T023T
FROM T023T
FOR ALL ENTRIES IN GT_ITAB
WHERE MATKL = GT_ITAB-MATKL
AND SPRAS = SY-LANGU. " 默认登陆语言
ENDIF.
*&---主表数据组织
*&---循环数据前排序
SORT GT_MAKT BY MATNR SPRAS.
SORT GT_T023T BY MATKL SPRAS.
*&---循环内表,赋值物料组,物料描述
LOOP AT GT_ITAB ASSIGNING <FS_ITAB>.
*&---行颜色设置
IF P_ROW_C = 'X' AND SY-TABIX = P_ROW.
<FS_ITAB>-ROW_COLOR = 'C610'.
ENDIF.
*&---赋值物料描述
READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = <FS_ITAB>-MATNR
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_ITAB>-MAKTX = GS_MAKT-MAKTX.
ENDIF.
*&---赋值物料组描述
READ TABLE GT_T023T INTO GS_T023T WITH KEY MATKL = <FS_ITAB>-MATKL
BINARY SEARCH.
IF SY-SUBRC = 0.
<FS_ITAB>-WGBEZ = GS_T023T-WGBEZ.
ENDIF.
<FS_ITAB>-ICON = '@5D@'.
<FS_ITAB>-ZHTTP = 'Going to BaiDu'.
<FS_ITAB>-ZLINK = 1.
ENDLOOP.
ENDFORM. " frm_getdata2
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
SET PF-STATUS 'SET_STATUS'.
SET TITLEBAR 'SET_STATUS'.
DATA GO_EVENT_HANDLER TYPE REF TO CL_EVENT_HANDLER.
DATA: LT_LVC_T_F4 TYPE LVC_T_F4,
LS_LVC_T_F4 TYPE LINE OF LVC_T_F4.
G_REPID = SY-REPID.
IF CUSTOM_CONTAINER IS INITIAL.
"创建屏幕容器
CREATE OBJECT CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'OOALV_TEST'.
"创建ALV容器
CREATE OBJECT G_GRID
EXPORTING
I_PARENT = CUSTOM_CONTAINER.
PERFORM EXCLUDE_TB_FUNCTIONS."隐藏不必要的按钮
PERFORM FRM_BUILD_FIELDCAT."设置字段目录
PERFORM FRM_SET_COLOR."设置颜色
PERFORM FRM_SET_LISTBOX."设置下拉框
PERFORM FRM_SET_HTTP."设置HTTP超链接
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_VARIANT = GS_VARIANT
IS_LAYOUT = GS_LAYOUT
I_SAVE = 'A'
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE
IT_HYPERLINK = GT_HYPE
CHANGING
IT_FIELDCATALOG = GT_FIELD_CAT
IT_OUTTAB = GT_ITAB.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 DISPLAY LIKE 'I'.
STOP.
ENDIF.
CREATE OBJECT GO_EVENT_HANDLER.
SET HANDLER GO_EVENT_HANDLER->HANDLE_CLICK FOR G_GRID.
SET HANDLER GO_EVENT_HANDLER->HANDLE_DATA_CHANGED FOR G_GRID.
CALL METHOD G_GRID->SET_TOOLBAR_INTERACTIVE( ).
CALL METHOD G_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.
CLEAR LS_LVC_T_F4.
LS_LVC_T_F4-FIELDNAME = 'STORE'.
LS_LVC_T_F4-GETBEFORE = 'X'.
LS_LVC_T_F4-REGISTER = 'X'.
APPEND LS_LVC_T_F4 TO LT_LVC_T_F4.
CALL METHOD G_GRID->REGISTER_F4_FOR_FIELDS
EXPORTING
IT_F4 = LT_LVC_T_F4.
SET HANDLER GO_EVENT_HANDLER->HANDLE_ONF4 FOR G_GRID.
ENDIF.
"获取屏幕焦点
* CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
* EXPORTING
* CONTROL = GRID.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
*&---自定义程序结构
DATA:LT_ZZT_201711_1015 LIKE TABLE OF ZZT_201711_1015, " 存储组织内表
LT_CHECK LIKE TABLE OF RSPARAMS, " se16 检查返回表
LS_ZZT_201711_1015 LIKE ZZT_201711_1015.
DATA: STBL TYPE LVC_S_STBL.
"及时更新ALV数据至内表
CALL METHOD G_GRID->CHECK_CHANGED_DATA.
CASE OK_CODE.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
*&---前台导入
WHEN 'ZSAVE'.
READ TABLE GT_ITAB ASSIGNING <FS_ITAB> WITH KEY CKBOX = 'X'.
IF SY-SUBRC = 0.
PERFORM FRM_SAVE_DATA.
MESSAGE '数据保存成功!' TYPE 'S'.
ELSE.
MESSAGE '请至少选择一条数据!' TYPE 'S' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
**&---更新到数据库表中(大数据量性能考虑)
* IF lt_zzt_201711_1015[] IS NOT INITIAL.
* MODIFY zzt_201711_1015 FROM TABLE lt_zzt_201711_1015.
* IF sy-subrc = 0.
* COMMIT WORK AND WAIT.
* ENDIF.
* ENDIF.
*&---查看保存数据库表内容
WHEN 'ZCHECK'.
*&---数据库表内容函数
CALL FUNCTION 'RSDU_CALL_SE16'
EXPORTING
I_TABLENAME = 'ZZT_201711_1015'
TABLES
I_T_SELTAB = LT_CHECK[].
ENDCASE.
*&---刷新ALV 显示值
STBL-ROW = 'X'." 基于行的稳定刷新
STBL-COL = 'X'." 基于列稳定刷新
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL
* 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.
CLEAR OK_CODE.
ENDMODULE. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*MATKL
FORM FRM_BUILD_FIELDCAT .
PERFORM APPEND_FIELDCAT USING '' 'ICON' '状态' 'X' '' '' '' '' '' '' '' ''.
PERFORM APPEND_FIELDCAT USING '' 'CKBOX' '选择框' 'X' '' 'X' 'X' '' '' '' '' ''.
PERFORM APPEND_FIELDCAT USING '' 'MATNR' '物料号' 'X' '' '' '' 'X' '' 'MARA' 'MATNR' ''.
PERFORM APPEND_FIELDCAT USING '' 'MAKTX' '物料描述' 'X' '' '' 'X' '' '' 'MAKT' 'MAKTX' ''.
PERFORM APPEND_FIELDCAT USING '' 'MTART' '物料类型' 'X' '' '' 'X' '' '' 'MARA' 'MTART' ''.
PERFORM APPEND_FIELDCAT USING '' 'MBRSH' '行业领域' 'X' '' '' 'X' '' '' 'MARA' 'MBRSH' ''.
PERFORM APPEND_FIELDCAT USING '' 'MATKL' '物料组' 'X' '' '' '' '' '' 'MARA' 'MATKL' '' .
PERFORM APPEND_FIELDCAT USING '' 'WGBEZ' '物料组描述' 'X' '' '' '' '' '' 'T023T' 'WGBEZ' ''.
PERFORM APPEND_FIELDCAT USING '' 'MEINS' '单位' 'X' '' '' 'X' '' '' 'MARA' 'MEINS' ''.
PERFORM APPEND_FIELDCAT USING '' 'BRGEW' '毛重' 'X' '' '' 'X' '' '' 'MARA' 'BRGEW' 'GEWEI'.
PERFORM APPEND_FIELDCAT USING '' 'NTGEW' '净重' 'X' '' '' 'X' '' '' 'MARA' 'NTGEW' 'GEWEI'.
PERFORM APPEND_FIELDCAT USING '' 'GEWEI' '重量单位' 'X' '' '' 'X' '' '' 'MARA' 'BRGEW' 'GEWEI'.
PERFORM APPEND_FIELDCAT USING '' 'BNAME' '用户标识' 'X' 'BNAME' '' 'X' '' '' '' '' ''.
PERFORM APPEND_FIELDCAT USING '' 'STORE' '存储地点' 'X' '' '' 'X' '' 'X' '' '' ''.
PERFORM APPEND_FIELDCAT USING 'ZLINK' 'ZHTTP' '超链接列' 'X' '' '' '' '' 'X' '' '' ''.
"设置字段目录,创建ALV
CLEAR GS_LAYOUT.
GS_VARIANT-REPORT = SY-REPID.
GS_LAYOUT-GRID_TITLE = TEXT-001.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-NO_ROWMARK = 'X'.
GS_LAYOUT-INFO_FNAME = 'ROW_COLOR'. " 行颜色
GS_LAYOUT-CTAB_FNAME = 'CEL_COLOR'. " 列颜色
ENDFORM. " FRM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form APPEND_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WEB_FIELD text
* -->P_WEB_FIELD text
* -->P_COLTEXT text
* -->P_SCRTEXT_S text
* -->P_DRDN_FIELD text
* -->P_CHECKBOX text
* -->P_EDIT text
* -->P_HOTSPOT text
* -->P_F4AVAILABL text
* -->P_REF_FIELD text
* -->P_QFIELDNAME text
*----------------------------------------------------------------------*
FORM APPEND_FIELDCAT USING P_WEB_FIELD
P_FIELDNAME
P_COLTEXT
P_SCRTEXT_S
P_DRDN_FIELD
P_CHECKBOX
P_EDIT
P_HOTSPOT
P_F4AVAILABL
P_REF_TABLE
P_REF_FIELD
P_QFIELDNAME.
CLEAR GS_FIELD_CAT.
GS_FIELD_CAT-WEB_FIELD = P_WEB_FIELD.
GS_FIELD_CAT-FIELDNAME = P_FIELDNAME.
GS_FIELD_CAT-COLTEXT = P_COLTEXT.
GS_FIELD_CAT-SCRTEXT_S = P_SCRTEXT_S.
GS_FIELD_CAT-SCRTEXT_M = P_SCRTEXT_S.
GS_FIELD_CAT-SCRTEXT_L = P_SCRTEXT_S.
GS_FIELD_CAT-DRDN_FIELD = P_DRDN_FIELD.
GS_FIELD_CAT-CHECKBOX = P_CHECKBOX.
GS_FIELD_CAT-EDIT = P_EDIT.
GS_FIELD_CAT-HOTSPOT = P_HOTSPOT.
GS_FIELD_CAT-F4AVAILABL = P_F4AVAILABL.
GS_FIELD_CAT-REF_TABLE = P_REF_TABLE.
GS_FIELD_CAT-REF_FIELD = P_REF_FIELD.
GS_FIELD_CAT-QFIELDNAME = P_QFIELDNAME.
APPEND GS_FIELD_CAT TO GT_FIELD_CAT.
ENDFORM. "APPEND_FIELDCAT
*&---------------------------------------------------------------------*
*& Form EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM EXCLUDE_TB_FUNCTIONS .
DATA LS_EXCLUDE TYPE UI_FUNC.
* ls_exclude = cl_gui_alv_grid=>mc_mb_sum.
* APPEND ls_exclude TO gt_exclude.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CALL_CRBATCH.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
* ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
* APPEND ls_exclude TO gt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_sort_asc.
* APPEND ls_exclude TO gt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_sort_dsc.
* APPEND ls_exclude TO gt_exclude.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_FIND.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
* ls_exclude = cl_gui_alv_grid=>mc_mb_filter.
* APPEND ls_exclude TO gt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_current_variant.
* APPEND ls_exclude TO gt_exclude.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_VIEW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
* ls_exclude = cl_gui_alv_grid=>mc_mb_export.
* APPEND ls_exclude TO gt_exclude.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_GRAPH.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_CHECK.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_REFRESH.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
* APPEND ls_exclude TO gt_exclude.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_PRINT.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_INFO.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
APPEND LS_EXCLUDE TO GT_EXCLUDE.
ENDFORM. "EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Form FRM_SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SAVE_DATA .
*&---选中数据收集到内表
FREE:LT_ZZT_201711_1015.
LOOP AT GT_ITAB ASSIGNING <FS_ITAB> WHERE CKBOX = 'X'.
*&---数据赋值
CLEAR:LS_ZZT_201711_1015.
MOVE-CORRESPONDING <FS_ITAB> TO LS_ZZT_201711_1015.
*&---更新数据库表
MODIFY ZZT_201711_1015 FROM LS_ZZT_201711_1015.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
<FS_ITAB>-ICON = '@5B@'.
ELSE.
<FS_ITAB>-ICON = '@5C@'.
ENDIF.
APPEND LS_ZZT_201711_1015 TO LT_ZZT_201711_1015.
ENDLOOP.
ENDFORM. " FRM_SAVE_DATA
*&---------------------------------------------------------------------*
*& Form HANDLE_ONF4
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_FIELDNAME text
* -->P_ES_ROW_NO text
* -->P_ER_EVENT_DATA text
*----------------------------------------------------------------------*
FORM HANDLE_ONF4 USING E_FIELDNAME TYPE LVC_FNAME
ES_ROW_NO TYPE LVC_S_ROID
ER_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATA.
DATA:GS_TAB LIKE DFIES,
GT_TAB LIKE TABLE OF DFIES WITH HEADER LINE.
DATA: LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL,
LS_RETURN TYPE DDSHRETVAL.
IF GT_STORE IS INITIAL.
*&---组织搜索帮助内容
GS_STORE-STORE = '1000'.
GS_STORE-TYPE = '液态'.
GS_STORE-BNAME = '化工三部--危险一级保管员--张三'.
APPEND GS_STORE TO GT_STORE.
GS_STORE-STORE = '2000'.
GS_STORE-TYPE = '固态'.
GS_STORE-BNAME = '化工三部--危险二级保管员--李四'.
APPEND GS_STORE TO GT_STORE.
GS_STORE-STORE = '3000'.
GS_STORE-TYPE = '气态'.
GS_STORE-BNAME = '化工三部--危险三级保管员--王五'.
APPEND GS_STORE TO GT_STORE.
ENDIF.
*&---显示抬头面搜
CLEAR:GS_TAB.
GS_TAB-FIELDNAME = 'STORE' . " 字段名称
GS_TAB-LFIELDNAME = 'STORE' . " 字段名称
GS_TAB-POSITION = '0001'. " 输出表抬头,列序号
GS_TAB-LENG = '000004' . " 定义长度
GS_TAB-INTLEN = '000008' . " 初始长度,2 * 定义长度
GS_TAB-OUTPUTLEN = '000004' . " 输出长度
* GS_TAB-DECIMALS = '000000' . " 小数
GS_TAB-DATATYPE = 'CHAR' . " 字段类型
GS_TAB-FIELDTEXT = '库存地点'. " 抬头描述
GS_TAB-REPTEXT = '库存地点'. " 抬头描述
GS_TAB-SCRTEXT_S = '库存地点'. " 抬头描述
GS_TAB-SCRTEXT_M = '库存地点'. " 抬头描述
GS_TAB-SCRTEXT_L = '库存地点'. " 抬头描述
APPEND GS_TAB TO GT_TAB.
CLEAR:GS_TAB.
** GS_TAB-TABNAME = 'ZZS_DEMO_1008'.
GS_TAB-FIELDNAME = 'TYPE' . " 字段名称
GS_TAB-LFIELDNAME = 'TYPE' . " 字段名称
GS_TAB-POSITION = '0002'. " 输出表抬头,列序号
GS_TAB-OFFSET = '0008'. " 2 * sum 字段长度 1- n-1(前边字段长度和)
GS_TAB-LENG = '000004' . " 定义长度
GS_TAB-INTLEN = '000008' . " 初始长度,2 * 定义长度
GS_TAB-OUTPUTLEN = '000004' . " 输出长度
* GS_TAB-DECIMALS = '000000' . " 小数
GS_TAB-DATATYPE = 'CHAR' . " 字段类型
GS_TAB-FIELDTEXT = '类型'. " 抬头描述
GS_TAB-REPTEXT = '类型'. " 抬头描述
GS_TAB-SCRTEXT_S = '类型'. " 抬头描述
GS_TAB-SCRTEXT_M = '类型'. " 抬头描述
GS_TAB-SCRTEXT_L = '类型'. " 抬头描述
APPEND GS_TAB TO GT_TAB.
CLEAR:GS_TAB.
* GS_TAB-TABNAME = 'ZZS_DEMO_1008'.
GS_TAB-FIELDNAME = 'BNAME' . " 字段名称
GS_TAB-LFIELDNAME = 'BNAME' . " 字段名称
GS_TAB-POSITION = '0003'. " 输出表抬头,列序号
GS_TAB-OFFSET = '00016'. " 2 * sum 字段长度 1- n-1(前边字段长度和)
GS_TAB-LENG = '000030' . " 定义长度
GS_TAB-INTLEN = '000060' . " 初始长度,2 * 定义长度
GS_TAB-OUTPUTLEN = '000030' . " 输出长度
* GS_TAB-DECIMALS = '000000' . " 小数
GS_TAB-DATATYPE = 'CHAR' . " 字段类型
GS_TAB-FIELDTEXT = '负责人'. " 抬头描述
GS_TAB-REPTEXT = '负责人'. " 抬头描述
GS_TAB-SCRTEXT_S = '负责人'. " 抬头描述
GS_TAB-SCRTEXT_M = '负责人'. " 抬头描述
GS_TAB-SCRTEXT_L = '负责人'. " 抬头描述
APPEND GS_TAB TO GT_TAB.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'STORE' " 搜索帮助选择值
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'STORE' " ALV 屏幕返回字段
WINDOW_TITLE = '存储条件'
VALUE_ORG = 'S'
CALLBACK_PROGRAM = SY-REPID
TABLES
VALUE_TAB = GT_STORE " 需要显示帮助的值内表
RETURN_TAB = LT_RETURN " 返回值.
FIELD_TAB = GT_TAB
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
*&---ALV 字段赋值
READ TABLE GT_ITAB ASSIGNING <FS_ITAB> INDEX ES_ROW_NO-ROW_ID.
IF <FS_ITAB>-STORE IS INITIAL.
READ TABLE LT_RETURN INTO LS_RETURN INDEX 1.
<FS_ITAB>-STORE = LS_RETURN-FIELDVAL.
ENDIF.
ENDIF.
IF G_GRID IS NOT INITIAL.
DATA: LS_STABLE TYPE LVC_S_STBL.
LS_STABLE-ROW = 'X'.
LS_STABLE-COL = 'X'.
CALL METHOD G_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.
ENDIF.
ENDFORM. "handle_onf4
*&---------------------------------------------------------------------*
*& Form FRM_SET_COLOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_COLOR .
*&---ALV GRID 行确定
READ TABLE GT_ITAB ASSIGNING <FS_ITAB> INDEX P_ROW.
IF SY-SUBRC = 0.
*&---ALV GRID 列确定
READ TABLE GT_FIELD_CAT INTO GS_FIELD_CAT INDEX P_COL.
IF SY-SUBRC = 0.
CLEAR:GS_CELL.
*&---单元格颜色
IF P_CEL_C = 'X'.
GS_CELL-FIELDNAME = GS_FIELD_CAT-FIELDNAME.
GS_CELL-COLOR-COL = 3.
GS_CELL-COLOR-INT = 1.
APPEND GS_CELL TO <FS_ITAB>-CEL_COLOR.
ENDIF.
ENDIF.
ENDIF.
*&---设置列颜色
LOOP AT GT_FIELD_CAT INTO GS_FIELD_CAT.
IF P_COL_C = 'X' AND SY-TABIX = P_COL.
GS_FIELD_CAT-EMPHASIZE = 'C510'.
MODIFY GT_FIELD_CAT FROM GS_FIELD_CAT.
ENDIF.
ENDLOOP.
ENDFORM. " FRM_SET_COLOR
*&---------------------------------------------------------------------*
*& Form FRM_SET_LISTBOX
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_LISTBOX .
******************下拉框设置***********************************************************
*&---数据来源定义
DATA:LT_USR02 TYPE TABLE OF USR02,
LT_BNAME TYPE LVC_T_DROP,
LT_BNAME1 TYPE LVC_T_DROP,
LS_USR02 TYPE USR02.
*&---来源数据
SELECT *
INTO CORRESPONDING FIELDS OF TABLE LT_USR02
FROM USR02
UP TO 30 ROWS.
FREE:GT_BNAME.
DATA:LV_TABIX TYPE SY-TABIX.
*&---下拉列表初始值
LOOP AT LT_USR02 INTO LS_USR02.
CLEAR:GS_BNAME.
GS_BNAME-VALUE = LS_USR02-BNAME.
APPEND GS_BNAME TO LT_BNAME.
ENDLOOP.
**&---增加空行
GS_BNAME-VALUE = ' '.
GS_BNAME-HANDLE = ' '.
APPEND GS_BNAME TO LT_BNAME.
*&---ALV 每条记录对应下拉列表值,ALV 行号对应 下拉列表 handle
LOOP AT GT_ITAB ASSIGNING <FS_ITAB>.
GS_BNAME-HANDLE = SY-TABIX.
FREE:LT_BNAME1.
LT_BNAME1[] = LT_BNAME[].
MODIFY LT_BNAME1 FROM GS_BNAME TRANSPORTING HANDLE WHERE HANDLE IS INITIAL.
APPEND LINES OF LT_BNAME1 TO GT_BNAME.
<FS_ITAB>-BNAME = 1.
ENDLOOP.
CALL METHOD G_GRID->SET_DROP_DOWN_TABLE
EXPORTING
IT_DROP_DOWN = GT_BNAME.
"及时更新ALV数据至内表
CALL METHOD G_GRID->CHECK_CHANGED_DATA.
******************下拉框设置***************************************************************
ENDFORM. " FRM_SET_LISTBOX
*&---------------------------------------------------------------------*
*& Form FRM_SET_HTTP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_SET_HTTP.
GS_HYPE-HANDLE = 1 .
GS_HYPE-HREF = 'http://www.baidu.com' .
APPEND GS_HYPE TO GT_HYPE .
CLEAR GS_HYPE.
ENDFORM. " FRM_SET
网友评论