ABAP-ALV-知识整理文档格式.doc

上传人:聆听****声音 文档编号:3614038 上传时间:2023-05-02 格式:DOC 页数:37 大小:390KB
下载 相关 举报
ABAP-ALV-知识整理文档格式.doc_第1页
第1页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第2页
第2页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第3页
第3页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第4页
第4页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第5页
第5页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第6页
第6页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第7页
第7页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第8页
第8页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第9页
第9页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第10页
第10页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第11页
第11页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第12页
第12页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第13页
第13页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第14页
第14页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第15页
第15页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第16页
第16页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第17页
第17页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第18页
第18页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第19页
第19页 / 共37页
ABAP-ALV-知识整理文档格式.doc_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

ABAP-ALV-知识整理文档格式.doc

《ABAP-ALV-知识整理文档格式.doc》由会员分享,可在线阅读,更多相关《ABAP-ALV-知识整理文档格式.doc(37页珍藏版)》请在冰点文库上搜索。

ABAP-ALV-知识整理文档格式.doc

1、简介

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

ALV是系统的一种网格的显示方式,这种方式带有汇总\排序\筛选等功能,ALV格式的数据是以单元格为单位显示,SAP提供了一套ALV的功能模块,可以对输出报表的样式作修饰,提高报表输出的可读性和功能性,对于动态报表程序是一个很有效率的工具。

ALV家族包含3中ALV工具:

简易的,两层ALV,分等级连续的列表和树形结构的ALV。

一般的ALV报表有一个表头,再加上表内容,并附加一些如排序,分类汇总,合计或下载为本地文件等预设功能。

ALV报表显示方式基本上有2种,一种是Grid方式,一种是List方式,是分别调用不同的Function来实现。

1)当调用“REUSE_ALV_GRID_DISPLAY”函数时,ALV的显示样式如下:

2)当调用“REUSE_ALV_LIST_DISPLAY”函数时,ALV的显示样式如下:

2、ALV_GRID介绍

TheALVGridControl(ALV=SAPListViewer)是一个显示列表的灵活的工具,它提供了基本功能的列表操作,也可以通过自定义来进行增强,因此可以允许你可以在大型的应用程序中使用。

在SAP的开发项目中,ALVGRID也可以作为修改和创建数据的一种工具。

它包括3大部分,工具栏,标题,用于显示数据的网格控制器.如果有必要,用户可以隐藏标题和工具栏。

3、其它描述

报表的自主开发设计主要逻辑都是依托于选择屏幕上字段,也就是提供给用户让他们得到自己想要结果的选择条件途径。

其中最重要的就是必选字段,因为必选字段是取数逻辑的精华所在,他可以很巧妙的限制很多非必要的情况出现,减少开发人员的开发量,还能让用户最直接最快捷的得到与实际业务相关的展现结果。

对于一个报表程序的开发流程,一般都会有几个INCLUDE.(X代表任意自定义字母)

 

REPORTZXXXXXX.

INCLUDE 

ZXXXX_INIT.

ZXXXX_F01.

INCLUDE 

ZXXXX_block.

很多都是个人习惯吧,但是有一些习惯,能够让其他人在读程序或者修改程序的时候,很快捷,有规律可循。

INCLUDEZXXXXX_BlOCK。

里面无非就是以下几个部分

INITIALIZATION.(初始化。

在所有以下事件块运行之前运行的,只运行一次的事件块)

ATSELECTTION-SCREENOUTPUT.(PBO事件块,即屏幕输出前事件块)

AT 

SELECTION-SCREEN 

ON 

VALUE-REQUEST 

FOR 

选择屏幕字段名称。

(自定义搜索帮助事件块)

ATSELECTION-SCREEN.(PAI事件块,即屏幕操作后事件块)

START-OF-SELECTION.(程序运行事件块)

其它见解:

SAP中的程序还是有很多类型的.尤其是类报表程序,有可执行程序(REPORT开头)还有MODULEPOOL(PROGARM开头)2种形式.

ABAP开发属于事件驱动开发,这句话也清晰的解释了SAP程序的必然结构。

对于事件驱动,SAP程序就需要是由一个个事件去触发才能够执行的程序,当我们使用SE38去创建1类型的可执行性程序(REPORT开头)这样的程序,我们可以直接调试,我们会发现,这个程序是按照上面所写的事件块的顺序去依次执行的。

它的事件块的顺序是指定好的。

所以我们能够按F8,去运行。

我们所创建的MODULEPOOL就不能去执行,因为它需要用TCODE的去指定运行入口,一般都会在MODULEPOOL里面创建SCREEN.在一个SCREEN里就会有两个事件块,分别是PBO和PAI。

我们使用多个屏幕,或者使用TABLECONTROL控件,再或是使用子屏幕范围控件嵌套各种SUBSCREEN(子屏幕),其中都是需要PAI和PBO相互联系的,一个屏幕的PAI中,必然后会有一个CALLSCREEN或者CALLSUBSCREEN...INCLUDIG....命令去调用另一个屏幕或者子屏幕,然后另一个屏幕先运行PBO,有屏幕上的操作,就执行被操作屏幕的PAI。

个人感觉正式这种灵活的编写方式,导致了这种类型(MODULEPOOL)的程序不能直接F8,编译器无法获取程序从哪里开始,而TCODE就会指定从哪个屏幕开始。

ZXXXX_INIT(ZXXXX_TOP):

进入程序的第一个INCLUDE。

INCLUDE是什么?

(CR:

就是产生的请求号,也可以理解为一个程序的代码版本,所有的SAP程序都是在D系统(DEVELOPMENTSYSTEM)然后传到Q(测试)系统由顾问进行测试,又不干扰生产系统的程序运行,最后再传到P(生产)系统,覆盖原来的代码,变成修改后代码逻辑)恩,我感觉它是一种封装起来的思想。

我研究一下,它单独产生CR,而和它的主程序没有任何关联。

这也是必然的,因为INCLUDE是一个全局全系统的声明,一旦你取了一个名字,那么其他人也能够引用使用,这就导致它的修改CR是单独产生的。

这里也可以定义程序所需的数据类型和数据对象。

INCLUDE 

ZXXXX_F01:

习惯使用PERFROM来封装代码,取有意义的名字,然后把所有的FORM都放在这边。

在START-OF-SELECTION中,我们一般都会写以下几个PERFORM,

PREFORMfrm_get_data.(取数逻辑)

PERFORMfrm_alv_layout_build.(创建ALV显示格式)

PERFORMfrm_alv_set_columns.(调用ALV函数)

二、开发ALV的基本流程

第一步:

定义ALV所要用到的类型池:

TYPE-POOLS:

SLIS;

第二步:

定义ALV所要显示的数据对应的内表数据类型及内表数据对象;

第三步:

定义一些显示ALV时所要使用到的变量,例如:

Data:

w_repidlikesy-repid,“ABAP程序,我们一般取当前程序

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部分,在这个部分往往要指定w_repid的值,w_repid=sy-repid。

定义start-of-selection部分,在这通常会调用各种子程序,以下以标准ALV显示为例:

1)调用一个子程序(通常命名为frm_get_dataXXX(X代表任意自定义字母)),用于获取ALV所要显示的数据;

例如:

FORM 

frm_get_data.

……“其它处理逻辑

SELECT 

lifnr 

"

供应商账号

ktokk 

账号组

name1 

名称1

name2 

名称2

INTO 

CORRESPONDING 

FIELDS 

OF 

TABLE 

it_main

FROM 

zmmjyht003

WHERE 

(l_where)

.

……“其它处理逻辑

ENDFORM.

2)调用一个子程序(通常命名为frm_alv_layout_build),用于设置ALV所要显示的样式;

例如:

frm_alv_layout_build.

g_layout-zebra 

'

X'

.

g_layout-colwidth_optimize 

列数据最优化显示

g_layout-box_fieldname 

SELFLAG'

表示ALV行项目选中的字段

ENDFORM. 

3)调用一个子程序(通常命名为frm_alv_set_columns),用于完成ALV所要显示的列的相关设置;

frm_alv_set_columns.

REFRESH 

g_fieldcat_alv.

PERFORM 

frm_set_l_fieldcat 

USING 

LIFNR'

供应商账号'

p_pos 

p_name 

p_text.

DATA:

l_fieldcat 

TYPE 

slis_fieldcat_alv.

l_fieldcat-col_pos 

p_pos.

l_fieldcat-fieldname 

p_name.

l_fieldcat-seltext_l 

p_text. 

APPEND 

TO 

ENDFORM. 

4)调用显示ALV的函数,例如:

REUSE_ALV_GRID_DISPLAY;

frm_alv_display_data.

CALL 

FUNCTION 

EXPORTING

i_callback_program 

g_repid

i_callback_pf_status_set 

FRM_STATUS_ALV'

i_callback_user_command 

FRM_USER_COMMAND_ALV'

is_layout 

g_layout

it_fieldcat 

g_fieldcat_alv[]

TABLES

t_outtab 

EXCEPTIONS

program_error 

1

OTHERS 

2

ENDFORM. 

如果ALV所要展示的列过多时,建议先在数据字典系统中创建相应的结构,这样可免去对输出列表头信息的繁琐编辑处理,代码行也会缩短。

只要将上面函数中的it_fieldcat参数替换成i_structure_name,如:

I_STRUCTURE_NAME='

TY_OUT_FILE'

,注意:

此处的TY_OUT_FILE结构必须是数据字典中已经存在的对象

以上步骤,详见“示例程序”部分:

示例一(标准ALV)。

三、ALV相关开发细节

1、标准ALV与对象ALV的共同开发细节

2、标准ALV开发相关细节

2.1、ALV中的各种结构类型注解:

1)TYPE-POOLS:

slis:

用于指定ALV类型组;

2)slis_listheader:

用于定义topofpage的抬头结构;

3)slis_t_listheader:

用于定义topofpage的抬头表

4)slis_t_sortinfo_alv:

用于指定ALV排序分类合计等信息的数据对象;

3)slis_layout_alv:

用于定义布局类型数据对象;

4)slis_t_fieldcat_alv 

WITH 

HEADER 

LINE:

用于定义ALV列字段相关类型数据

对象;

(slis_t_fieldcat_alv是表字段的整体,slis_fieldcat_alv是某一个字段的内容,将该字段的内容写到slis_fieldcat_alv后,通过append添加到slis_t_fieldcat_alv中,后者是整个列表的标题,在显示的时候用到。

5)slis_t_event:

是event的整体可看作event的集合,感觉可以用来写表头。

slis_alv_event是某个event,需要将slis_alv_eventappend到slis_t_event.它可以包含图片和listheader等,也就是说listheader等是靠event来显示的。

6)slis_t_listheader:

是listheader的集合,slis_listheader是某个listheader。

将slis_listheader赋值后append到slis_t_listheader中。

它是内表的表头。

7)slis_listheader:

包含:

typ:

H=header,S=Selection,A=action.key:

是和s对应的,是那个的标题吧.info:

可以是变量和赋值的。

跟在key的标题后面,

是个表达值。

2.2、ALV中所用到的函数:

1)显示ALV函数:

EXPORTING

i_callback_program 

g_repid

i_callback_pf_status_set 

i_callback_user_command 

is_layout 

it_fieldcat 

TABLES

t_outtab 

上面“REUSE_ALV_GRID_DISPLAY“函数的参数说明:

1>

g_repid:

用于保存当前程序名,例如:

g_repid 

sy-repid 

VALUE 

保存当前程序名

2>

FRM_STATUS_ALV:

该子程序用于指定程序状态,例如:

FORM 

frm_status_alv 

p_extab 

slis_t_extab.

SET 

PF-STATUS 

STANDARD'

ENDFORM. 

3>

FRM_USER_COMMAND_ALV:

该子程序指定相关函数功能码的响应逻辑,例如:

frm_user_command_alv 

p_ucomm 

sy-ucomm 

p_selfield 

slis_selfield.

ok_code 

p_ucomm.

CASE 

ok_code.

WHEN 

CREATE'

……

DELETE'

…… 

ENDCASE.

p_selfield-refresh 

ALV被修改时会自动刷新,没有修改不进行刷新

4>

g_layout:

用于设置ALV布局样式,例如:

FORM 

g_layout-zebra 

g_layout-colwidth_optimize 

g_layout-box_fieldname 

ENDFORM. 

5>

g_fieldcat_alv[]:

用于指定ALV字段相关属性信息,例如:

REFRESH 

PERFORM 

FORM 

l_fieldcat-col_pos 

l_fieldcat-fieldname 

l_fieldcat-seltext_l 

l_fieldcat-no_zero 

APPEND 

ENDFORM.

6>

it_main:

此内表中保存的是ALV所要展示的数据,例如:

it_main 

typ_item 

LINE, 

ALV对应的内表

SELECT 

此函数的其它参数信息,详见附属信息中的'

函数常用参数

2)reuse_alv_events_get:

将各个事件的名字写到slis_t_event的name中。

这样,可以在后面,根据名字的不同,对不同的event付不同的form,来实现不同功能。

2.3、ALV其它相关信息:

1)ABAPalv中对数字字段进行去掉小数点后面的零的操作如下:

在slis_t_fieldcat_alv结构中,给demcimals_out字段设为零即可,代码如下:

IF 

P_FIELD 

LINE_SUM'

 

LS_FIELDCAT-DECIMALS_OUT 

0'

ENDIF.

2)通过HTML格式来显示表头,示例代码如下:

*-------ALV 

Commit 

Setting 

of 

ALV_top_of_page--------

FORM 

alv_top_of_page 

cl_dd 

REF 

cl_dd_document.

DATA:

m_p 

i.

DATA:

m_buff 

string.

*表头其实完全可以是一个html文件,自己使用html语言进行格式控制

<

html>

METHOD 

cl_dd->

html_insert

contents 

m_buff

CHANGING

position 

m_p.

center>

H2>

配件报废品种汇总表<

/H2>

/Cent

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2