1.定义ALV 相关TABLES:BESG....
2.定义需要显示的ALV字段:DATA: BEGIN 0F ITAB OCCURS 0 ,
BOX(1) TYPE C, "选择标志
STATUS(4) TYPE C, "状态
BUKRS LIKE BKPF-BUKRS,
....
END OF ITAB.
TYPE-POOLS: SILIS.
INCLUDE .
INCLUDE .
DATA:
POS TYPE I VALUE 1,
I_FIELDCAT_ALV TYPE SLIS_T_FIELDCAT_ALV, "定义列标题(属性/信息)
I_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
I_LAYOUT TYPE SLIS_LAYOUT_ALV, "alv格式
I_EVENTS TYPE SLIS_T_EVENT, "alv事件
W_EVENTS LIKE LINE OF I_EVENTS,
I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER, "alv表单标题区域设置
W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS,
W_REPID LIKE SY-REPID.
<
SELECTION-SCREEN >
START OF SELECTION.
PERFORM GET_DATA.
END OF SELECTION.
PERFORM LAYOUT_BUILD .
PERFORM EVENTS_BUILD .
PERFORM FIELDS_BUILD .
PERFORM DISPLAY_ALV.
FORM LAYOUT_BUILD.
I_LAYOUT-ZEBRA = 'X'.
* i_layout-detail_popup = 'X'.
I_LAYOUT-NO_VLINE = ' '.
I_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
* i_layout-detail_initial_lines = 'X'.
* i_layout-detail_titlebar = '详细内容'.
* i_layout-f2code = '&ETA'.
I_LAYOUT-NO_COLHEAD = ' '.
W_REPID = SY-REPID.
ENDFORM.
FORM EVENTS_BUILD .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS .
* read table i_events with key name = 'TOP_OF_PAGE'
* into w_events.
* if sy-subrc = 0.
* move 'ALV_TOP_OF_PAGE' to w_events-form.
* modify i_events from w_events index sy-tabix.
* endif.
READ TABLE I_EVENTS INTO W_EVENTS WITH KEY NAME = 'USER_COMMAND'.
IF SY-SUBRC EQ 0.
W_EVENTS-NAME = 'USER_COMMAND'.
MODIFY I_EVENTS FROM W_EVENTS INDEX SY-TABIX.
ENDIF.
ENDFORM.
FORM FIELDS_BUILD.
REFRESH I_FIELDCAT_ALV.
CLEAR I_FIELDCAT.
DATA COLNUM TYPE I.
COLNUM = COLNUM + 1.
I_FIELDCAT-COL_POS = COLNUM.
I_FIELDCAT-FIELDNAME = 'MATNR'.
I_FIELDCAT-SELTEXT_S = '物料编号'.
I_FIELDCAT-SELTEXT_M = '物料编号'.
I_FIELDCAT-SELTEXT_L = '物料编号'.
I_FIELDCAT-OUTPUTLEN = 10.
I_FIELDCAT-KEY = 'X'.
APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
CLEAR I_FIELDCAT.
COLNUM = COLNUM + 1.
I_FIELDCAT-COL_POS = COLNUM.
I_FIELDCAT-FIELDNAME = 'MAKTX'.
I_FIELDCAT-SELTEXT_S = '物料描述'.
I_FIELDCAT-SELTEXT_M = '物料描述'.
I_FIELDCAT-SELTEXT_L = '物料描述'.
I_FIELDCAT-OUTPUTLEN = 20.
APPEND I_FIELDCAT TO I_FIELDCAT_ALV.
CLEAR I_FIELDCAT.
ENDFORM.
FORM DISPLAY_ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "这两个地方是一定要加上的
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET' "调用用户事件和按钮事件
I_CALLBACK_PROGRAM = W_REPID
IS_LAYOUT = I_LAYOUT
IT_FIELDCAT = I_FIELDCAT_ALV[]
IT_EVENTS = I_EVENTS[]
" i_grid_title = ''
I_SAVE = 'A'
TABLES
T_OUTTAB = ITAB.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB. "调用的FORM
SET PF-STATUS 'TEST1'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM "段程序表明了自定义按钮是做什么用的。可以在SE41
IS_SELFIELD TYPE SLIS_SELFIELD. "中自定义返回值
CASE I_UCOMM.
WHEN '&IC1'.
MESSAGE I888(SABAPDOCU) WITH '双击事件'.
WHEN '&REFRE'.
MESSAGE I888(SABAPDOCU) WITH '刷新事件'.
IS_SELFIELD-REFRESH = 'X'.
CLEAR ITAB[].
ENDCASE.
ENDFORM.
阅读(976) | 评论(0) | 转发(0) |