ALV报表模板

最近在项目上不断的写报表,自己总结一套模板、框架,下载下来,然后每次新建报表上传,再实现一些方法,减少了一些不必要的重复体力劳动。

如何使用:

实现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
原文地址:https://www.cnblogs.com/raychenfj/p/3076391.html