ABAP ALV使用经验.docx

上传人:b****2 文档编号:20681633 上传时间:2023-04-25 格式:DOCX 页数:32 大小:151.89KB
下载 相关 举报
ABAP ALV使用经验.docx_第1页
第1页 / 共32页
ABAP ALV使用经验.docx_第2页
第2页 / 共32页
ABAP ALV使用经验.docx_第3页
第3页 / 共32页
ABAP ALV使用经验.docx_第4页
第4页 / 共32页
ABAP ALV使用经验.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

ABAP ALV使用经验.docx

《ABAP ALV使用经验.docx》由会员分享,可在线阅读,更多相关《ABAP ALV使用经验.docx(32页珍藏版)》请在冰豆网上搜索。

ABAP ALV使用经验.docx

ABAPALV使用经验

ERP高级应用ABAPALV使用经验

一、引言

由SAP提供的有效而灵活的BW工具集帮助您从内部和外部SAP源收集任何详细信息,并让您比以前更清晰地概述公司内部流程。

借助BW,您的经理人能够更好地了解各个层级的情况,使他们能够在较短的应对时间内做出决策,从而应对当今瞬息万变的市场。

同时,BW还帮助您降低信息管理方面的成本。

二、现象描述

在BW使用中难免会有涉及到开发部分的应用,这里简单介绍了ABAP开发中ALV报表的开发方式以及简单的代码。

三、典型描述

ALV知识

一、ALV相关概念

ALV――ABAPLISTVIEWER,这里我姑且称之为ABAP表单浏览器,用它可以标准化,简单化R/3系统中的表单,它可以提供给用户一个统一的表单格式以及用户接口。

 

二、结合一个具体的实例来看ALV的功能

首先我们看下图中的这个ALV的布局(这是一般ALV程序表单的典型布局):

根据上面对ALV的直观形象,下面将屏幕上的区域划分成几块,分别来解释它的作用:

1.快捷工具栏(如下图)

细节按钮,你首先必须选中列表中的一行,然后点击它的话,就会弹出一个窗口,显示选中行的细节内容。

(另外:

你双击你要选择的行,也可以显示细节)

按升序排列,首先选中一列,然后再点击它,就可以看到该列是按照升序重新排列。

按降序排列,首先选中一列,然后再点击它,就可以看到该列是按照降序重新排列。

设置过滤器,通过设置它可以达到筛选的目的,以列名称作为筛选的筛选标准,填入过滤器相应的标准值,然后就可以筛选出满足自己条件的记录。

打印预览,点击它之后,就可以预览一下将要打印内容的布局情况。

MicrosoftExcel,调用MS的Excel到当前ALV的列表显示区域。

(前提:

必须安装了MS的Excel)

字处理,字处理的相关设置。

本地文件,将当前表单存储到本地机器上,有几种供选择的存储格式。

邮件收件人,给系统内用户发邮件

图形,点击它可以根据表单情况绘制相关图表。

更改布局,点击它可以对表单中的列项目排列次序的互换,删减等。

选择布局,从已经保存的布局中选择自己满意的布局。

保存布局,对于自己满意的布局,可以通过点击它来将布局保存起来。

2.表单标题区

这个区域主要是用来显示一些抬头信息(总揽信息),类似于WORD中的页眉。

我们在使用的时候根据需要来进行相关填写。

3.表单显示区

这个区域主要是用来显示我们通过代码筛选出来的数据,相关的操作在下面的程序编写部分详细介绍。

三、程序的编写

1.在我们写ALV程序的时候,有一个类型组是肯定要用到的:

TYPE-POOLS:

SLIS。

在这个类型组中有很多ALV的自定义数据类型以及结构化数据类型(通过TYPE来定义的),我们在写ALV表单的时候需要调用的。

我们常用的几个有(蓝色部分):

I.对一个最简单的ALV表单(无标题区和页脚区),我们只需要定义下面几个

data:

i_fieldcat_alvtypeslis_t_fieldcat_alvwithheaderline,

i_layouttypeslis_layout_alv,"alv的格式

i_fieldcattypeslis_fieldcat_alv,

w_repidlikesy-repid.

它对应的start-of-selection中定义子函数如下:

start-of-selection.

performgetdata.“从数据库中取数据到相应内表中

performlayout_build.“用于定义ALV表单的相关格式、属性

performfields.“用来定义表单中的各个列的相关信息,比如列名等

performdisplay_data.“用来显示ALV表单

子函数定义如下:

formlayout_build.

i_layout-zebra='X'.

i_layout-detail_popup='X'.“是否弹出详细信息窗口

w_repid=sy-repid.“程序为当前程序

i_layout-f2code='&ETA'.“设置触发弹出详细信息窗口的功能码,这里是双击

i_layout-no_vline='X'.“这个用来设置列间隔线

i_layout-colwidth_optimize='X'.“优化列宽选项是否设置

i_layout-detail_initial_lines='X'.

i_layout-detail_titlebar='详细内容'.“设置弹出窗口的标题栏

endform.

formfields.

refreshi_fieldcat_alv.

pos=1.

cleari_fieldcat.

i_fieldcat-col_pos=pos.“第几列

i_fieldcat-fieldname='NUM'.

i_fieldcat-seltext_l='序号'.“列名

appendi_fieldcattoi_fieldcat_alv.

pos=pos+1.

i_fieldcat-col_pos=pos.

i_fieldcat-fieldname='AUFNR'.

i_fieldcat-seltext_l='生产订单'.

appendi_fieldcattoi_fieldcat_alv.

cleari_fieldcat.

…………

Endform.

formdisplay_data.

callfunction'REUSE_ALV_GRID_DISPLAY'

exporting

i_callback_program=w_repid“当前程序

i_save=''

is_layout=i_layout“子函数layout_build填充的格式定义

it_fieldcat=i_fieldcat_alv[]“子函数fields填充的各列

tables

t_outtab=head1.“假设数据都在head1内表中

endform.

 

II.对一个稍微复杂一点的ALV表单(有标题区和页脚区),我们需要定义下面几个

data:

i_fieldcat_alvtypeslis_t_fieldcat_alv,

“用来存储我们将要在表单显示区域显示出来的表单的列名,每个列名对应的字段名以及列表头其他相关属性信息的数据类型

i_fieldcattypeslis_fieldcat_alv,

i_layouttypeslis_layout_alv.“ALV的格式

data:

i_eventstypeslis_t_event,

i_event_exittypeslis_t_event_exit,

i_list_commentstypeslis_t_listheader,“用来填充表单标题区域的数据类型

i_excludingtypeslis_t_extab.

data:

w_variantlikedisvariant,"显示变式结构

wx_variantlikedisvariant,

w_variant_save

(1)typec,

w_exit

(1)typec,

w_user_specific

(1)typec,

w_callback_ucommtypeslis_formname,"字符型

w_printtypeslis_print_alv,"类型组

w_layouttypeslis_layout_alv,"类型组

w_html_top_of_pagetypeslis_formname,"字符型

w_fieldcat_alvlikelineofi_fieldcat_alv,

w_excludinglikelineofi_excluding,

w_eventslikelineofi_events,

w_event_exitlikelineofi_event_exit,

w_list_commentslikelineofi_list_comments.

*===========================================================================*

initialization.

performinit_variant.“这个子函数很重要,没有它会出错

*-----------------------------------------*

它对应的start-of-selection中定义子函数如下:

start-of-selection.

performgetdata.“从数据库中取数据到相应内表中

performevent_build.

performlayout_build.“用于定义ALV表单的相关格式、属性

performfields.“用来定义表单中的各个列的相关信息,比如列名等

performdisplay_data.“用来显示ALV表单

*-----------------------------------------*

子函数定义如下:

(这里只定义前面文档没有提到的子函数,其他同名的请参考前面)

forminit_variant.

clear:

w_variant.

w_repid=sy-repid.“当前程序

w_variant-report=w_repid.

w_variant-username=sy-uname.

w_variant_save='A'."Alltypes

endform.

formevent_build.

callfunction'REUSE_ALV_EVENTS_GET'

exporting

i_list_type=0

importing

et_events=i_events.

readtablei_events

withkeyname=slis_ev_top_of_page

intow_events.

ifsy-subrc=0.

move'ALV_TOP_OF_PAGE'tow_events-form.“将标题区数据赋值给W_EVENTS

modifyi_eventsfromw_eventsindexsy-tabix.

endif.

readtablei_events

withkeyname=slis_ev_end_of_list

intow_events.

ifsy-subrc=0.

move'ALV_END_OF_LIST'tow_events-form.“将页尾数据赋值给W_EVENTS

modifyi_eventsfromw_eventsindexsy-tabix.

endif.

readtablei_events

withkeyname=slis_ev_end_of_page

intow_events.

ifsy-subrc=0.

move'ALV_END_OF_PAGE'tow_events-form.“将页脚区数据赋值给W_EVENTS

modifyi_eventsfromw_eventsindexsy-tabix.

endif.

endform.

*-----------------------------------------*

formevent_build子函数中黑体字部分对应的几个子函数,我们需要定义如下:

formalv_top_of_page.

clear:

i_list_comments[].

w_list_comments-typ='H'."H=Header,S=Selection,A=Action供选择

w_list_comments-key=''.

w_list_comments-info='XX汽车有限公司变速箱废品率报表'.

appendw_list_commentstoi_list_comments.

w_list_comments-typ='S'."H=Header,S=Selection,A=Action

w_list_comments-key=''.

concatenate'库位:

'werks-lowintowerks_t.

w_list_comments-info=werks_t.

appendw_list_commentstoi_list_comments.

w_list_comments-typ='S'."H=Header,S=Selection,A=Action

w_list_comments-key=''.

concatenate'库位:

'werks-lowintowerks_t.

w_list_comments-info=werks_t.

appendw_list_commentstoi_list_comments.

callfunction'REUSE_ALV_COMMENTARY_WRITE'

exporting

i_logo='ENJOYSAP_LOGO'

it_list_commentary=i_list_comments.

endform.

formalv_end_of_list.

clear:

i_list_comments[].

w_list_comments-typ='A'."H=Header,S=Selection,A=Action

w_list_comments-key=''.

w_list_comments-info='页脚显示'.

appendw_list_commentstoi_list_comments.

callfunction'REUSE_ALV_COMMENTARY_WRITE'

exporting

it_list_commentary=i_list_comments

i_logo='ENJOYSAP_LOGO'

i_end_of_list_grid='X'.

endform.

formalv_end_of_page.

它的定义类似上面两个子函数的内容,这里不再赘述

endform.

*-----------------------------------------*

formdisplay_data.

callfunction'REUSE_ALV_GRID_DISPLAY'

exporting

*i_background_id='SIWB_WALLPAPER'

i_background_id='SIWB_WALLPAPER'

i_callback_program=w_repid

i_callback_html_top_of_page=w_html_top_of_page

*i_structure_name='TRDIR'

i_default='X'

i_save='A'

is_variant=w_variant

is_layout=w_layout

*i_callback_user_command=w_callback_ucomm

it_fieldcat=i_fieldcat_alv

it_events=i_events

it_event_exit=i_event_exit

it_excluding=i_excluding

is_print=w_print

*i_screen_start_column=1

*i_screen_start_line=1

*i_screen_end_column=70

*i_screen_end_line=30

tables

t_outtab=head1.

endform.

 

2.写一个ALV程序的基本流程(主要包括ALV相关的那部分,后面会附上一个ALV源程序的代码):

第一步:

定义将要用到的表,即TALBES定义部分,然后定义TYPE-POOLS:

SLIS.

第二步:

定义“1”中提到的这些数据类型或者内表的实体对象

第三步:

定义一些需要用到的变量

第四步:

定义自己的选择屏幕

第五步:

定义INITIALIZATION部分,在这个部分往往要指定w_repid的值,

w_repid=sy-repid。

第六步:

start-of-selection部分

用一个子函数完成对ALV表单标题区域的赋值(i_list_comments)。

用一个子函数完成自己所需要数据的抓取

用一个子函数完成要显示列表的列名行(第一行)的相关赋值(i_fieldcat_alv)以及设置

用一个子函数完成输出格式的设置(i_layout),比如双击一条记录是否弹出对话框啊?

是用哪个功能键触发等等

用一个子函数FORMDISPLAY_DATA来显示上面我们已经分别封装好的数据,需要调用两个常用的FUNCTIONMODULE:

FUNCTION'REUSE_ALV_GRID_DISPLAY'“用来显示表单数据

FUNCTION'REUSE_ALV_COMMENTARY_WRITE'“用来显示表单标题

附件:

示例程序源代码(注:

下面这个程序调用的ALV功能应该讲是比较完全的了,大家可以通过上面的学习之后,再看这个程序,应该会有所收获)

*----------------------------------------------------------------------

*Program:

ZZ_ALV_REPORT_STUB

*Author:

*Date:

*

*Purpose:

ReportusingALVfunction

*

*Notes:

*1)Logos&wallpaperscanbefoundintableBDS_CONN05

*withclass=PICTURES

*

*2)TransactionOAERcanbeusedtocreatePICTURES.

*RuntransactionOAERwithclassname=PICTURES,Classtype=OT,

*andObjectkeywithwhatevernameyouwanttocreate.Inthe

*nextscreen,rightclickingonscreenandimport

*

*----------------------------------------------------------------------

*Revisions

*----------------------------------------------------------------------

*Name:

*Date:

*Comments:

*----------------------------------------------------------------------

reportzflex004

nostandardpageheading

line-size200

line-count65

message-idzz.

*--------------------------------

*Tables

*--------------------------------

tables:

ekpo,

mara,

trdir.

*--------------------------------

*GlobalTypes

*--------------------------------

type-pools:

slis.

*--------------------------------

*GlobalInternalTables

*--------------------------------

data:

i_fieldcat_alvtypeslis_t_fieldcat_alv,

i_eventstypeslis_t_event,

i_event_exittypeslis_t_event_exit,

i_list_commentstypeslis_t_listheader,

i_excludingtypeslis_t_extab.

*Displaydata

data:

beginofi_dataoccurs0,

matnrlikemara-matnr,

mtartlikemara-mtart,

endofi_data.

*--------------------------------

*GlobalVariables

*--------------------------------

data:

w_variantlikedisvariant,"显示变式结构

wx_variantlikedisvariant,

w_variant_save

(1)typec,

w_exit

(1)typec,

w_repidlikesy-repid,"abap程序,当前主程序

w_user_specific

(1)typec,

w_callback_ucommtypeslis_formname,"字符型

w_printtypeslis_print_alv,"类型组

w_layouttypeslis_layout_alv,"类型组

w_html_top_of_pagetypeslis_formname,"字符型

w_fieldcat_alvlikelineofi_fieldcat_alv,

w_excludinglikelineofi_excluding,

w_eventslikelineofi_events,

w_event_exitlikelineofi_event_exit,

w_list_commentslikeline

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1