•ALV是SAP List Viewer的简写,是SAP中常用的经典报表输出格式。
•常用的ALV种类有以下6个:
– ALV Grid
– ALV simple List
– 多表格的ALV List
– 层级显示的ALV List
– ALV Tree
– ALV OO
下面的内容将根据不同的ALV类型分开作简绍。
一、ALV Grid
•ALV Grid是最常用的一种Report输出格式。如图
–标准功能强大,且外观上可直接用鼠标拖拽栏位的宽度和顺序,一般无特别要求的报表均采用此种格式; –输出格式与Excel档案相似,当客户要求Download Excel档案时多采用此输出格式; –ALV GRID每个格只能显示不多于128个字符; –不能多行显示1条数据。 •实现方式 –1.构建Field catalog表——输出表的表头栏位; 一般采用Function’ REUSE_ALV_FIELDCATALOG_MERGE’ 得到。 –2.设置Field catalog表中各栏位的相关属性,一般需修改显示名称,显示长度,锁定,是否加总,是否显示等。 –3.输出报表:Call Function’ REUSE_ALV_GRID_DISPLAY’. 二、ALV simple List 与ALV Grid相比较,除了表身在显示上的差别外,其他大致相同。 ALV List更接近标准的write list输出。如下图
–标准功能同Grid大致相同,栏位宽度已最优化显示,但不可直接用鼠标拖拽栏位的顺序,不符合某些用户习惯,故使用范围不如ALV Grid广泛,但当需要翻页时,只能采用List而不能用Grid; –输出格式write类似,一般用于执行事务后返回消息的显示。 –可以多行显示1条数据; –只能显示不多于90个字段的表的数据; –排序的列相同的值不能被合并。 •实现方式 –1.构建Field catalog表——输出表的表头栏位; 与ALV Grid实现方法相同,一般采用Function ’ REUSE_ALV_FIELDCATALOG_MERGE’ 得到。 –2.设置Field catalog表中各栏位的相关属性,一般需修改显示名称,显示长度,锁定,是否加总,是否显示等。 –3.输出报表:Call Function’ REUSE_ALV_LIST_DISPLAY’. 三、多表格的ALV List •区别于Simple List只有一个表身,该种ALV可在一个画面上显示多个表格。如下图:
–当一个报表包含多个表格时需采用此种输出方式; –ALV Simple List需要注意的地方此种List同样需要注意。 •实现方式 –1.构建Field catalog表,有几个不同的表要输出就构建几次; 与ALV Grid实现方法相同,一般采用函数’ REUSE_ALV_FIELDCATALOG_MERGE‘,也可以手动构建。 –2.设置Field catalog表中各栏位的相关属性,一般需修改显示名称,显示长度,锁定,是否加总,是否显示等; –3.初始化屏幕:调用函数‘REUSE_ALV_BLOCK_LIST_INIT’ ; –4.添加数据:调用函数‘REUSE_ALV_BLOCK_LIST_APPEND’ ,有几个表就要调用几次; –5.输出报表:调用函数’REUSE_ALV_BLOCK_LIST_DISPLAY’ . 四、层级显示的ALV List •层级显示的ALV List 在SAP中称为Hierarchical-Sequential List
–这种形式的list,header和item是由相关的字段联系起来的,heade和item数据一对多。当然可以把header和item表分成两个List在同一屏幕显示,但此种List看起来更直观。故当输出的报表数据有header和item的区分时,可以采用此种List。 •实现方式一:Call Method –1.捆绑header和item表 data: lt_binding type salv_t_hierseq_binding. data: ls_binding type salv_s_hierseq_binding. ls_binding-master = (Header和item相关的字段) ls_binding-slave = (Header和item相关的字段) append ls_binding to lt_binding. –2.得到输出表:call method cl_salv_hierseq_table=>factory exporting t_binding_level1_level2 = lt_binding importing r_hierseq = gr_table —得到的输出表 changing t_table_level1 = header表 t_table_level2 = item表. –3.显示报表gr_table->display( ). •实现方式二:Call Function –1.构建Header和Item的栏位。 可以调用函数‘REUSE_ALV_FIELDCATALOG_MERGE’,Header和Item的栏位分别构建后再Append到一个表里。也可以手动构建。 –2.显示数据 调用函数‘REUSE_ALV_HIERSEQ_LIST_DISPLAY’,必传参数如下: EXPORTING it_fieldcat t_fieldcat[] i_tabname_header Header名,引号里大写 i_tabname_item Item名,引号里大写 is_keyinfo 关联Header和Item的栏位 TABLES t_outtab_header Header表 t_outtab_item Item表 五、ALV Tree •ALVTree可以显示多个层级,每个层级在相同的栏位 名下显示;而之前的层级List只能显示两个层级,而且两个层级之间要有主键去关联,数据显示在不同栏位名下。
–一般在输出BOM等层级结构比较明显的数据时使用; –ALV Tree每格最多支持128个字符; –不支持格合并; –没有数据的过滤功能; –系统标准不能Download,需要自己写代码; –只能显示1000个节点; –只支持flat table,不支持deep table。 •实现方式(简单的Tree结构,在屏幕的PBO事件中处理): –1.创建並绘制屏幕和容器: 容器可以不手动绘制,直接指定 cl_gui_container=>screen0 ,可全屏显示 –2.构建栏位名:CALLFUNCTION’LVC_FIELDCATALOG_MERGE’ –3.构建sort表,对输出表进行层级设置 –4.实例化对象:CREATEOBJECTcl_gui_alv_tree_simple –5.输出数据:CALLMETHOD cl_gui_alv_tree_simple SET_TABLE_FOR_FIRST_DISPLAY 六、ALV OO •ALV OO是SAP提供的ALV Object Model ,即用面向对象技术对ALV进行封装,提供相应的工具和方式。
OO的方式 功能更强大更灵活。当用普通的ALV Grid解决不了某些事件的处理时,大部分使用ALV OO就可以解决。 •实现方式 –1. 在screen上定义一个custom control area CREATE OBJECT: obj_wcl_container EXPORTING container_name = ‘OBJ_WCL_CONTAINER’. –2. 生成一个CL_GUI_CUSTOM_CONTAINER class 实例,在构造器参数中传入custom area的名称。 CREATE OBJECT obj_wcl_alv EXPORTING i_parent = obj_wcl_container. –3. 构建Field catalog: CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’ EXPORTING i_structure_name = 传入Structure CHANGING ct_fieldcat= it_fieldcat. –4. 显示报表:CALL METHOD obj_wcl_alv->set_table_for_first_display 总结:以上是ALV 类型的简单介绍,具体每种类型的ALV详细用法,请参考ALV专题的其他教材(如ALV属性和ALV EVENT等)。
几种函数
ALV调用的几个标准函数 ALV的调用主要由以下几个标准函数实现,所有函数的输入输出参数必须大写,否则系统会出现异常中止,相关函数如下: 1)REUSE_ALV_FIENDCATALOG_MERGE:根据内表结构返回FIELDCAT字段结构信息,其常用输入输出参数如下: EXPORTING项: 1.I_PROGRAM_NAME:程序名称。 2.I_INTERNAL_TABNAME:内表名称,必须为输出内表所自定义的STRUCTURE名。 3.I_STRUCTURE_NAME:直接参考数据字典中所定义的透明表名或STRUCTURE名。 函数定义时I_INTERNAL_TABNAME或I_STRUCTURE_NAME参数只需一项。 CHANGING项: CT_FIELDCAT:导出FIELDCAT内表数据。 2)REUSE_ALV_GRID_DISPLAY/REUSE_ALV_LIST_DISPLAY:输出ALV报表,定义其为GRID模式还是LIST模式,两个函数的语法结构一样,其常用输入输出参数如下: EXPORT项: 1.I_CALLBACK_PROGRAM:程序名称。 2.IS_LAYOUT:程序所定义的LAYOUT名称。 3.I_GRID_TITLE:定义ALV标题名。 4.IT_FIELDCAT:定义FIELDCAT数据。 5.IT_EVENTS:定义ALV输出事件。 6.I_CALLBACK_PF_STATUS_SET:定义触发工具栏定义,通常为一个子程序。 7.I_CALLBACK_USER_COMMAND:其对应值一般为子程序名,在对ALV操作时触发所定义子程序(如某表字段的双击事件)。 TABLES项(定义输入内表数据): 1.T_OUTTAB:输入所需显示的内表数据。 3)LAYOUT为一STRUCTURE,其主要字段定义及属性如下: 1.EDIT:设置ALV是否为可编辑模式。 2.COLWIDTH_OPTIMIZE:将ALV字段宽度设置为最优化,按实际输出内容宽度自动匹配。 3.NO_VLINE:输出ALV表格不显示垂直格式。 4.NO_ULINE_HS:输出ALV表格不显示水平格线。 5.INFO_FIELDNAME:设置颜色属性。 6.KEY_HOTSPOT:设置关键字段热点。 7.NO_COLNAME:是否显示字段名。 8.ZEBRA:使ALV表格按斑马线间隔条纹方式显示,以便显示效果更有美观。 9.BOX_FIELDNAME:设置ALV表格是否显示选择按钮字段。 10.INFO_FIELDNAME:用于设置ALV输出报表每一行的颜色,其参数为输出内表的字段名称,要注意的是使用该属性需要同时在内表中定义一个与该参数所定义字段名相同的字段,例如: LAYOUT-INFO_FIELDNAME = 'COLOR'. 倘若其数据输出内表名为LT_OUT,则需要在该内表增加一字段“COLOR”,并为其内表每行复制,颜色参数范围C000~C999,例如: LT_OUT-COLOR = 'C012'. 4)FIELDCAT主要属性介绍 1.KEY:将定义字段设置为KEY值。 2.ICON:将定义字段以ICON的形式显示。 3.CHECKBOX:将定义字段以CHECKBOX的形式显示。 4.JUST:定义字段对齐方式(R)RIGHT、(L)LEFT、(C)CENTER。 5.IZERO:将定义字段以前导"0"的形式显示。 6.NO_SIGN:将定义字段符号设置为不显示。 7.NO_ZERO:定义字段是否显示。 8.EMPHASIZE:设置字段的颜色。 9.DO_SUM:对字段进行汇总。 10.SELTEXT_L/M/S:设置字段名称描述长/中/短。 11.DDICTXT:设置字段显示字符串。 12.HOTSPOT:设置字段是否有热点(热点字段显示有下划线)。 13.NO_OUT:隐藏不需要的字段(NO_OUT = 'X')。