最近在项目上不断的写报表,自己总结一套模板、框架,下载下来,然后每次新建报表上传,再实现一些方法,减少了一些不必要的重复体力劳动。
如何使用:
实现GET_DATA,完成取数逻辑;
在INIT_FIELDCAT中定义了一个宏SET_FIELDCAT,用于设置表头,接受两个参数,第一个为字段名,第二个为表头显示的名字;
需要自建一个名为Z_ALV_STATUS的GUI STATUS。
*&---------------------------------------------------------------------*
*& Report ZALV_TEMPLATE
*&
*&---------------------------------------------------------------------*
*程序名称:
*程序名:
*开发日期:
*创建者:
*申请者:
*----------------------------------------------------------------------*
*变更记录
*
*----------------------------------------------------------------------*
REPORT ZALV_TEMPLATE MESSAGE-ID ZCOMM.
TYPE-POOLS:SLIS.
TYPES:BEGIN OF TY_TAB,
FIELDS TYPE C, "显示字段
END OF TY_TAB.
DATA:IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
G_LAYOUT TYPE SLIS_LAYOUT_ALV,
G_REPID LIKE SY-REPID VALUE SY-REPID.
DATA:IT_ITAB TYPE STANDARD TABLE OF TY_TAB.
SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN END OF BLOCK BLK.
INITIALIZATION.
START-OF-SELECTION.
PERFORM GET_DATA.
IF IT_ITAB IS INITIAL.
MESSAGE S000 DISPLAY LIKE 'E'.
ELSE.
PERFORM INIT_FIELDCAT.
PERFORM INIT_LAYOUT.
PERFORM OUTPUT.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* 获取数据
*----------------------------------------------------------------------*
FORM GET_DATA.
ENDFORM. "GET_DATA
*&---------------------------------------------------------------------*
*& Form INIT_FIELDCAT
*&---------------------------------------------------------------------*
* 初始化表头
*----------------------------------------------------------------------*
FORM INIT_FIELDCAT.
DATA:LW_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DEFINE SET_FIELDCAT.
CLEAR LW_FIELDCAT.
LW_FIELDCAT-FIELDNAME = &1.
LW_FIELDCAT-SELTEXT_S = &2.
LW_FIELDCAT-SELTEXT_M = LW_FIELDCAT-SELTEXT_S.
LW_FIELDCAT-SELTEXT_L = LW_FIELDCAT-SELTEXT_S.
APPEND LW_FIELDCAT TO IT_FIELDCAT.
END-OF-DEFINITION.
ENDFORM. "INIT_FIELDCAT
*&---------------------------------------------------------------------*
*& Form INIT_LAYOUT
*&---------------------------------------------------------------------*
* 初始化布局
*----------------------------------------------------------------------*
FORM INIT_LAYOUT.
G_LAYOUT-DETAIL_POPUP = 'X'. "双击弹出明细窗口
G_LAYOUT-F2CODE = '&ETA'.
G_LAYOUT-ZEBRA = 'X'. "斑马线
ENDFORM. "INIT_LAYOUT
*&---------------------------------------------------------------------*
*& Form OUTPUT
*&---------------------------------------------------------------------*
* 输出ALV
*----------------------------------------------------------------------*
FORM OUTPUT.
G_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IS_LAYOUT = G_LAYOUT
IT_FIELDCAT = IT_FIELDCAT[]
I_SAVE = 'A'
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = IT_ITAB
EXCEPTIONS
PROGRAM_ERROR = 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.
ENDFORM. "OUTPUT
*&---------------------------------------------------------------------*
*& Form PF_STATUS_SET
*&---------------------------------------------------------------------*
* 设置GUI Status
*----------------------------------------------------------------------*
* -->TR_EXTAB text
*----------------------------------------------------------------------*
FORM PF_STATUS_SET USING TR_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'Z_ALV_STATUS'.
ENDFORM. "PF_STATUS_SET
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
* 接受用户操作和命令
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM USER_COMMAND USING UCOMM LIKE SY-UCOMM SELFIELD TYPE SLIS_SELFIELD.
ENDFORM. "USER_COMMAND
浙公网安备 33010602011771号