往外张望的人在做梦,向内审视的人才是清醒的。
需求:
******ekpo表部分字段报表,及双击ALV跳转字段详情
使用:
****** ALV–REUSE_ALV_GRID_DISPLAY ******
详细案例:
*&-----------------------------------------*
*&Report XXX_XXX_XX
*&-----------------------------------------*
*& ekpo表部分字段报表,及双击ALV跳转字段详情
*& 使用: REUSE_ALV_GRID_DISPLAY
*&-----------------------------------------*
eport XXX_XXX_XX .
TYPE-POOLS SLIS .
DATA myrepid LIKE sy-repid .
DATA gt_ekpo TYPE TABLE OF ekpo WITH HEADER LINE .
DATA gs_ekpo ekpo .
DATA gt_fieldcat TYPE SLIS_T_FIELDCAT_ALV .
DATA gs_fieldcat TYPE SLIS_FIELDCAT_ALV .
DATA: BEGIN OF item OCCURS 10,
EBELN like EKPO-EBELN,
EBELP like EKPO-EBELP,
LOEKZ like EKPO-LOEKZ,
STATU like EKPO-STATU,
AEDAT like EKPO-AEDAT,
END OF ITEM .
"选择屏幕
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text01 .
SELECT-OPTIONS s_ebeln for gs_ekpo-ebeln OBLIGATORY .
SELECT-OPTIONS s_loekz for gs_ekpo-loekz OBLIGATORY .
SELECT-OPTIONS s_statu for gs_ekpo-statu .
SELECTION-SCREEN:END OF BLOCK blk1 .
"取数
PERFORM get_data .
IF gt_ekpo[] is INITIAL .
MESSAGE '请重新输入查询条件' TYPE 'S' .
EXIT .
ENDIF.
START-OF-SELECTION .
"宏
DEFINE %%append_fieldcat .
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = &1.
gs_fieldcat-fieldname = &2 .
gs_fieldcat-outputlen = &3 .
gs_fieldcat-select_m = &4 .
APPEND gs_fieldcat to gt_fieldcat .
END-OF-DEFINITION .
END-OF-SELECTION .
PERFORM display_data .
"alv
FORM display_data .
PERFORM build_fieldcat .
PERFORM build_alv .
ENDFORM .
FORM get_data .
SELECT
....
FROM ekpo
INTO CORRESPONDING FIELDS OF TABLE gt_ekpo
WHERE ebeln = s_ebeln and
loekz = s_loekz and
statu = s_statu .
ENDFORM .
FORM build_fieldcat .
clear gs_fieldcat .
**
*gs_fieldcat-fieldname = 'EBELN '.
*gs_fieldcat-seltext_l = 'Purchasing Document Number' .
*APPEND gs_fieldcat TO gt_fieldcat .
*...
**这里使用宏定义,方便后期维护 :
%%append_fieldcat: '1' 'EBELN' '10' 'Purchasing Document number' ,
'2' 'EBELP' '15' 'XXXXX' ,
'3' 'LOEKZ' '1' 'XXXXX' ,
...
...
....
ENDFORM .
FORM build_alv .
myrepid = sy-repid .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = myrepid "当前程序名
I_CALLBACK_USER_COMMAND = 'USER_COMMAND' "鼠标事件操作子程序
I_GRID_TITLE = 'Purchasing Document Item'
IT_FIELDCAT = gt_fieldcat "字段定义描述表
TABLES
t_outtab = gt_ekpo
if sy-subrc <> 0 .
endif .
ENDFORM .
FORM user_command USING r_ucomm LIKE sy-ucomm
re_selfield TYPE slis_selfield .
IF r_ucomm = '&IC1' . "鼠标双击
PERFORM po_item_information USING re_selfield .
ENDIF .
ENDFORM.
FORM po_item_information USING re_selfield TYPE slis_selfied .
READ TABLE gt_ekpo INDEX re_selfield-tabindex .
SELECT
..
FROM ekpo
INTO CORRESPONDING FIELDS OF TABLE item
WHERE ebeln = gt_ekpo-ebeln .
PERFORM item_output .
ENDFORM .
FORM item_output .
"定义字段详情
clear gs_fieldcat .
gs_fieldcat-fieldname = 'EBELN '.
gs_fieldcat-seltext_l = 'Purchasing Document Number' .
APPEND gs_fieldcat TO gt_fieldcat .
clear gs_fieldcat .
gs_fieldcat-fieldname = 'EBELP '.
gs_fieldcat-seltext_l = 'ITEM Number of Purchasing Document' .
APPEND gs_fieldcat TO gt_fieldcat .
...
...
...
myrepid = sy-repid .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = myrepid
IT_FIELDCAT gt_fieldcat
TABLES
T_OUTTAB = item
if sy-subrc <> 0 .
endif .
ENDFORM.