SAP学习日志--ALV的创建

[color=indigo][size=medium]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[/size][/color]
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值