`

SAP学习日志--ALV的创建

阅读更多
ALV grid control 是当前比较流行的交互式报表 interactive report. 其中包含了很多功能,比如说:排序, 算总值, 格式定义 等等. 而且ALV的报表开发相对简单,而且美观程度也相对于传统报表 traditional report 有了很大的提高.

在ALV的设计中要包含以下几点.
1.从数据库取数据 Get data
2.对ALV的报表布局进行设计  Build ALV layout
3.对ALV的列属性进行设计    Create Fieldcat
4.将ALV报表显示出来        Display ALV

全局类型(Type pool)  slis
在程序的最开始,需要引用Type pool slis.里面存放了很多关于ALV的类型.以下是几个常用的类型.

1.slis_layout_alv        结构体类型,主要存放ALV布局信息
2.slis_t_fieldcat_alv    内表类型,主要存放标题列信息
3.slis_fieldcat_alv      结构体类型,与slis_t_fieldcat_alv行结构类型相同
4.slis_t_event           内表类型,存放ALV中触发的事件
5.slis_t_listheader      内表类型,存放ALV表头相关信息

数据库取数
通常情况下,我们所需要的数据都存放在不同的数据库表中,所以首先要建立一个存放数据的内表,然后将所需数据从不同的数据库表中添加到该内表.

对ALV的布局设计
要对slis_layout_alv的字段进行填充,来实现布局的功能,以下是常用的字段以及功能
1.i_layout-zebra = 'X'  行与行之间变换颜色
2.i_layout-no_vline = ' '. 显示垂直分割线
3.i_layout-colwidth_optimize = 'X'. 系统自动调整列的宽度
4.i_layout-no_colhead = ' '.    显示列标题

对ALV的列属性进行设计
对slis_fieldcat_alv的字段进行填充,并添加到内表slis_t_fieldcat_alv中,以下是常用字段及功能
i_fieldcat-outputlen ='14'.                        指定列长为14
i_fieldcat-fieldname = 'INFNR'.                    指定列存放的字段
i_fieldcat-seltext_s = 'prn'.                      列标题短文本
i_fieldcat-seltext_m = ' pur rec num '.            列标题中文本
i_fieldcat-seltext_l = ' purchase record number '. 列标题长文本
i_fieldcat-lzero = 'X'.                            显示数据的前导零
i_fieldcat-key = 'X'.                              指定是否为主要字段
i_fieldcat-hotspot = 'X'.                          是否设置小手快捷单击
i_fieldcat-tech = 'X'.                             隐藏该列

显示ALV报表
需要调用 Function module “ REUSE_ALV_GRID_DISPLAY ”,以下是重要的几个参数
Exporting 参数
i_callback_program = w_repid(当前程序)         指定当前程序
is_layout          = i_layout                 ALV布局
it_fieldcat        = i_fieldcat_alv[]         ALV列属性
it_events          = i_events[]               ALV事件
i_grid_title       = 'ALV'                    报表标题
i_callback_user_command = 'USER_COMMAND'      用户事件
i_callback_pf_status_set = 'WHOLE_TOOLBAR'    工具条设置

Tables 参数
t_outtab           = hd_itab.                   显示数据所存放的内表

ALV报表头设置
要使用到slis_t_listheader类型,   包含三部分:
1.         typ(类型): H(header) S(selection) A(action)
2.         key(标题)
3.         info(标题的内容)

需要调用function
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
       EXPORTING
            it_list_commentary = i_list_comments
            i_logo             = 'ENJOYSAP_LOGO'  " Title logo
            i_end_of_list_grid = 'X'.

ALV事件设置
事件要使用到类型slis_t_event,包含两个字段,  name,form
需要调用function
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
       EXPORTING
            i_list_type = 0
       IMPORTING
            et_events   = i_events.
  READ TABLE i_events WITH KEY name = 'TOP_OF_PAGE'
                      INTO w_events.
  IF sy-subrc = 0.
    MOVE 'ALV_TOP_OF_PAGE' TO w_events-form.
    MODIFY i_events FROM w_events INDEX sy-tabix.
  ENDIF.

通过调用function传出一个内表的值, 内表中的name字段包含了,ALV中可能触发到的事件,
根据需要, 将要触发的事件子程序 修改到相应的form字段中.

以下是在建立ALV报表需要注意的一些事项.

要在取数完之后 就对alv的事件进行处理, 因为事件内表要在作为参数传递到REUSE_ALV_GRID_DISPLAY中去.
在布局ALV时,有一个f2CODE参数不要去改.

*  i_layout-f2code = '&ETA'.

*  i_layout-f2code = '&IC1'.

一旦改了, user_command事件就不触发了, 具体原因还不是很清楚

在user_command的子程序中,要传入两个值 sy-ucmm功能值,下一个因该是被点击字段的属性结构体(我也不是很清楚).  当sy-ucomm为'&IC1' 就表示点击了当前字段

FORM user_command USING
i_ucomm LIKE sy-ucomm
is_selfield TYPE slis_selfield.                       
  CASE i_ucomm.
    WHEN '&IC1'. " Pick
      READ TABLE hd_itab INDEX is_selfield-tabindex.
      IF sy-subrc EQ 0.
        ......
      ENDIF.
  ENDCASE.
ENDFORM. " USER_COMMAND

在对列标题进行设计的时候,每一个列标题属性都要设置,所以代码重复量很大. 可以定义宏来减少代码量
DEFINE hout.
    i_fieldcat-fieldname     = &1.
    i_fieldcat-seltext_l     = &2.
    i_fieldcat-key           = &3.
    append i_fieldcat to i_fieldcat_alv.
    clear i_fieldcat.
  END-OF-DEFINITION.
  hout 'CARRID'       'Airline carrier ID'        'X'.
  hout 'CONNID'       'Flight connection code'    'X'.
  hout 'FLDATE'       'Flight date'               'X'.
  hout 'PRICE'        'Airfare'                   ' '.
  hout 'CURRENCY'     'Local currency of airline' ' '.
  hout 'PLANETYPE'    'Plane type'                ' '.
  hout 'SEATSMAX'     'Maximum capacity'          ' '.
  hout 'SEATSOCC'     'Occupied seats'            ' '.
  hout 'PAYMENTSUM'   'Total of current bookings' ' '.

重点注意:在调用function的时候, 一定要注意参数所引用的类型,以及单引号中内容的大写.这点很重要. 程序中很多错误都是因为这个引起的
后面我会发一个ALV的demo 希望能够帮助大家更进一步了解ALV
分享到:
评论

相关推荐

    通过数据元素和值找表 - v1.0 for ECC

    *&程序功能描述:V1.4(20190907) *&*1---根据数据元素和字段值查表 *&*2---ALV显示查询结果 *&*3---增加根据字段值,模糊搜索所有系统表相同值的逻辑(20210901) ...*&*4---增加自动创建透明表逻辑,用于创建日志表

    ABAP 通过数据元素和值找表

    *&程序功能描述:V1.4(20190907) *&*1---根据数据元素和字段值查表 *&*2---ALV显示查询结果 *&*3---增加根据字段值,模糊搜索所有系统表相同值的逻辑(20210901) ...*&*4---增加自动创建透明表逻辑,用于创建日志表

    SAP-Tips 常用技巧

    12. **错误处理与调试**:当遇到错误时,学会阅读和解析SAP日志,使用ST05进行代码调试,找出问题根源。 13. **培训与社区资源**:参加SAP官方培训或利用在线社区(如SAP Community Network)资源,持续学习和解决...

    实战SAP程序开发 1-13章

    5. **报告开发**:学习如何编写动态报表,包括如何从数据库获取数据,处理和展示结果,以及使用ABAP的报表功能如ALV(ABAP List Viewer)。 6. **函数模块与接口**:函数模块是可重用的代码块,而接口定义了调用...

    SAP-PP模块CO02生产订单修改日志增强开发明细(包含操作步骤和ABAP代码)

    总的来说,为了在SAP-PP模块中实现CO02生产订单的修改日志记录,我们需要利用提供的增强点进行客制化开发,创建自定义日志表,记录关键信息,并通过ALV报表提供查询工具。这样既能保证系统的性能,又能满足追溯和...

    从实例学SAP ABAP编程(1-19章).zip

    你将学习如何创建、填充、遍历和操作内部表,以及使用不同类型如透明表、结构化表和索引表。 3. **选择屏幕和对话模块**:在SAP中,用户与系统的交互是通过选择屏幕和对话模块实现的。这部分将教授如何定义和处理...

    sap消息输出及打印

    3. 利用SMARTFORMS或ALV(ABAP List Viewer)创建可打印的文档格式。 4. ABAP代码可以与外部打印服务接口,实现自动化的打印作业。 五、工具支持 SAP提供了多种工具来辅助消息输出和打印的配置和管理: 1. ...

    BAPI_NETWORK_MAINTAIN 下达项目网络的BAPI

    - 如果出现错误,则记录到日志表`lt_return`中,并进一步处理。 #### 实践应用 在实际使用中,**BAPI_NETWORK_MAINTAIN** 的调用通常是在项目计划阶段完成的。例如,在项目启动后,项目经理可能会创建一个项目...

    sap课程设计zongjie.docx

    ALV输出是SAP系统中的一个基本功能,通过该功能用户可以输出系统中的各种报表和数据,ALV是SAP系统中一种基于网格的报表输出方式。 Excel输出 Excel输出是SAP系统中的一个基本功能,通过该功能用户可以输出系统中...

    SAP ABAP 开发 BC400 入门 标准 教程

    10. **错误处理和日志记录**:学习如何在ABAP中进行错误处理和日志记录,以确保程序的健壮性和可维护性。 11. **ABAP工作流和业务流程**:如果课程内容深入,可能会涉及SAP Business Workflow和WebFlow,以及如何...

    SAP系统及开发技术介绍.pptx

    7. **SAP Web开发技术**:包括BSP(Browser-based Software Package)用于简单网页开发,ABAP Web Dynpro和Java Web Dynpro用于创建复杂网页,Developer Studio则是基于Eclipse的Java开发环境。 8. **SAP Workflow*...

    ABAP打印报表程序模板.rar

    2. ALV报表初始化:使用SET_REPERTORY_INFO或CALL_ALV_GRID函数调用来创建和配置ALV报表。开发者可以设置列宽、排序、过滤条件等属性。 3. 数据绑定:将从数据库获取的数据绑定到ALV报表,通过CALL_REPORT_OUTPUT或...

    ABAP 各项技能

    - **日志记录**:记录关键信息到日志文件,方便后续问题排查。 - **断言**:利用断言验证程序逻辑的正确性。 #### 3. 代码复用 - **函数模块**:编写可重用的函数模块,提高代码复用率。 - **类库**:构建自己的...

    web dynpro abap programming guidelines

    - **在应用中集成ALV**: 描述了如何将SAP List Viewer(ALV)集成到Web Dynpro应用中。 - **管理ALV输出区域**: 提供了对ALV输出区域的管理和控制方法。 - **ALV输出的外观**: 设计ALV输出的外观和布局。 - **预定义...

    ABAP三月通

    - **示例**: SAP的SE38事务代码用于创建和运行ABAP程序;SE80用于维护ABAP对象;SE16用于查看和编辑数据库表。 ##### 3. ABAP Workbench和ABAP Dictionary - **ABAP Workbench**: 是一个集成开发环境,用于创建、...

    工作中心批导程序

    - **IT_FIELDCAT**:类型为`SLIS_T_FIELDCAT_ALV`的内部表,这通常被用来定义字段类别,以便于在ALV(Analytic List Viewer)报表中使用。 - **GW_ITEM**:定义了与工作中心相关的字段,如工作中心编号(`ARBPL`)、...

    ZFI001.rar_abap

    在 SAP ABAP 开发环境中,"ZFI001.rar_abap" 提供了一个用于创建资产负债表的程序,名为 "OPPLE 资产负债表"。这个程序属于报告类型,意味着它主要用于生成特定的财务报表,即在 SAP 系统中查看公司的财务状况。下面...

    4供应商主数据报表.docx

    总的来说,这个ABAP程序创建了一个功能,允许用户通过SAP系统查看和筛选供应商主数据,包括基本联系信息、财务数据以及这些信息的历史变更记录。在实际的互联网环境中,这样的报表工具对于供应链管理和供应商关系...

    ABAP100道面试题.pdf

    10. **ABAP开发中的其他关键概念**:还包括类型定义(如数据元素和域)、选择屏幕(用户输入参数的定义)、模块化编程(函数模块、类和接口)、数据库通信(SQL语句)、错误和日志处理、报表开发、事务码编程、ALV...

Global site tag (gtag.js) - Google Analytics