`
- 浏览:
786622 次
- 性别:
- 来自:
上海
-
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
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
*&程序功能描述:V1.4(20190907) *&*1---根据数据元素和字段值查表 *&*2---ALV显示查询结果 *&*3---增加根据字段值,模糊搜索所有系统表相同值的逻辑(20210901) ...*&*4---增加自动创建透明表逻辑,用于创建日志表
*&程序功能描述:V1.4(20190907) *&*1---根据数据元素和字段值查表 *&*2---ALV显示查询结果 *&*3---增加根据字段值,模糊搜索所有系统表相同值的逻辑(20210901) ...*&*4---增加自动创建透明表逻辑,用于创建日志表
12. **错误处理与调试**:当遇到错误时,学会阅读和解析SAP日志,使用ST05进行代码调试,找出问题根源。 13. **培训与社区资源**:参加SAP官方培训或利用在线社区(如SAP Community Network)资源,持续学习和解决...
5. **报告开发**:学习如何编写动态报表,包括如何从数据库获取数据,处理和展示结果,以及使用ABAP的报表功能如ALV(ABAP List Viewer)。 6. **函数模块与接口**:函数模块是可重用的代码块,而接口定义了调用...
总的来说,为了在SAP-PP模块中实现CO02生产订单的修改日志记录,我们需要利用提供的增强点进行客制化开发,创建自定义日志表,记录关键信息,并通过ALV报表提供查询工具。这样既能保证系统的性能,又能满足追溯和...
你将学习如何创建、填充、遍历和操作内部表,以及使用不同类型如透明表、结构化表和索引表。 3. **选择屏幕和对话模块**:在SAP中,用户与系统的交互是通过选择屏幕和对话模块实现的。这部分将教授如何定义和处理...
3. 利用SMARTFORMS或ALV(ABAP List Viewer)创建可打印的文档格式。 4. ABAP代码可以与外部打印服务接口,实现自动化的打印作业。 五、工具支持 SAP提供了多种工具来辅助消息输出和打印的配置和管理: 1. ...
- 如果出现错误,则记录到日志表`lt_return`中,并进一步处理。 #### 实践应用 在实际使用中,**BAPI_NETWORK_MAINTAIN** 的调用通常是在项目计划阶段完成的。例如,在项目启动后,项目经理可能会创建一个项目...
ALV输出是SAP系统中的一个基本功能,通过该功能用户可以输出系统中的各种报表和数据,ALV是SAP系统中一种基于网格的报表输出方式。 Excel输出 Excel输出是SAP系统中的一个基本功能,通过该功能用户可以输出系统中...
10. **错误处理和日志记录**:学习如何在ABAP中进行错误处理和日志记录,以确保程序的健壮性和可维护性。 11. **ABAP工作流和业务流程**:如果课程内容深入,可能会涉及SAP Business Workflow和WebFlow,以及如何...
7. **SAP Web开发技术**:包括BSP(Browser-based Software Package)用于简单网页开发,ABAP Web Dynpro和Java Web Dynpro用于创建复杂网页,Developer Studio则是基于Eclipse的Java开发环境。 8. **SAP Workflow*...
2. ALV报表初始化:使用SET_REPERTORY_INFO或CALL_ALV_GRID函数调用来创建和配置ALV报表。开发者可以设置列宽、排序、过滤条件等属性。 3. 数据绑定:将从数据库获取的数据绑定到ALV报表,通过CALL_REPORT_OUTPUT或...
- **日志记录**:记录关键信息到日志文件,方便后续问题排查。 - **断言**:利用断言验证程序逻辑的正确性。 #### 3. 代码复用 - **函数模块**:编写可重用的函数模块,提高代码复用率。 - **类库**:构建自己的...
- **在应用中集成ALV**: 描述了如何将SAP List Viewer(ALV)集成到Web Dynpro应用中。 - **管理ALV输出区域**: 提供了对ALV输出区域的管理和控制方法。 - **ALV输出的外观**: 设计ALV输出的外观和布局。 - **预定义...
- **示例**: 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`)、...
在 SAP ABAP 开发环境中,"ZFI001.rar_abap" 提供了一个用于创建资产负债表的程序,名为 "OPPLE 资产负债表"。这个程序属于报告类型,意味着它主要用于生成特定的财务报表,即在 SAP 系统中查看公司的财务状况。下面...
总的来说,这个ABAP程序创建了一个功能,允许用户通过SAP系统查看和筛选供应商主数据,包括基本联系信息、财务数据以及这些信息的历史变更记录。在实际的互联网环境中,这样的报表工具对于供应链管理和供应商关系...
10. **ABAP开发中的其他关键概念**:还包括类型定义(如数据元素和域)、选择屏幕(用户输入参数的定义)、模块化编程(函数模块、类和接口)、数据库通信(SQL语句)、错误和日志处理、报表开发、事务码编程、ALV...