ALV (ABAP LIST VIEWER)
ALV相关概念
●ALV――ABAP LIST VIEWER,这里姑且称之为ABAP表单浏览器,用它可以标准化,简单
化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。
●ALV即能显示简单表单(SIMPLE LIST)又能显示有序表单(SEQUENTIAL LIST):
●简单表单(SIMPLE LIST)包含一系列不分层次的(NON-HIERARCHICAL),用户自定义的
列。
●层次表(即有序表SEQUENTIAL LIST)包含列表头以及它的子行,一个列表头的关键行
能带出它下面的一些列项目(我们自己理解的时候可以想到BOM表的层次结构)。
●我们还可以在简单表单以及关联表单中显示小计和总计。
ALV List的具体的实例
ALV List画面布局--STATUS
●ALV的快捷工具栏,提供了丰富的功能快捷键。除了系统提供的标准按钮之外,还可以
通过添加或修改的方式扩展,DO和RESET就是添加的功能键。也可以根据实际的需要删除某些快捷键。
●标准快捷工具栏程序:SAPLSLVC_FULLSCREEN
●名称:STANDARD_FULLSCREEN
●在T-CD SE41里面可以采取复制的方式将标准程序的标准快捷工具栏复制到自己的
程序里面。
●
ALV List画面布局--HEADER
●这个区域主要是用来显示一些抬头信息(总揽信息),类似于WORD中的页眉。我们
在使用的时候根据需要来进行相关填写。
●输出实现是通过事件来触发的。
ALV List画面布局--表单显示区
●最上面的文本是各字段的描述文字。
●最左边的空白按钮是可选择按钮,功能同于CHECKBOX,即按下表示该条记录被选中。
●中间数据区域以表格的形式显示数据,可以控制排序方式,颜色,是否可修改等属性。
●最下面黄色的部分是合计结果。
ALV List画面布局--FOOTER
●这个区域主要是用来显示一些页脚信息,类似于WORD中的页脚。我们在使用的时候
根据需要来进行相关填写。
●输出实现是通过事件来触发的,和HEADER类似。
创建ALV List Report--1 定义
引用类型池SLIS(SLIS是ALV程序必须的)
TYPE-POOLS:SLIS
DATA:
定义存放显示数据的内表(根据每本程序的需要定义各自的结构)
GIT_PODATA TYPE TABLE OF T_PODATA,
定义存放显示数据的工作区(根据每本程序的需要定义各自的结构)
GWA_PODATA TYPE T_PODATA,
定义存放画面布局控制数据的工作区
GWA_LAYOUT TYPE SLIS_LAYOUT_ALV,
定义存放字段信息的带工作区的内表
GIT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
定义存放排序信息的带工作区的内表
GIT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
定义存放抬头信息的内表
GIT_HEADER TYPE SLIS_T_LISTHEADER WITH HEADER LINE,
定义存放页脚信息的带工作区的内表
GIT_FOOTER TYPE SLIS_T_LISTHEADER WITH HEADER LINE,
定义存放事件的带工作区的内表
GIT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE,
创建ALV List Report--2 取数据
根据各自的业务处理得到数据,参考下例。
DEFINE TYPES
TYPES:
THE TYPE OF PURCHASE-ORDER TABLE
BEGIN OF T_PODA TA,
CHECK TYPE CHECKBOX,
AEDAT LIKE EKKO-AEDA T,
EBELN LIKE EKKO-EBELN,
MATNR LIKE EKPO-MATNR,
TXZ01 LIKE EKPO-TXZ01,
MENGE LIKE EKPO-MENGE,
MEINS LIKE EKPO-MEINS,
NETPR LIKE EKPO-NETPR,
W AERS LIKE EKKO-WAERS,
END OF T_PODATA.
注:CHECK 的定义并不是为了从数据库得到数据,而是用来存放
是否被选择的信息。它是和每条数据相关的,所以必须定义在这个
结构里面
创建ALV List Report--3 CALL ALV FUNCTION
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = G_REPID “传入返回的程序,一般是当前程序名
IS_LAYOUT = GWA_LAYOUT “传入ALV 显示格式控制数据
I_CALLBACK_PF_STATUS_SET = ‘F_SET_ALV_ST ‘ “传入处理STATUS 的Form 名字
I_STRUCTURE_NAME = ‘GIT_PODATA ‘ “传入数据表内表的名字
IT_FIELDCAT = GIT_FIELDCAT[] “传入显示字段的内表
IT_SORT = GIT_SORT[] “传入排序字段的内表
I_DEFAULT = ‘X
‘ “设置为X 表示采用默认的显示格式
I_SAVE = ‘A
‘ “设置为A 表示可以保存ALV 显示格式
IT_EVENTS = GIT_EVENT[] “传入 SELECT EKKO~AEDAT
EKKO~EBELN
EKPO~MA TNR
EKPO~TXZ01
EKPO~MENGE
EKPO~MEINS
EKPO~NETPR
EKKO~W AERS
EKPO~NETWR
FROM EKKO INNER JOIN EKPO
ON EKKO~EBELN = EKPO~EBELN
INTO CORRESPONDING FIELDS OF TABLE GIT_PODATA
WHERE EKKO~BUKRS = P_BUKRS
AND EKKO~LIFNR = P_LIFNR
AND EKKO~AEDAT IN S_DATE.
事件内表
I_CALLBACK_USER_COMMAND = ‘F_COMMAND’“传入处理动作和命令的Form 名字
TABLES
T_OUTTAB = GIT_PODATA “传入数据内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
创建ALV List Report--4 设置LAYOUT属性
CALL FUNCTION部分
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
……
IS_LAYOUT = GWA_LAYOUT “传入ALV 显示格式控制数据
……
LAYOUT设置部分
FORM F_SET_LAYOUT.
GWA_LAYOUT-BOX_FIELDNAME = ‘CHECK’. “存放选择信息,在数据内表中已定义
GWA_LAYOUT-ZEBRA = ‘X’. “带条纹模式,隔行换色
GWA_LAYOUT-DETAIL_POPUP = SPACE. “采用默认的POPUP模式
GWA_LAYOUT-F2CODE = ‘&ETA’. “触发POPUP功能码,&ETA表示双击
GWA_LAYOUT-COLWIDTH_OPTIMIZE = ‘X’. “优化列宽,自动适应内容长度
GWA_LAYOUT-DETAIL_TITLEBAR = ‘详细’. “POPUP窗口标题ENDFORM. " F_SET_LAYOUT
创建ALV List Report--5 设置STATUS
CALL FUNCTION部分
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
……
I_CALLBACK_PF_STATUS_SET = ‘F_SET_ALV_ST‘“传入处理STATUS的Form名字
……
FORM 部分
&---------------------------------------------------------------------
& Form F_SET_ALV_ST
&---------------------------------------------------------------------
SET STATUS
----------------------------------------------------------------------
FORM F_SET_ALV_ST USING I_PARAM TYPE SLIS_T_EXTAB. SET PF-STATUS 'YTEST_ALV_ST'.
ENDFORM. "F_SET_ALV_ST
创建ALV List Report--5 设置STATUS
复制标准STATUS
创建ALV List Report--5 设置STATUS
设置自己的STATUS
创建ALV List Report-- 6 设置显示字段
CALL FUNCTION部分
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
……
IT_FIELDCAT = GIT_FIELDCAT[] “传入显示
字段的内表
……
方式1.手动设置各属性,每个字段设置一次,做成一条数据APPEND进FIELDCAT内表中。FORM F_SET_HEADER.
……(其他字段的设置)
GIT_FIELDCAT-FIELDNAME = ‘AEDAT’. “在数据内表中定义的字段的名字 GIT_FIELDCAT-SELTEXT_L = ‘PO Date’. “在ALV中显示的字段的描述
GIT_FIELDCAT-KEY = ‘X’. “KEY字段,ALV中显示为深色
……(其他属性请参考下页)
APPEND GIT_FIELDCAT.
CLEAR GIT_FIELDCAT.
……(其他字段的设置)
ENDFORM
幻灯片16
创建ALV List Report-- 6 设置显示字段
FIELDCAT主要字段和属性
col_pos 输出列
tabname 标签名称
currency(5) 货币单位
quantity(3) 计量单位
qfieldname 参考计量单位的字段名称
round ROUND 值
exponent(3) 流动表示的指数
key(1) 关键字段
icon(1) 作为图标输出
symbol(1) 输出作为符号
checkbox(1) 作为复选框输出
just(1) 对齐
lzero(1) 输出前导零
no_sign(1) 输出抑制符号
no_zero(1) 为输出隐藏零
edit_mask 为输出编辑掩码
emphasize(4) 带有颜色的高亮列
fix_column(1) 固定列
do_sum(1) 总计列值
no_out(1) 列没有输出
tech(1) 技术字段
outputlen 列的字符宽度
decimals_out 能控制小数点的位数
幻灯片17
创建ALV List Report-- 6 设置显示字段
方式2. CALL FUNCTION REUSE_ALV_FIELDCATALOG_MERGE来获取数据字典中各个字段的属性,适用于所有的字段来自于同一个表或结构。如果是不同的表或结构,需要各自获取,
获取的属性同表或结构中该字段的属性。
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = G_REPID “程序名,当前程序
I_STRUCTURE_NAME = ‘EKKO’“获取属性的表或结构名
I_INTERNAL_TABNAME = ‘GIT_PODATA’“存放数据的内表CHANGING
CT_FIELDCAT = GIT_FIELDCAT “获得的字段属性内表
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
注:通常情况下,直接获取的字段属性可能还不能满足需要,可以通过MODIFY GIT_FIELDCAT 内表的方式来修改某些属性,各属性字段请参考上页。
幻灯片18
创建ALV List Report-- 7 设置排序
CALL FUNCTION部分
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
……
IT_SORT = GIT_SORT[] “传入排序字段的内表
……
排序设置部分
FORM F_SET_SORT.
GIT_SORT-SPOS = ‘01’. “排序顺序,按照01,02……的顺序排列
GIT_SORT-FIELDNAME = ‘AEDAT’. “排序的字段
GIT_SORT-UP = ‘X’. “升序排列
……(其他排序字段)
ENDFORM. " F_SET_SORT
注:设置了排序的字段,同一值在ALV中会自动合并只显示一次。