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之前!!!!