ALV是SAP List Viewer(也作ABAP List Viewer),是SAP中常用的经典报表输出格式。常用的ALV种类有以下6个:
●ALV表格(ALV Grid)。
●ALV简单列表(ALV Simple List)。
●多表格的ALV列表。
●层级显示的ALV列表(Hierarchical-Sequential List)。
●面向对象ALV。
●ALV树。
下面的内容将根据不同的ALV类型分开介绍。
1.ALV表格
ALV表格是最常用的一种报表输出格式,如图2-1所示。
图2-1
(1)适用范围
●标准功能强大,且外观上可直接用鼠标拖拽栏位的宽度和顺序,一般无特别要求的报表均采用此格式。
●输出格式与Excel文档相似,当客户要求下载Excel文档时,多采用此输出格式。ALV表格每个格只能显示不多于128个字符,不能多行显示1条数据。
(2)实现方式
●构建字段目录(Field Catalog)表(输出表的表头栏位),一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’取得。
●设置字段目录表中各栏位的相关属性,一般需修改显示名称、显示长度、锁定、是否加总、是否显示等。
●输出报表:Call Function‘REUSE_ALV_GRID_DISPLAY’。
2.ALV简单列表(SimpleList)
与ALV表格相比,除了报表自身在显示上的差别外,其他大致相同。ALV列表更接近标准的一览输出,如图2-2所示。
图2-2
(1)适用范围
●标准功能同ALV表格大致相同,栏位宽度已最优化显示,但不可直接用鼠标拖拽栏位的顺序,这不符合某些用户习惯,故使用范围不如ALV表格广泛,但当需要翻页时,只能采用ALV列表而不能用ALV表格。
●输出格式一览类似,一般用于执行事务后返回消息的显示,可以多行显示1条数据,但只能显示不多于90个字段的表的数据,且排序的列相同的值不能被合并。
(2)实现方式
●构建字段目录(Field Catalog)表,与ALV表格实现方法相同,一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’得到。
●设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、是否加总、是否显示等。
●输出报表:Call Function‘REUSE_ALV_LIST_DISPLAY’。
3.多表格的ALV列表
区别于ALV简单列表只有一个表身,该种ALV可在一个画面上显示多个表格,如图2-3所示。
图2-3
(1)适用范围
●当一个报表包含多个表格时,需采用此种输出方式。
●ALV简单列表需要注意的地方此种列表同样需要注意。
(2)实现方式
●构建字段目录表,有几个不同的表要输出就构建几次。与ALV表格实现方法相同,一般采用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,也可以手动构建。
●设置字段目录表中各栏位的相关属性,一般需要修改显示名称、显示长度、锁定、是否加总、是否显示等;
●初始化屏幕:调用函数‘REUSE_ALV_BLOCK_LIST_INIT’。添加数据:调用函数‘REUSE_ALV_BLOCK_LIST_APPEND’,有几个表就要调用几次。输出报表:调用函数'REUSE_ALV_BLOCK_LIST_DISPLAY’。
4.层级显示的ALV列表
层级显示的ALV List在SAP中称为层级显示列表,如图2-4所示。
图2-4
(1)适用范围
这种形式的列表、表头和明细是由相关的字段联系起来的,表头和明细数据一对多。当然可以把表头和明细表分成两个列表在同一屏幕显示,但此种列表看起来更直观。所以当输出的报表数据有表头和明细的区分时,可以采用此种列表。
(2)实现方式一:Call Method(面向对象)
●捆绑表头和明细表
SALV_T_HIERSEQ_BINDING(表头和明细相关的字段表类型)SALV_S_HIERSEQ_BINDING(表头和明细相关的字段结构体)
●得到输出表:调用方法CL_SALV_HIERSEQ_TABLE=>FACTORY,取到的输出表对象(CL_SALV_HIERSEQ_TABLE)。
●显示报表:调用方法DISPLAY输出表对象(CL_SALV_HIERSEQ_TABLE)->display()。
(3)实现方式二:Call Function
●构建表头和明细的栏位。
可以调用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,表头和明细的栏位分别构建后再追加到一个表里。也可以手动构建。
●显示数据:调用函数‘REUSE_ALV_HIERSEQ_LIST_DISPLAY’。
5.ALV树
ALV树形结构可以显示多个层级,每个层级在相同的栏位名下显示;而之前的层级列表只能显示两个层级,而且两个层级之间要有主键去关联,数据显示在不同栏位名下,如图2-5所示。
(www.daowen.com)
图2-5
(1)适用范围
●一般在输出物料清单等层级结构比较明显的数据时使用,ALV树每格最多支持128个字符。
●不支持格合并,没有数据的过滤功能,系统标准没有下载功能,需要自己写代码。
●只能显示1000个节点,只支持平面表,不支持多维表。
(2)实现方式(简单的Tree结构,在屏幕的PBO事件中处理)
●创建并绘制屏幕和容器:容器可以不手动绘制,直接指定属性CL_GUI_CONTAINER=>SCREEN0,可全屏显示。
●构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。
●构建排序表,对输出表进行层级设置。
●实例化对象:CREATE OBJECT cl_gui_alv_tree_simple。
●输出数据:CALL METHOD实例化对象(cl_gui_alv_tree_simple)->SET_TABLE_FOR_FIRST_DISPLAY。
6.面向对象ALV
面向对象ALV是SAP提供的ALV的对象模式(Object Model),即用面向对象技术对ALV进行封装,提供相应的工具和方式,如图2-6所示。。
图2-6
(1)适用范围
面向对象的方式,功能更强大、更灵活。当用普通的ALV表格解决不了某些事件的问题时,大部分使用面向对象就可以解决。
(2)实现方式
1)框架(带控件)
●在画面上定义一个定制控件并实例化对象OBJ_WCL_CONTAINER。
●生成一个CL_GUI_CUSTOM_CONTAINER类实例,在构造器参数中传入定制控件的名称。
●构建栏位名:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'。
●显示报表:CALL METHOD类实例(CL_GUI_CUSTOM_CONTAINER)->set_table_for_first_display。
2)封装(不带控件)
a.首先要取得类CL_SALV_FUNCTIONS的实例,根据类CL_SALV_TABLE的方法get_functions可以取得功能实例。
b.根据类CL_SALV_TABLE的方法set_screen_status设置功能栏。
c.自定义功能的实现
ALV的自定义功能的实现动作要通过类的事件来处理。
●首先定义事件的操作类。
●实现事件的操作类。
●注册事件。
d.显示列表
总结:以上是ALV类型的简单介绍,具体每种类型的详细用法,参照如下函数的详细说明。就ALV的形式和实现总结如下:
a.基于ABAP基本列表的ALV。
●简单表单实现:调用函数REUSE_ALV_LIST_DISPLAY。
●多表单实现:调用函数REUSE_ALV_HIERSEQ_LIST_DISPLAY。
●树形表单实现:调用函数RS_TREE_LIST_DISPLAY。
b.基于SAP控制框架(Control Framework)。
●函数调用实现(全画面模式):调用函数REUSE_ALV_GRID_DISPLAY和REUSE_ALV_GRID_DISPLAY_LVC。
●面向对象实现:使用类CL_GUI_ALV_GRID及CL_GUI_ALV_TREE。
c.基于面向对象的封装。
●通过封装调用以下类中的方法:CL_SALV_TABLE、CL_SALV_HIERSEQ_TABLE
和CL_SALV_TREE。
注:面向对象的方式创建ALV表格控件,是控制框架(Control Framework)中的一个组件,另外也可以采用CL_SALV_TABLE、CL_SALV_HIERSEQ_TABLE、CL_SALV_TREE等。后者创建可以是列表(List)形式,也可以是表格(Grid)形式,是目前SAP推荐的创建方式,是在NetWeaver 2004以后支持的版本。
全屏幕的表格控件有个对应的函数REUSE_ALV_GRID_DISPLAY_LVC,支持面向对象的处理。面向对象的方式功能更强大一些,这种方式支持求最大值、最小值等标准功能。目前SAP中的组件已经以面向对象方式重写,采用面向对象方式来编写是以后的发展方向。
●相关类:
CL_GUI_ALV_GRID:ALV表格组件类,ALV List Viewer。
CL_GUI_CUSTOM_CONTAINER:画面中客户化控件的容器类。
●相关类型:
LVC_T_FCAT:清单观察器控制的字段目录。
LVC_S_FCAT:ALV控制的字段目录。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。