一 .什么是ALV

      SAP提供一套ALV(Application List viewer.)的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性,对于动态报表程序是一个很有效率的工具。一般的ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。ALV报表显示方式基本上有2种,一种是Grid方式,一种是List方式,分别调用不同的Function来实现。

二.ALV式样

1. REUSE_ALV_GRID_DISPLAY

2. REUSE_ALV_LIST_DISPLAY

3.ALV工具栏

三.ALV函数的调用

      当完成从数据库抽取数据或上传数据,并将数据存放到内部表(IT_ABC)后,开始调用下面的ALV函数模块。

1.指定数据类型组

TYPE-POOLS: SLIS.

DATA:

IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,    “ALV输出项目编辑用

WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,     “ALV输出项目编辑用

WA_LAYOUT   TYPE SLIS_LAYOUT_ALV.         “ALV样式设定用

2.调出函数模块

CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’

   EXPORTING

       IS_LAYOUT     = WA_LAYOUT

       IT_FIELDCAT   = IT_FIELDCAT

   TABLES

       T_OUTTAB      = IT_TAB.

   ……

 3. 函数的各项说明

CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’

   EXPORTING

       I_STRUCTURE_NAME                       =   已经存在SAP系统中的结构

       IS_LAYOUT                                     =   布局             

       IT_FIELDCAT                                  =   自定义

       IT_SORT                                        =   对项目的一个排序

       IT_EVENTS                                    =   标题部分

   ……

四.使用ALV的注意事项

1.在ALV中,需要注意所有添加的需要显示的列,都必须在相应的内表中有对应的字段,否则,只要使用合计或者分类汇总都会导致程序的崩溃。

2.在SAP ABAP程序中,字符串的大小写很重要,在单引号包围的字符串中,一般来说都应该用大写,特别是在调用一些系统的方法时传入字符串参数时,例如在ALV中,

Call Function ‘REUSE_ALV_GRID_DISPLAY’时,

传入的下面的两个参数:

i_callback_pf_status_set = ‘SET_PF_STATUS’

i_callback_user_command  = ‘USER_COMMAND’

就必须使用大写字符串,否则就会出现Perform_not_found的系统错误。

3.另外,传入到ALV中的列对应的字段名称也必须使用大写字母,否则数据不会显示出来。

五.相关参数说明

1.构造SLIS_FIELDCAT_ALV常用参数说明

CLEAR WA_FIELDCAT.

WA_FIELDCAT-FIELDNAME        = ‘MTART‘.      “指定从内表中的输出的数据项目

WA_FIELDCAT-SELTEXT_L         = ‘品目タイプ‘.    “上面指定项目显示时的名称(长文本)

WA_FIELDCAT-SELTEXT_M        = ‘品目タイプ‘.    “上面指定项目显示时的名称(中文本)

WA_FIELDCAT-SELTEXT_S        = ‘品目タイプ‘.    “上面指定项目显示时的名称(短文本)

WA_FIELDCAT-REPTEXT_DDIC  = ‘品目タイプ‘.    “上面指定项目显示时的名称(定义文本)

WA_FIELDCAT-OUTPUTLEN        = 15.               “列的显示宽度

WA_FIELDCAT-HOTSPOT           = ‘X’.              “设置热点状态

   ……

  APPEND WA_FIELDCAT TO IT_FIELDCAT.

注意:有多少个项目列要显示就要这样向内部表IT_FIELDCAT中追加记录多少次。

2.构造SLIS_LAYOUT_ALV常用参数说明

 LAYOUT-ZEBRA                       = ‘X’.                        “斑马线样式

 LAYOUT-COLWIDTH_OPTIMIZE = ‘X’.                        “列宽度自动根据内容优化

 LAYOUT-NO_COLHEAD             = ‘X’.                        “列名称不显示

 LAYOUT-NO_VLINE                  = ‘X’.                        “不表示区分用的垂直线

 LAYOUT-EDIT                          = ‘X’.                        “列值可编辑,只用于GRID

 LAYOUT-WINDOW_TITLEBAR    = ‘ALV窗体的标题’.     “一行

   ……

六.通常调用所使用参数

  CALL FUNCTION’REUSE_ALV_LIST_DISPLAY’

    EXPORTING

      IT_FIELDCAT           = IT_FIELDCAT            “输出项目列文本信息(表头)

      IS_LAYOUT              = L_LAYOUT                “输出列表样式信息

    TABLES

      T_OUTTAB               = IT_ALVOUT               “输出的数据信息(明细)

    EXCEPTIONS

      PROGRAM_ERROR    = 1                   

      OTHERS                  = 2.    

另一种简便的方法:

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’

     EXPORTING

       I_STRUCTURE_NAME         = ‘TY_OUT_FILE’         “输出项目列文本信息(表头)

       IS_LAYOUT                       = L_LAYOUT                “输出列表样式信息

      TABLES

       T_OUTTAB                         = TAB_OUT_FILE        “输出的数据信息(明细)

     EXCEPTIONS

       PROGRAM_ERROR              = 1

       OTHERS                            = 2.

注:TY_OUT_FILE构造必须是数据字典中已经存在的对象。

输出项目繁多时,建议先在数据字典系统中创建构造,然后使用后一种调用方法,这样可免去对输出列表头信息的繁琐编辑处理,使代码行也缩短。