`

ALV 报表小结一

阅读更多
2009-02-23
在PA教程中,对ALV的创建采用了ALV Control Grid的方式, 跟实际开发中的方式有些不同, 经过几周的实际开发,有了些认识,记录下来.


ALV的创建一般有两种方式: 1> 采用function module,    2> OOPS abap
两种创建方式有对应的适用范围,也有一些交集,可以参考下图: 

可以看到需要创建ALV list/ hierachical list,   Fullscreen grid时可以采用Function module.并且是向后兼容的
而我们创建ALV grid or tree control时则要采用OO的创建方法,在6.4之前也是适用的,但使用OO ALV wrapper to control时,则适用于6.4之后的版本.
NW WAS 与R3 4.6之间还是有较大的改变,整个平台扩展了许多东西, 像web service, OO的大规模使用,而且据说是采用SOA策略的实现,

一 .FM

在使用FM来实现ALV时,对应于fullscreen alv,   Type-pool:   SLIS非常重要,它定义了FM中的许多参数类型.
1 . ALV是种展现手段,那么它就会涉及到定义数据选择条件,数据获取,数据展现,事件处理等步骤.
1> 在定义选择条件时,可以采用Selection screen来定义条件,可以定义一个值(PARAMETERS),也可以定义一个范围(SELECTION-OPTIONS),方便的很,如果程序中如果有动态条件的话,可以考虑采用RANGES来, 并且有个小技巧是采用 ( ) 来动态执行SQL.简单例子如下.
    select * into itab
                from sflight
                where (wheretab)
wheretab 是个行项类型是字符型的内表, 它的每一行就是一个选择条件字符串.
对于这种动态语句尽量避免使用,因为它在运行时才能确定执行语句,并且可以避过编译时的语法检查.
注: SAP标准程序中可以看到这种用法,如FM:  SD_PARTNER_READ.
       SELECT  * FROM  (object ) INTO  TABLE  l_vbpa WHERE  vbeln = f_vbeln. 它是将选取的数据表动态化了.

2> 数据选取
  这里一般对程序性能影响最大,关注点在于对数据库表的访问,内表的操作等方面.

3> 数据展现
  field catalog:它是一个内表,对应于每一列的显示选项的技术性信息或额外的信息,像hotspot的定义,这一列显示不显示等.
  layout structure: layout for grid,可以定义一些GRID的配置,像求总选项,

4> 事件处理
  对于双击事件,hotspot的处理, TOP-OF-PAGE, END-OF-LIST等.

2.相关的FM.
REUSE_ALV_VARIANT_DEFAULT_GET
REUSE_ALV_VARIANT_F4
REUSE_ALV_VARIANT_EXISTENCE
REUSE_ALV_EVENTS_GET:  包含事件名称与事件处理form名称的内表
REUSE_ALV_COMMENTARY_WRITE
REUSE_ALV_FIELDCATALOG_MERGE: 根据ABAP Dictionary中的Transparent table , Structure, View等生成一个field catalog
REUSE_ALV_LIST_DISPLAY: 以list形式显示结果
REUSE_ALV_GRID_DISPLAY: 以Grid形式显示结果
REUSE_ALV_POPUP_TO_SELECT

粗线标识的是最经常使用的.


3. field catalog
1>它是对输出表的字段的描述,定义了字段的输出属性.
   比如:
col_pos     字段在表中第几列,
fieldname   输出的字段名,如果此字段是CURR(currency field) ,QUAN(Quantity field) 需要指定相应的CUKY, UNIT字段.设置,Cfieldname Ctabname 和Qfieldname    Qtabname
no_out       隐藏此列,不输出,但注意用户可以change layout来显示出此列.
hotspot       设置此列的所有cell为热点, 单击即可触发相应function.
do_sum       此列求总
no_zero      只输出有意义的值,空值不输出.
edit_mask 对字段像WRITE般设置格式化.
just            R L 调整对齐方式

调整输出列抬头的文本:文本可以随着用户调整列的宽度而变化,其文本即是在对应data element中定义的,如果需要定制,则可以指定以下字段
  seltext_l (long field label)
  seltext_m (medium field label)
  seltext_s (short field label)
  reptext_ddic (header) Analogous to the Data element main header
  Ddictxt (specify text): You can specify with values 'L', 'M', and 'S',直接指定文本显示长文本,中,短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化.

2> 如何构建
   A. 手工构建
      创建SLIS_T_FIELD_ALV类型的内表,  行项类型为SLIS_FIELD_ALV 对每个字段的相应属性进行设置后,加入内表.
           CLEAR X_FIELDCAT.
        X_FIELDCAT-COL_POS    = 12.
        X_FIELDCAT-FIELDNAME  = 'DMBTR'.
        X_FIELDCAT-TABNAME    = 'I_TAB'.
        X_FIELDCAT-SELTEXT_M  = 'Local curr'.
        X_FIELDCAT-OUTPUTLEN  = 12.
        X_FIELDCAT-INTTYPE    = 'P'.
        X_FIELDCAT-JUST       = 'R'.
        X_FIELDCAT-DO_SUM     = 'X'.
        APPEND X_FIELDCAT TO I_FIELDCAT.

   B. 半自动
       调用FM: REUSE_FIELD_CATALOG_MERGE ,传入DDIC中的transparent table, view ,structure的名称,输出field catalog内表.
    CALL  FUNCTION  'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
*     I_PROGRAM_NAME               =
*     I_INTERNAL_TABNAME           =
      i_structure_name             = c_alv_structure_name
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_INCLNAME                   =
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
    CHANGING
      ct_fieldcat                  = gt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface       = 1
      program_error                = 2
      OTHERS                        = 3

       如果要对抬头,hotspot等属性进行调整, 可以循环field catalog内表,修改其对应属性.如:
        LOOP  AT  gt_fieldcat ASSIGNING  <l_fcat>.
   
        CASE <l_fcat>-fieldname.
          WHEN 'flname'.
              "修改属性.
             
        ENDCASE.
         ENDLOOP.

4. field layout
 
  注意属性 GET_SELINFOS ,它对于REUSE_ALV_GRID_DISPLAY 的输入IS_SEL_HIDE有用,但在WAS 7.0中已不再支持.

5. 事件
   ALV触发的事件可用FM: REUSE_ALV_EVENTS_GET 来获得, 输出一个内表,类型是slis_t_event , 行项为slis_alv_event,包含两个字段,一个事件名,另一个是事件处理的FORM名.
   CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
           I_LIST_TYPE = 0
       IMPORTING
            ET_EVENTS   = I_EVENTS.
   常用事件有:
     列表抬头处理: Slis_ev_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.
     双击,单击    : Slis_ev_user_command TYPE slis_formname VALUE 'USER_COMMAND'
      subtotal文本: Slis_ev_subtotal_text TYPE slis_formname VALUE   'SUBTOTAL_TEXT'.
               参考 https://www.sdn.sap.com/irj/scn/wiki?path=/display/Snippets/Display%252bsubtotal%252btext%252bin%252bALV%252bgrid
                   https://www.sdn.sap.com/irj/scn/thread?threadID=1033110&tstart=0
                    注意: 如果必须修改subtotal对应的字段的field_catalog属性no_out为X才可以触发这个事件.

6.开发时一般的需求:
一般都会涉及到REUSE_ALV_GRID_DISPLAY 的输入属性
1> ALV variant 保存
   
    is_default
    is_save  
    is_variant

2> 小计, 排序
    it_sort属性,可以定义按哪个字段排序并且可以指定按这个字段小计其它可以汇总的字段.
    -          spos :  Sort sequence
    -          fieldname :  Internal output table field name
    -          tabname : Only relevant for hierarchical-sequential lists. Name of the internal output table.
    -          up : 'X' = sort in ascending order
    -          down : 'X' = sort in descending order
    -          subtot : 'X' = subtotal at group value change
    -          group : '* ' = new page at group value change ,'UL' = underline at group value change
  
3> ALV 抬头 页脚
   A. 可以采用TOP_OF_PAGE事件触发可以采用方式:
        a. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'  输出一个内表: slis_t_listheader 这种方法输出格式固定,不利于对齐
         设置输入属性i_logo可输出图片.

        b.  Grid方式:设置 , 布局容易控制一些.
         DATA : lr_content TYPE  REF  TO  cl_salv_form_element.

         DATA : lr_grid      TYPE  REF  TO  cl_salv_form_layout_grid,  " top grid definition
                  lr_flow      TYPE  REF  TO  cl_salv_form_layout_flow,  " flow for top grid
                  l_text(500 )  TYPE  c .                                         " showed in top of list

      * create a grid
      CREATE  OBJECT  lr_grid.
     
      *创建一个单元格
      lr_flow = lr_grid->create_flow(
                row    = 1   "行
                column = 1  ). "列

      * write a blank column
       WRITE  (20 ) '' .   "可直接输出

      plr_flow = plr_grid->create_flow(
       row    = 1
       column = 2 ).

    * create text in cell
    lr_flow->create_text( text  = pl_text ). "定制cell里的文本

       cl_salv_form_content=>set( lr_content ).
     
   B. 设置I_CALLBACK_HTML_TOP_OF_PAGE 属性触发
     FORM f_html_top_of_page USING pr_document TYPE REF TO cl_dd_document.
       可以加入HTML文本,链接,图片
                  CALL METHOD pr_document->add_text( text = 'Picture' ).

           CALL METHOD pr_document->add_gap( width = 10 ).

           CALL METHOD pr_document->add_picture( picture_id = 'ENJOYSAP_LOGO' ).



 
4> 点击某列,转到另外一个tranaction中,需要设置列字段为hotspot,再在user_command中处理function code: "&IC1 "
    it_events属性,传入一个slis_t_event类型的内表.设置相应处理form,如 handle_user_command.
    FORM  handle_user_command USING  p_ucomm     LIKE  sy-ucomm
                                 ps_selfield TYPE  slis_selfield.
   
Reference:
https://www.sdn.sap.com/irj/scn/wiki?path=/display/ABAP/ALV+TUTOTIAL+FOR+BEGINERS+WITH+EXAMPLES
这篇文章对FM方式创建ALV讲得非常全面.
分享到:
评论

相关推荐

    【SAP ABAP开发】 ALV报表开发教程

    ### SAP ABAP开发中的ALV报表开发教程 #### 一、引言 在SAP ABAP开发中,ALV(Application List Viewer)是一种用于展示数据列表的强大工具,它提供了丰富的功能来满足各种业务需求,例如排序、筛选、分组等。本...

    SAP ALV报表开发指南.pdf

    SAP ALV报表开发指南 SAP ALV报表开发指南是SAP系统中一种常见的报表展现形式,可以标准化、简单化R/3系统中的表单,为用户提供一个统一的表单格式以及用户接口。ALV报表既能显示简单表单(SIMPLE LIST),又可以...

    SAP系统中ALV报表

    ### SAP系统中ALV报表详解 #### ALV报表概述 ALV(Application List Viewer)是SAP系统中用于展示列表数据的一种方式,广泛应用于各种报表的设计与开发中。ALV报表能够灵活地处理大量数据,并提供多种显示格式、...

    SAP ALV报表开发指南.docx

    SAP ALV报表开发指南 SAP ALV报表是SAP系统中一种常见的报表展现形式,它可以标准化、简单化R/3系统中的表单,可以为用户提供一个统一的表单格式以及用户接口。ALV既能显示简单表单(SIMPLE LIST),又可以显示有序...

    SAP ALV报表开发介绍.pdf

    SAP ALV报表是SAP R/3系统中用于数据展示和分析的一种标准工具,全称为ABAP List Viewer。ALV报表的主要目的是提供一个统一、标准化的用户界面,以简化和美化R/3系统中的数据表单。它支持两种类型的报表:简单表单...

    源代码(ALV 报表 F4 增删插改按钮功能).pdf

    通过添加F4增强功能,开发人员可以为ALV报表的各个字段提供下拉列表选项,使得用户可以通过按F4键来选择合适的值,从而增加报表的交互性和数据准确性。 ALV报表F4按钮功能的实现涉及到多个SAP ABAP编程对象和功能,...

    ALV报表 abap报表

    ALV报表.abap报表 ALV(Application List Viewer)是一种常用的ABAP报表工具,通过它可以快速生成报表,具有良好的可读性和交互性。本文将通过一个实际的ALV报表示例,详细介绍ALV报表的编写过程和相关技术要点。 ...

    ABAP OOALV报表开发

    ABAP OOALV报表开发,定义变量,选择屏幕定义,创建类,调用函数

    ABAP ALV 报表基础模板(两种)

    ### ABAP ALV 报表基础模板(两种) #### 第一种:普通模板 在 SAP 的 ABAP 开发环境中,ALV(Application List Viewer)是一种常用的技术来展示数据列表。本篇文档将详细介绍一种用于创建 ABAP ALV 报表的基础...

    sap alv报表开发模版

    ### SAP ALV 报表开发模板详解 #### 一、SAP ALV 报表概述 SAP ALV(Application List Viewer)报表是SAP系统中一种常用的报表展示方式,它能够灵活地处理大量数据,并提供多种视图选项来帮助用户更直观地查看和...

    abap alv报表实现消消乐小游戏

    abap alv报表实现消消乐小游戏

    SAP ALV报表开发介绍.pptx

    ALV报表还允许在列表中显示小计和总计,增强了数据分析的能力。 实现ALV报表主要通过调用SAP预定义的函数模块,如`REUSE_ALV_GRID_DISPLAY`和`REUSE_ALV_GRID_DISPLAY_LVC`。开发过程包括以下几个步骤: 1. **定义...

    ALV 报表发送邮件升级版

    ALV 报表发送邮件升级版1.内表转ALV显示2.内表 转 邮件附件功能齐全 。

    ALV报表自动发送邮件程序

    ALV报表自动发送邮件程序1.用户选择数据发送邮件2.用户创建JOB自动发送邮件。

    sap alv报表制作ppt

    在SAP系统中,ABAP List Viewer(ALV)是一个强大的工具,用于简化报表的创建和展示。ALV提供了一种高效的方式,避免了编写大量代码来实现诸如列对齐、排序、过滤、子总计和总计等常见报表功能。通过使用ALV,我们...

    ABAP选择屏幕与ALV报表的连接

    ABAP选择屏幕与ALV报表的连接

    SAP动态树程序DialogALV报表(下).docx

    在SAP系统中,动态树程序Dialog ALV报表是一种用于数据展示和分析的工具,它允许用户以树状结构查看和操作数据。这篇文档可能是关于如何创建和使用一个特定的SAP程序ZFIR_1026,该程序用于生成与财务相关的Dialog ...

    abap alv 总结

    ALV 格式的数据是以单元格为单位显示,SAP 提供了一套 ALV 的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性。 二、开发 ALV 的基本流程 开发 ALV 的基本流程主要包括:选择屏幕上字段、...

    ABAP-ALV进阶

    ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出。下面是ABAP-ALV进阶的知识点详解: 一、ALV概要 ALV 全称为 ABAP List Viewer,在 R/3 4.6C 之前,已经正式更名为 SAP List Viewer。ALV 提供给系统...

    SAP动态树程序DialogALV报表.docx

    SAP动态树程序DialogALV报表.docx

Global site tag (gtag.js) - Google Analytics