ALV概览
- ALV全称 SAP List View,是SAP提供的一个强大的数据报表显示工具
- ALV实质上是一个屏幕空间对象,它通过程序传递数据内表的方式来显示数据
基本概念
1、 类型池:SLIS
- 类型池是以INCLUDE技术为基础的,组合多种数据类型进行声明时使用类型组
- 包含许多系统自定义的数据类型及类型组,如ALV要用到的数据类型都包含在SLIS这个类型池里
2、Fieldcat TYPE slis_t_fieldcat_alv
- 列格式设置(表单)
- 字段名称,列是否可修改等
3、 Layout TYPE slis_layout_alv
- 全局格式设置(结构)
- 整表字段是否可修改,是否以斑马纹输出,是否显示选择按钮字段等
4、函数:REUSE_ALV_FIELDCDATALOG_MERGE
- 根据内表结构返回FIELDCAT字段结构信息
5、函数:REUSE_ALV_GRID_DISPLAY / REUSE_ALV_LIST_DISPLAY
- 使用GRID/LIST模式输出ALV报表
ALV调用涉及内容
1、关键字解释:
- START-OF-SELECTION :当结束了选择画面的时候,程序会从这里进行处理
- END-OF-SELECTION :即START-OF-SELECTION相关事件执行完成,但输出屏幕还未显示之前。在实际开发中,主要应用于一些执行结果的检验等。其输出数据叠加于同一输出屏幕中。
2、START-OF-SELECTION
- 数据表单数据选取
3、END-OF-SELECTION
- 对FIELDCAT赋值:设置每列格式
- 对LAYOUT赋值:设置表单格式(可选)
- 对SORT表等赋值:设置排序内容(可选)
- 对EVENT表赋值:增加程序交互事件(可选)
- 调用函数,输出ALV
Fieldcat介绍
- Fieldcat是一张内表,记录的是ALV输出时每列的属性信息
字段 | 说明 |
---|---|
KEY | 将列设置为关键字(‘X’/’’) |
ICON | 以图标显示(‘X’/’’) |
CHECKBOX | 以复选框显示(‘X’/’’) |
JUST | 定义对齐方式(‘X’/’’) |
IZERO | 增加前导零(‘X’/’’) |
NO_SIGN | 不显示符号(‘X’/’’) |
NO_ZERO | 不显示前导零(‘X’/’’) |
COL_POS | 作为第几列输出(数字) |
DO_SUM | 对字段进行汇总(‘X’/’’) |
SELTEXT_L/M/S | 字段名称描述长/中/短(字符串) |
HOTSPOT | 设置为热点(显示为有下划线)(‘X’/’’) |
DEMO
程序结构
REPORT z_test_01.
INCLUDE z_test_01top. "存放变量
INCLUDE z_test_01form. “存放子历程
START-OF-SELECTION.
PERFORM get_data. “获取数据
END-OF-SELECTION.
IF gty_ekpo[] IS NOT INITIAL.
PERFORM write_data. “展示数据
ENDIF.
Z_TEST_01TOP
TYPE-POOLS slis . "类型池
DATA:gt_fieldcat TYPE slis_t_fieldcat_alv, "fieldcat内表
gs_fieldcat TYPE slis_fieldcat_alv. "fieldcat结构
DATA:BEGIN OF gty_ekpo OCCURS 0 . “输出的内表
INCLUDE STRUCTURE ekpo.
DATA: icon TYPE char4.
DATA:END OF gty_ekpo.
Z_TEST_01FORM
*&---------------------------------------------------------------------*
*& 包含 Z_TEST_01FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM get_data .
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gty_ekpo
FROM ekpo UP TO 20 ROWS ORDER BY ebeln.
LOOP AT gty_ekpo.
gty_ekpo-icon = ICON_GREEN_LIGHT.
MODIFY gty_ekpo.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form WRITE_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM write_data .
PERFORM build_fieldcat.
PERFORM build_alv.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM build_fieldcat .
CLEAR gt_fieldcat[].
PERFORM add_fieldcat USING 'ICON' 'ICON' '1' '10' ''.
PERFORM add_fieldcat USING 'EBELN' '采购凭证' '1' '10' ''.
PERFORM add_fieldcat USING 'EBELP' '项目' '1' '10' ''.
PERFORM add_fieldcat USING 'MENGE' '采购订单数量' '1' '10' 'X'.
ENDFORM.
FORM add_fieldcat USING p_fieldname
p_seltext
p_col
p_len
p_sum.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = p_fieldname.
gs_fieldcat-seltext_m = p_seltext.
gs_fieldcat-col_pos = p_col.
gs_fieldcat-outputlen = p_len.
gs_fieldcat-do_sum = p_sum.
APPEND gs_fieldcat TO gt_fieldcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM build_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = gt_fieldcat
TABLES
t_outtab = gty_ekpo.
ENDFORM.