SAP ALV-REUSE_ALV_GRID_DISPLAY的简单使用

@

SAP ALV-REUSE_ALV_GRID_DISPLAY的简单使用

ALV的几种显示形式

ALV(SAP LIST VIEW)SAP的一个用来显示报表的组件
查看的路径:Setting--User Parameters--Data Browser


三种显示方式

  • ALV GRID DISPLAY(如下图所示,调用的是REUSE_ALV_GRID_DISPLAY)
    在这里插入图片描述

  • ALV LIST(很丑)

  • SE16 STANDARD LIST(和ALV LIST差不多 如下)
    在这里插入图片描述

数据准备

  • 使用SLIS开头的类型,需要在程序开头(report下)引入类型池,否则会提示找不到该类型(类似Java里面导包)
  • 定义一个PARAMETERS,默认值L-60C(MATNR)
TYPE-POOLS: SLIS.
PARAMETERS: P_MATNR TYPE MATNR DEFAULT 'L-60C'.

定义内表结构,参考表VBAP里面的字段,
定义内表GT_VBAP(取数用),GT_FIELDCAT(下面用到)

TYPES:BEGIN OF TS_VBAP,
        VBELN          TYPE  VBAP-VBELN,
        POSNR          TYPE  VBAP-POSNR,
        MATNR          TYPE  VBAP-MATNR,
        ARKTX          TYPE  VBAP-ARKTX,
        WERKS          TYPE  VBAP-WERKS,
        KWMENG         TYPE  VBAP-KWMENG,
        VRKME          TYPE  VBAP-VRKME,
        SEL            TYPE  CHAR1,
      END OF TS_VBAP.

DATA GT_VBAP       TYPE TABLE OF       TS_VBAP.
DATA GT_FIELDCAT   TYPE                SLIS_T_FIELDCAT_ALV.

建两个PERFROM,一个用于取数,一个用于ALV显示数据

START-OF-SELECTION.

PERFORM GET_DATA."取数

PERFORM DISPLAY_DATA."显示

PERFORM GET_DATA

从数据库表VBAP中取以下字段到内表GT_VBAP

*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       从数据库表VBAP中取以下字段到内表GT_VBAP
*----------------------------------------------------------------------*
FORM GET_DATA .
  SELECT  VBELN
          POSNR
          MATNR
          ARKTX
          WERKS
          KWMENG
          VRKME
   FROM VBAP
   INTO TABLE GT_VBAP
   WHERE MATNR = P_MATNR.
ENDFORM.                    " GET_DATA

REUSE_ALV_GRID_DISPLAY函数的使用

PERFORM DISPLAY_DATA

调用REUSE_ALV_GRID_DISPLAY
这里可以提前准备一个PERFORM SET_FIELDCAT,等会儿会用到

FORM DISPLAY_DATA .

* Field catalog   赋值
PERFORM SET_FIELDCAT.


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
 *   I_INTERFACE_CHECK                 = ' '
 *   I_BYPASSING_BUFFER                = ' '
 *   I_BUFFER_ACTIVE                   = ' '
 *   I_CALLBACK_PROGRAM                = ' '
 *   I_CALLBACK_PF_STATUS_SET          = ' '
 *   I_CALLBACK_USER_COMMAND           = ' '
 *   I_CALLBACK_TOP_OF_PAGE            = ' '
 *   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
 *   I_CALLBACK_HTML_END_OF_LIST       = ' '
 *   I_STRUCTURE_NAME                  =
 *   I_BACKGROUND_ID                   = ' '
 *   I_GRID_TITLE                      =
 *   I_GRID_SETTINGS                   =
 *   IS_LAYOUT                         =
   IT_FIELDCAT                       = GT_FIELDCAT
 *   IT_EXCLUDING                      =
 *   IT_SPECIAL_GROUPS                 =
 *   IT_SORT                           =
 *   IT_FILTER                         =
 *   IS_SEL_HIDE                       =
 *   I_DEFAULT                         = 'X'
 *   I_SAVE                            = ' '
 *   IS_VARIANT                        =
 *   IT_EVENTS                         =
 *   IT_EVENT_EXIT                     =
 *   IS_PRINT                          =
 *   IS_REPREP_ID                      =
 *   I_SCREEN_START_COLUMN             = 0
 *   I_SCREEN_START_LINE               = 0
 *   I_SCREEN_END_COLUMN               = 0
 *   I_SCREEN_END_LINE                 = 0
 *   I_HTML_HEIGHT_TOP                 = 0
 *   I_HTML_HEIGHT_END                 = 0
 *   IT_ALV_GRAPHICS                   =
 *   IT_HYPERLINK                      =
 *   IT_ADD_FIELDCAT                   =
 *   IT_EXCEPT_QINFO                   =
 *   IR_SALV_FULLSCREEN_ADAPTER        =
 * IMPORTING
 *   E_EXIT_CAUSED_BY_CALLER           =
 *   ES_EXIT_CAUSED_BY_USER            =
  TABLES
    T_OUTTAB                          = GT_VBAP
 * 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.                    " DISPLAY_DATA

PERFORM SET_FIELDCAT

  • IT_FIELDCAT 控制ALV要显示表哪些列的
  • 使用前需定义一张表,表类型参考SLIS_T_FIELDCAT_ALV(最上面已经定义了)
  • 参考该表定义工作区LS_FIELDCAT
  • 给这张内表的FIELDNAME字段赋值
*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM SET_FIELDCAT .
  DATA : LS_FIELDCAT LIKE LINE OF GT_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'VBELN'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'POSNR'.
  APPEND LS_FIELDCAT TO GT_FIELDCAT.
  CLEAR LS_FIELDCAT.


ENDFORM.                    " SET_FIELDCAT

运行程序
效果(显示的是VBELN部分的数据)
在这里插入图片描述
注意:执行的先后顺序,给FIELDCAT赋值要在T_FIELDCAT = GT_FIELDCAT之前!!!!

posted @ 2021-03-01 16:01  satoyama  阅读(477)  评论(0)    收藏  举报