SAP ABAP开发详解与高端应用 (第8页)

第 300 页 / 共 377 页

图4-180

输入传输信息,按回车键或单击上图中的 按钮,如图4-181所示。

图4-181

步骤四:运行事务代码FB01,测试增强结果。

如图4-182所示,填入公司代码。

图4-182

编辑总账凭证如图4-183所示,其效果如图4-184所示。

图4-183

图4-184

运行事务代码FB03,显示凭证行明细如图4-185所示。

29 2

第 301 页 / 共 377 页

图4-185

相关事务代码如表4-1所示。

表4-1

事 务 代 码 描 述

FIBF Maintenance transaction BTE

BERE Business Event Repository

BERP Business Processes

BF31 Application modules per Event

BF32 Partner Modules per Event

BF34 Customer Modules per Event

BF41 Application Modules per Process

BF42 Partner Modules per Process

BF44 Customer Modules per Process

4.5 第四代增强(Code Enhancement)的应用

这是一个普通的report,与一般程序没有任何区别,如图4-186所示。

图4-186

步骤一:光标放置在要增强的代码位置,插入一个增强点(enhancement-point),如图4-187

所示。

293

第 302 页 / 共 377 页

图4-187

输入名称,如图4-188所示。

图4-188

单击 按钮,创建增强点如图4-189所示。

图4-189

29 4

第 303 页 / 共 377 页

单击上图中的 按钮,如图4-190所示。

图4-190

单击上图中的保存按钮 ,增强点插入如图4-191所示。

图4-191

单击标准工具栏中的保存按钮 ,如图4-192所示。

图4-192

注:实际项目中要做的事情是实现(implementation)SAP 预留的enhancement point,具

体操作如下。

步骤二:单击应用工具栏中的 按钮,切换到增强状态,如图4-193所示。

图4-193

295

第 304 页 / 共 377 页

按照下列路径创建增强,如图4-194所示。

图4-194

填写增强实例及其所存包名称,如图4-195所示。

图4-195

单击上图中的 按钮,如图4-196所示。

图4-196

单击上图中的保存按钮 ,增强之后的代码如图4-197所示。

图4-197

29 6

第 305 页 / 共 377 页

单击应用工具栏中的 按钮,编译增强结果,如图4-198所示。

图4-198

选择增强对象,单击上图中的 按钮,如图4-199所示。

图4-199

步骤三:单击应用工具栏中的 按钮,切换到程序编辑环境,单击应用

工具栏中的 按钮,编译整个程序。

步骤四:单击应用工具栏中的 按钮,测试增强结果如图4-200所示。

图4-200

对于ENHANCEMENT-SECTION,定义和实现的方法与ENHANCEMENT-POINT 一样。

两者的区别是:

■ ENHANCEMENT-POINT 没有代码,只有一个预留点,允许在这个位置插入新代码

(implementation)。

■ ENHANCEMENT-SECTION 和 END-ENHANCEMENT-SECTION 之间有代码,

implementation 之后,替换旧代码,只执行新代码,原来的代码不再执行。

SAP还提供Modification机能(相关事务代码:SE95 SPAU SPAM)。建议不要轻易使用,

一般在系统升级时会被覆盖变更后的代码。

297

第 306 页 / 共 377 页

第 5 章 ABAP面试问题及答案

5.1 语法

5.1.1 基础知识

1.CHECK、EXIT、RETURN命令的区别?

■ CHECK

● CHECK 后面要跟一个表达式,当表达式值为假(false)时,CHECK 发生作用,

退出循环(LOOP)或处理程序(Processing Block)。

● 如果CHECK出现在循环中,则发生作用时,退出的是当前一次循环操作,程序会继

续执行下一次循环操作,其作用类似于Continue(Java 或C++中Continue也是如此)。

● 如果CHECK出现在循环以外,则发生作用时,退出的是当前执行的程序块,例如

一个FORM、METHOD或EVENT。

■ EXIT

● EXIT 如果出现在循环中,退出的是整个循环操作,程序会从循环结束处开始继续

执行,其作用相当于Java与C++中的Break。

● EXIT如果出现在循环之外,退出的是当前执行的程序块(Processing Block),例如

一个FORM、METHOD或EVENT,其作用与RETURN类似。

■ RETURN

● RETURN 用来退出当前执行的程序块,例如一个 FORM、METHOD 或 EVENT。

不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅

仅是退出循环。

● 虽然ABAP中EXIT 和RETURN都可以用来实现退出当前执行的语句块,但SAP的

帮助文件建议只在循环中使用EXIT,其他情况下要退出当前执行进程,使用RETURN。

2.初始化内表有几种方式?

■ 要初始化有或没有表头的内表,用REFRESH语句。

■ 如果使用没有表格工作区域的内表,可以使用CLEAR语句代替REFRESH语。

■ 如果使用有表头行的内表,CLEAR 语句仅清除表格工作区域,要重置整个内表而不

清除表格工作区域,使用REFRESH语句或CLEAR语句。

■ 使用REFRESH或CLEAR初始化内表后,系统保持在内存中保留的空间。可以用

FREE语句释放内存。

3.一个程序如何调用另外一个程序?

调用其他可执行程序使用“SUBMIT+程序名”语句,使用WITH关键字,可传递选择画

面参数。使用AND RETURN关键字,可在该程序执行完毕后,自动返回调用它的程序。

29 8

第 307 页 / 共 377 页

4.在一个程序中如何调用其他事物代码?

调用其他事务代码使用“CALL TRANSACTION + 事务代码”,使用AND SKIP FIRST

SCREEN可以跳过第一个画面,进入下一个画面。

5.在进行画面跳转时,CALL SCREEN与LEAVE TO SCREEN的区别?

CALL SCREEN 是将正在运行的画面挂起,进入所调用的画面,当使用 LEAVE TO

SCREEN 0时,能够返回原画面,可理解为嵌套调用;而LEAVE TO SCREEN是立即结束本

画面的执行,调用所指定的画面,在调用画面中,无法再返回原画面。

6.与索引相关的系统字段有哪些?分别有什么作用?

SY-INDEX存储DO循环的索引,SY-TABIX存储LOOP循环到内表的第几行,SY-DBCNT

存储从数据库中读取到的满足条件的记录条数,SY-LISEL 存储被选中行的内容,在事件 AT

LINE-SELECTION时起作用,该系统字段中的内容到下一个屏幕的时候还存在。

7.LOOP循环中AT控制逻辑有哪些?分别有什么作用?

■ AT FIRST功能:循环中第一条记录时调用。

■ AT LAST功能:循环中最后一条记录时调用。

■ AT NEW 功能:循环中当指定字段之前(包括指定字段)的组合和上一条记录不一样

时调用。

■ AT END OF功能:循环中当指定字段之前(包括指定字段)的组合和下一条记录不一

样时调用。

■ AT事件的注意点:AT事件中的工作区不同于LOOP循环的工作区,该工作区中位于

指定字段后面的值将不会被读取,如果需要用到则需read重新抽取一次。

8.MESSAGE消息有哪些类型和含义?如何自定义MESSAGE消息类?

A:Abend,立刻终止当前事务,弹出终止对话框。

X:Exit,立刻终止当前事务,进入DUMP的界面。

E:错误,画面的状态栏会弹出一个错误提示信息。

I:信息,弹出一个消息对话框。

S:确认,画面的状态栏会弹出一个正确提示信息。

W:警告,画面的状态栏会弹出一个警告提示信息。

可以通过语句DISPLAY LIKE mtype取代原错误图标;自定义MESSAGE消息类,通过

事务代码SE91。

9.ABAP中,如何自定义异常类?如何捕捉异常?

通过事务代码SE24,在Class Type中,选择Exception Class即可定义,在TRY CATCH

语句中就能够使用。

捕获异常:语法和JAVA相似

TRY

…

CATCH 异常类

…

ENDTRY.

10.什么是事物变式?事务变式有什么用?

299

第 308 页 / 共 377 页

事务变式是一组屏幕变式,用于预定义屏幕行为和默认值。通过使用变式功能,可以将

用户不需要的字段、子屏幕及全屏幕从用户视图中取消。可以给任何输入字段设置默认值,

字段也可以不用带 "Ready for Input" 状态。只能为对话和报表事务创建事务变式;变式中只

能包含普通屏幕、子屏幕及对话屏幕。

开发人员可以使用 GuiXT 脚本语言通过事务变式维护对屏幕进行修改。修改屏幕布局

的方式有:插入按钮、值帮助(Value Helps)、移动对象、插入屏幕等。

11.RANGE表内的字段有哪些?分别有什么含义?

RANGE表包括SIGN、OPTION、LOW、HIGH四个字段。RANGE表和select-option 的

变量差不多,sign = 'I' 或 sign = 'E' 是指INCLUDE 和 EXCLUDE,OPTION = 'EQ' 或其他

操作符,LOW 是指最少值(操作符是范围的话),HIGH 指最大值(如果操作符是‘EQ’,

该字段不起作用)。

12.对于FIELD SYMBOL赋值将使用什么关键字?

ASSIGN。

13.PERFORM 调用子程序时,分别对USING、TABLES、CHANGING 3个参数有什么

影响?

USING 可以传入单值、工作区,加VALUE参数后只能使用,不能对值做修改,PERFORM

结束后传入参数的值还是传入之前的状态。

TABLES 只能传入一个内表,程序逻辑可以对其进行修改,PERFORM 结束后内表的值

是影响后的值。

CHANGING可以传入内表、单值,程序逻辑可以对其进行修改,PERFORM结束后传入

参数的值是影响后的值。

注意,在传入工作区、单值的情况下,USING不加VALUE参数与CHANGING结果相同。

14.如何在程序间传送数据?

可以使用 EXPORT 语句在 ABAP/4 内存中存储数据字段簇。

语句为:EXPORT <OBJECT1> <OBJECT2> ... <OBJECTN> TO MEMORY ID

<ID-NAME>。

而调用程序就会检索数据。

语句为:IMPORT <OBJECT1> <OBJECT2> ... <OBJECTN> FROM MEMORY ID

<ID-NAME>。

其中:ID参数标识唯一的数据簇。

15.SAP和ABAP内存的区别?

■ 读取时使用方法不同

SAP内存使用SET/GET parameters方法。

ABAP内存使用 EXPORT 和 IMPORT方法。

■ 共享范围不同

SAP内存可以被所有的主Session访问,内存数据可以在同一个Session中的不同程序或

者不同Session之间共享数据。

ABAP只能在同个Session的不同程序之间共享数据。

■ 作用范围不同

30 0

第 309 页 / 共 377 页

SAP内存在整个终端Session时间内都有效。

ABAP内存只能在一个Session时间内有效。

■ 使用一般原则

SAP内存用于屏幕默认值输入。

ABAP内存用于模块之间传替数据。

5.1.2 应用技术

1.自定义搜索帮助有几种方式?如何实现?

■ SE11创建搜索帮助。

■ 调用函数 F4IF_INT_TABLE_VALUE_REQUEST。

在POV中或者 AT SELECTION-SCREEN ON VALUE-REQUEST FOR 中使用自定义的

搜索帮助可以使用函数“F4IF_FIELD_VALUE_REQUEST”。

2.怎么创建编码范围(Number Range)?

首先使用事务代码 SNUM/SNRO创建,在使用编码范围的编号时,需要首先将其锁定(函

数:NUMBER_RANGE_ENQUEUE),然后取出编号(函数: NUMBER_GET_NEXT),最

后解锁(函数: NUMBER_RANGE_DEQUEUE)。

3.函数中,如何给出错误消息?

有以下两种方式:

■ 在TABLES参数中增加返回表(Return Table),可以将执行过程中产生的错误消息返

回,在函数外对返回表做处理。

■ 定义EXCEPTION,当出现错误时,用RASING语句抛异常,RASING语句会直接影

响SY-SUBRC 的值,函数外可以直接根据SY-SUBRC 来做处理。

4.如何优化ABAP程序?

■ 可通过运行事务代码SE30,运行待检查的程序,查看各操作的百分比。

■ 避免在循环语句中使用SELECT语句,而是通过FOR ALL ENTRIES IN 语句抽取数

据到内表中。

■ 通过运行事务代码SLIN进行扩展检查,根据SAP提供的反馈信息优化代码。

5.前导零的处理方式

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’ 添加前导0

CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’ 去掉前导0

SHIFT 物料编码 LEFT DELETING LEADING '0'. 去掉前导0

6.怎样从文件服务器上读取文件?怎样写文件到文件服务器上?

从服务器上打开文件时,要确定文件的操作方式,调用语句:

OPEN DATASET dset FOR access IN mode [position]

[os_addition]

[error_handling].

从服务器上读取文件时,access 用output替换,再调用语句:

301

第 310 页 / 共 377 页

READ DATASET dset INTO dobj [MAXIMUM LENGTH mlen]

[[ACTUAL] LENGTH alen].

写文件到服务器上access 用input替换,再在调用语句:

TRANSFER dobj TO dset [LENGTH len]

[NO END OF LINE].

7.在使用 ABAP 内存的程序间进行数据交换时用到的两个语句是什么?

EXPORT TO MEMORY ID 用于将数据复制到 ABAP 内存,IMPORT FROM MEMORY

ID 用于将数据从 ABAP 内存复制到程序中。

在 ABAP 内存间进行交换的数据必须在两个程序中都进行声明,并包含同样的数据声

明。

8.SELECT SINGLE 和SELECT UP TO 1 ROWS 的区别是什么?

SELECT SINGLE WHERE条件要确定唯一记录;SELECT UP TO 1 ROWS可以确定多条

记录,只取第一条,一般用来进行存在性检查。

9.清空内表命令CLEAR、REFRESH和FREE的区别?

如果内表有表头行:

CLEAR ITAB 同时清空内表数据行和表头行的内容;

CLEAR ITAB[] 只清空内表本身,保留表头行的内容;

REFRESH只清空内表本身,保留表头行的内容。

如果内表没有表头行:

CLEAR和REFRESH一样,清空内表。

CLEAR ITAB.:带表头行时只清空表头行,不带表头行时清空整个内表。

CLEAR ITAB[].:只清空整个内表对象数据,不清空表头行。

REFRESH ITAB或REFRESH ITAB[].:只清空整个内表对象数据,不清空表头行。

FREE ITAB.或FREE ITAB[].:只清空整个内表对象数据,不清空表头行,同时释放内存。

10.FORM中USING、CHANGING、USING VALUE、 CHANGING VALUE的区别?

■ USING、CHANGING 引用传递,改变值。

■ USING VALUE 值传递,值不改变。

■ CHANGING VALUE 值传递,当正常结束后值改变。

11.MESSAGE 参数最多几个占位符,占位符对应的消息文本长度最长?屏幕显示消息

文本的长度最长?

最多占4个占位符,一个&为50个字节长,加上MESSAGE自身共有的长度为240。

所有的消息都存储在系统数据库表T100中,该表包括四个字段:

SPRSL(Language Key):语言代码。

ARBGB(Message class):消息类,用于将消息按应用分类储存。

MSGNR(Message number):三个数字的消息序列号。

TEXT(Message text):消息文本,是显示在屏幕中的信息文字,最多可以有72个字符。

消息类型共六种:A(终止)、E(错误)、I(信息)、S(成功)、W(警告)、X(退出)。

12.使用FOR ALL ENTRIES时的注意事项有哪些?

30 2

第 311 页 / 共 377 页

类似外连接的时候,用一个表的某一字段为条件,从另一数据库表中取得数据。

向LOOP套SELECT的时候用2个表,为了提升效率用FOR ALL ENTRIES。

■ 使用前要检查内表是否为空,否则会查询出全部数据。

■ 要尽可能多的用关键字,否则会把重复的删掉。

■ 此子句中不能使用LIKE、BETWEEN、IN、ORDER BY。

13.删除内表重复数据前应该做什么,如果要按照给定字段如何删除?

删除前应做SORT排序,如果要按照给定字段进行删除则需要COMPARING语句指定字

段。

14.哈希表和排序表的注意事项是什么?

排序表(SORTED TABLE)与标准表相同,也具有一个逻辑索引,但其按关键字升序排

序后再进行存储,其访问方式与标准表相同。

哈希表(HASHED TABLE)没有索引,只能通过关键字来访问。系统用哈希算法管理表

中的数据,因而其检索到一个数据行的时间与表的行数无关。

15.怎样做带按钮的选择画面?

类似CHECKBOX和 RADIOBUTTON,可通过PARAMETER进行设置。

16.求和函数(COLLECT)的注意事项?

■ 所附加的内表必须具有扁平结构(组件中不可包含内表)。

■ 工作区必须与内表的行类型兼容(不仅仅是可相互转换)。

■ 所有的非表关键字段必须是数字类型。

■ 将新行附加至内表末尾,已存在相同表关键字值的行,不附加新行,而是将数字字段

的值累计到已有数据行。

17.请列举ABAP程序的运行方式?它们一般表现为什么类型的程序?

可以分配事务代码并通过事务代码运行,用于完成一项系统功能,可以添加到最终用户

的系统定制菜单中。

可执行程序(Report):模块池程序。

不能直接通过事务代码运行的程序:功能组、ABAP 类库、ABAP 接口库、子程序、类

型组包含程序。

18.COLLECT和APPEND的区别,以及COLLECT命令的限制是什么?

要逐行填充内表,可以使用APPEND、COLLECT或INSERT语句。COLLECT用于添加

无相同表关键字的内表行,APPEND可以添加相同表关键字的内表行。

COLLECT命令的限制事项:

■ 要填充没有重复条目的内表,应该使用COLLECT。

■ COLLECT语句无法用于带深层结构的内表(组件中不可以包含内表)。

■ 为COLLECT指定的工作区域必须与内表的行类型兼容(不仅仅是可互相转换)。

■ 所有的非表关键字段必须是数字类型。

19.APPEND与INSERT对内表操作的区别?

语法:

APPEND WA TO ITAB

303

第 312 页 / 共 377 页

INSERT WA INTO TABLE ITAB

前者不能用于HASHED表,后者不能用于SORTED表的NON-UNIQUE操作。

20.排序表还能插入和删除吗?

语法是允许的,但是规范里不推荐。因为会引起索引重排而导致的性能问题。

21.AT FIRST、AT NEW、AT END OF 有什么区别?

■ AT FIRST:当前循环为内表的第一行,即当第一次循环操作时,系统会执行控制语句

块。

■ AT LAST:当前循环为内表的最后一行。

■ AT NEW f:行组的开头,行组指的是字段f和f前面(即左边)的全部字段,如果行

组中的任何字段内容不同于上一行,执行语句块中的内容。

■ AT END OF f:行组的结尾,如果下一行行组中的任何字段内容不同于上一行,执行

语句块中的内容。

22.AT NEW、AT END OF指定字段之后的字段将发生怎样的变化,应该注意什么?

在AT/END AT语句块内部,目标区域并没有用当前表格行进行填充,而是将进行下述操

作:对于AT FIRST 和 AT LAST,系统用“*”填充所有标准关键字段内容;对于AT NEW f

和AT END OF f,系统用“*”填充目标区域中所有出现在指定字段f后面(右边)的标准关

键字段。对于所有非标准关键字段,将进行初始化。

5.2 数据字典相关问题

1.激活锁对象时,产生的函数名字是什么?

首先要在 ABAP 字典中创建锁对象,才能在 ABAP 程序中设锁。创建锁对象时,系统

会自动生成两个函数来进行锁管理。

用于设锁的函数为 ENQUEUE_<锁对象名>,它用于在锁表(Lock Table)中生成一个锁

项(Lock Entry)。若设锁不成功的话,就会在 Return 中反映出来。

用于释放锁的函数为DEQUEUE_<锁对象名>,它用于从锁表中删除一个锁项。在 ABAP

程序中,只需使用 "CALL FUNCITION ..." 语句就可以调用它们。

这两个锁函数是在 SAP 系统的一个特殊工作进程中执行的,专门进行锁管理。它们运

行在一个单独的服务器上,而该服务器专门用于维护整个 SAP 系统的主锁表(Central Lock

Table)。

有两种锁类型:

■ 共享锁(shared)——只读锁,该模式允许多个用户访问指定表行,但只能读访问。

任何时候都不允许写访问。

■ 排他锁定(exclusive,not cumulative)——该模式允许单个用户对指定表行进行读和

写访问,其他用户不能访问该行。

■ 扩展排他锁定(exclusive,cumulative)——该模式避免具有读写访问权限的单个用户

获得对相同表行集的进一步锁定。当使用递归例程更新时,该模式很有用。

在事务SM12中查看锁表的情况。

30 4

第 313 页 / 共 377 页

2.向 SAP 表中添加字段的方法是哪两种?

这两种方法是Append 结构(Append Structure)和自定义 Include(Customizing Include)。

Append 结构是在向表尾添加字段时创建的,自定义 Include 由 SAP 开发人员指定,使用户

可以创建新字段。

3.Doman、Data Element和Table之间的关系,为什么要分三层?

同样字段定义一个字段可以方便使用。

域(Doman)是定义数据元素的技术属性,具体包括数据字典中的基本内置数据类型,

长度和小数位,进而确定该数据元素的数值范围。如果不同的数据元素属于相同的域

(Doman),它们就有相同的属性。数据字典中,每一个数据元素必须属于一个域,以确定其

基本性质,定义好数据元素可以用作结构或表类型中的字段组件或者数据库表的字段,因而

这些组件字段的基本属性也都由某个域决定。

数据元素(Data Elements)相当于定义在数据字典中的ABAP基本类型和引用类型。

表(Table)是一种数据库对象,数据字典中的表独立于数据库存在,一旦创建,则同样

结构的数据库表实体也将在物理数据库中创建。

4.创建数据库表时应注意哪些事项?

■ 有CURR类型的字段必须有参照表和参照字段。

■ 建表时主键必须连续排序,中间不能有非主键存在。

■ 插入第一条数据时操作比较特殊

5.列举ABAP数据字典中的对象及作用有哪些?

■ Tables。

■ Views。

■ Data elements。

■ Structure。

■ Domains。

■ Search Helps。

■ Local Objects。

6.CHECK TABLE和VALUE TABLE各指的是什么?关系怎么样?

如果一个表字段定义了外部关键字,则该表称为外部关键字表,而对应的参照表则称为

CHECK TABLE。如果在数据字典中为一个表字段指定了约束表,则其输入帮助可以是该表

中的关键字段值列表,或者是约束表中对应自动制定的输入帮助。

■ CHECK TABLE 用于字段级别的检查。

■ VALUE TABLE用于域级别的检查。

7.数据库表维护有哪些内容?

■ 表字段。

数据库表与结构类型、表类型的区别:后二者是单纯的数据类型,前者还包含其他相关

设定,如外码、索引等。

■ 技术设定

通过 Technical Settings 按钮维护,主要维护定义表中所存储数据的类型等信息。例如操

作数据库表时是否需要进行缓冲(对不需经常更新的数据库表提高后续查询效率)、是否要创

305

第 314 页 / 共 377 页

建系统日志等。

■ 索引——仅包括部分字段的数据库表拷贝,通过 Indexes 按钮维护。

● 主索引:只包含表关键字和指向整个数据条目的指针,系统自动生成。

● 附属索引:根据其他字段生成索引,按指定方式排序,自行创建,协助主索引提高

搜索效率。

5.3 报表相关问题

5.3.1 基本报表

1.报表事件

1)过程化事件有哪些?

■ INITIALIZATION。

■ START-OF-SELECTION。

■ END-OF-SELECTION。

2)选择屏幕事件有哪些?

■ AT SELECTION-SCREEN OUTPUT。

■ AT SELECTION-SCREEN。

■ AT SELECTION-SCREEN ON field。

■ AT SELECTION-SCREEN ON BLOCK block。

■ AT SELECTION-SCREEN ON RADIOBUTTON GROUP group1。

■ AT SELECTION-SCREEN ON seltab。

■ AT SELECTION-SCREEN ON END OF seltab。

■ AT SELECTION-SCREEN ON HELP-REQUEST FOR field。

■ AT SELECTION-SCREEN ON VALUE-REQUEST FOR field。

3)在使用逻辑数据库时,如HR报表,涉及的逻辑数据库事件有哪些?

■ GET node。

■ GET node LATE。

4)报表操作事件有哪些?

■ TOP-OF-PAGE。

■ END-OF-PAGE。

■ AT-USER-COMMAND。

5)交互式报表事件有哪些?

■ AT USER-COMMAND。

■ AT LINE-SELECTION。

■ AT PF-FUNCTION KEY(设置功能键)。

6)按顺序举例说明各个Report事件及其作用?

■ LOAD-OF-PROGRAM :程序执行时,自动触发该EVENT。

■ INITIALIZTION:对程序变量进行初始化。

30 6

第 315 页 / 共 377 页

■ AT SELECTION-SCREEN OUTPUT:选择屏幕PBO事件,显示选择屏幕之前触发。

■ AT SELECTION-SCREEN:选择屏幕PAI事件,用户在选择屏幕上执行某些功能。

■ START-OF-SELECTION:选择开始事件。

■ END-OF-SELECTION:选择结束事件,一般在该事件中输出列表。

■ TOP-OF-PAGE:页眉控制。

■ END-OF-PAGE:页角控制。

■ AT LINE-SELECTION:行选择控制,用户选择某列表行时触发。

■ AT USER-COMMAND:用户交互控制,用户选择某个Gui功能时触发。

2.报表选择画面

1)报表的选择画面上能否添加自定义工具栏?

能够添加,通过语句SELECTION-SCREEN FUNCTION KEY n(n为1至5,最多定义5

个)。

2)如何对报表的选择画面元素进行分组?

在PARAMETERS或SELECT-OPTIONS后使用附加语句“MODIF ID + 组名”。

3)如何更改屏幕各元素的状态?举例一些比较常用的屏幕属性。

在报表 AT SELECTION-SCREEN OUTPUT 事件中或 PBO(PROCESS BEFORE

OUTPUT)中,利用如下代码:

LOOP AT SCREEN.

….MODIFY SCREEN.

ENDLOOP.

SCREEN-NAME:画面元素的名称。

SCREEN-GROUP1 ~ SCREEN-GROUP4:对画面元素的分组。

SCREEN-INPUT:能否输入。

SCREEN-INVISIBLE:是否可见。

SCREEN-LENGTH:可见长度。

SCREEN-ACTIVE:是否是可用的状态。

4)在什么时候触发TOP OF PAGE语句?

■ 第一个WRITE 命令。

■ 输出行数超过LINE-COUNT属性值。

■ NEW-PAGE命令。

5)Report的跳转语句是什么?PICK 是什么?怎么用?

该语句为AT LINE-SELECTION。代码 PICK为内部触发 AT LINE-SELECTION 事件。

在预定义界面中,将“编辑→选择”和<F2>分配到PICK。设置功能键<F2>自动激活鼠标

双击功能。

6)介绍一下下拉列表常用到的技术点?

下拉列表多用到 HIDE 指令、READ LINE 指令、事件 AT LINE-SELETION、AT

USER-COMMAND及AT PF<N>。事件AT LINE-SELECTION定义用户双击列表某行时触发

的事件,AT USER-COMMAND 定义用户按下某按钮,或者选择某一菜单项或输入命令后触

307

第 316 页 / 共 377 页

发的事件及AT PF<N>用户按下功能触发的事件。

7)如果运行报表输出的程序,不想输出到屏幕上,而是直接打印应该怎么做?

在程序中利用代码NEW-PAGE PRINT ON将生成的列表直接发送到SPOOL系统进行打

印,不在屏幕上显示。

5.3.2 ALV报表

1.ALV报表实现的流程是怎样的?

声明数据对象 → 定义选择画面 → 从数据库取数 → 处理数据 → 调用显示数据。

2.显示ALV常用的几个函数是什么?

■ REUSE_ALV_GRID_DISPLAY。

■ REUSE_ALV_LIST_DISPLAY。

■ REUSE_ALV_GRID_DISPLAY_LVC。

3.ALV显示中的小计如何实现?

■ 使用SUBTOT:

ALV可以实现自动小计,首先字段目录参数中添加DO_SUM = X,然后传入排序表,可

以在排序表中指定需要小计的列。

■ 使用AT 语句:

在LOOP 循环中使用AT END OF FIELD逻辑。

4.函数 ALV 和面向对象ALV有什么不同?

函数 ALV 和 面向对象 ALV 都能够实现按钮自定义、数据修改、按钮处理自定义等操

作。通常情况下函数 ALV主要用于报表数据展示及简单交互;面向对象ALV主要用于Dialog

程序开发,可以进行复杂的控制,比如单元格的修改控制(函数只能控制到列修改性)、自定

义<F4>等。面向对象ALV可以根据容器排列很方便的定义布局,一个屏幕可以放多个ALV,

但是函数 ALV只能一屏显示一个ALV。

5.ALV是什么,能简单介绍一下ALV的作用吗?

ALV(ABAP LIST VIEW)是ABAP的报表显示工具,它把内表中的内容以设定的格式

显示出来,附加一些功能,如下载为本地文件等。

5.3.3 SmartForm报表

1.谈谈SmartForm中,Template和Table表格的区别?

Template是静态表格,单元格的输出是一定的。Table是动态表格,包含在循环内,内表

能够按条输出。

2.SmartForm如何实现公司LOGO打印?

■ 用SE78导入公司LOGO,导入时只能导入位图和GIF文件。导入位图时,要注意用

256色,否则会导致图片打印有问题。然后在SmartForm中添加图片即可。

3.SmartForm中如何控制段落、单个字符的输出格式?

用Styles 可以定义不同的段落、字符格式,在文本输出时可以指定格式。

4.什么是SmartForm,简述其创建过程?

SmartForm的基本思想是为了提高处理的效率,将数据筛选、整理过程与数据在Form中

30 8

第 317 页 / 共 377 页

的应用处理及格式化过程相分离。

将数据库中的数据通过SmartForms格式化并输出的步骤如下:

■ 提取应用数据。

■ 定义Form格式及相关数据接口。

■ 将数据传输至Form中,并批量输出。

5.4 对话程序

5.4.1 事件

1.Dialog 中的事件有哪些?

■ PBO(PROCESS BEFORE OUTPUT)。

■ PAI(PROCESS AFTER INPUT)。

■ POV(PROCESS ON VALUE-REQUEST)。

■ POH(PROCESS ON HELP-REQUEST)。

2.介绍一下Dynpro程序结构以及运行机制?

■ 逻辑上分为PBO,PAI以及POV,POH

■ 建立程序时物理上TOP,O01,I01,F01.

■ 运行机制:TCODE->PBO->PAI……

3.解释一下PBO,PAI以及POV,POH?

■ PBO:PROCESS BEFORE OUTPUT(显示前处理过程),在向用户显示屏幕Gui之前

触发,一般做画面初始化和设定Status、Title、动态设定画面属性和清空变量。

■ PAI:PROCESS AFTER INPUT(输入后处理过程) 在用户进行某些屏幕行为后触发,

对应一些用户操作、画面检查。

■ POV:PROCESS ON VALUE-REQUEST对应功能键<F4>,用户选中画面上某个字段

按<F4>键,类似检索帮助。

■ POH:PROCESS ON HELP-REQUEST对应功能键<F1>。

5.4.2 控件

1.如何在Table Control中实现选中一行或多行的效果?

将内表第一个字段定义为一个长度为1,类型为C的变量,并在Table Control属性框中

将该字段填写到选择字段属性中。

2.Dialog开发的几个常用控件是什么?

子屏幕、文本、输入框、输出框、容器、表控制、按钮等。

3.简述表格控制和步循环的区别?

表格控制和步循环是用于屏幕表格显示的对象。表格控制只是增强了的步循环,它可以

使用桌面应用程序中表格工具的“Look”和“Feel”来显示数据。表格控制还提供使表格易

于查看和使用的专用格式化功能。

步循环的一个特点是它们的表行能够在屏幕上跨越多行。相反,表格控制中的行总是单

309

第 318 页 / 共 377 页

行,但可以很长(表格控制的行能够滚动)。

通常表格控制所提供的许多特征由系统的 SAPGUI 前端操纵, 因此,不必在ABAP/4 事

务中编制任何特征。

5.4.3 语法

1.Dynpro中画面调用的几种方式和各自的好处是什么?

■ SET SCREEN next_screen_number:为当前屏幕指定后续屏幕,不会自动返回当前屏幕。

■ CALL SCREEN screen_number及CALL TRANCTION tcode:挂起当前屏幕序列,进

入新屏幕(序列)或事务。在新的屏幕序列中,通过语句LEAVE SCREEN TO SCREEN

0调用的屏幕就能够返回到挂起的屏幕序列上(返回到原程序)。

■ LEAVE SCREEN:如果未完成当前屏幕控制流就要转入后续屏幕,使用此语句。

■ LEAVE TO SCREEN screen_number及LEAVE TO TRANCTION tcode:未完成当前屏幕

就要转入后续屏幕,并且不返回原有程序。

2.举例说明Dynpro的动态属性有哪些?

■ NAME屏幕字段名称。

■ GROUP1、2、3、4,屏幕字段属于哪个组。

■ ACTIVE 1可用,0不可用。

■ REQUIRED 1必入力,0非必入力。

■ INPUT1可入力,0不可入力。

■ OUTPUT1可显示,0不可显示。

■ INTENSIFIED1强调显示,0非强调显示。

■ INVISIBLE1为*,0为输入即可见。

■ LENGTH字段输出长度。

■ DISPLAY_3D以三维框架显示字段。

■ VALUE_HELP有查询帮助的字段。

3.Dynpro逻辑块中,Field的作用是什么?

■ 用来传值。

■ 进行字段输入检查(防止所有控件都变灰)。

4.Field Module和On Value-Request有什么作用?

在Dynpro程序中,控制屏幕控件是否输入修改值等操作,主要用于屏幕数据的检查。

5.5 批处理

5.5.1 原理

1.BDC录屏的事务代码是什么?

SHDB。

2.简述BDC与BAPI之间的区别?

都可以用作数据导入,但是BDC是完全模拟前台操作,而BAPI是SAP提供的标准API,

31 0

第 319 页 / 共 377 页

通过调用BAPI在后台生成相应数据,性能高于BDC导入方式。

3.BDC录制的注意事项?

将要填写的字段全部输入,保证其能正确被录制下来,不需要填写的字段不要操作,以

免录制后产生冗余字段而产生错误。

4.谈谈BDC的运行模式和更新模式?

运行模式包括:A.全屏幕显示;E.只有在发生错误时显示屏幕;N.不进行屏幕的显示,

将相关信息记录到信息内表里;P. 不进行屏幕的显示,可进行DEBUG测试。

更新模式包括:A.异步更新;S.同步更新;L.本地更新。

5.BDC执行出错时,为查看设置错误处,显示模式应怎样设置,A、E、N分别代表什

么含义?

可以设置E.出错时转前台运行,有机会输入修正数据。

如果不想马上转前台用 Insert_Group 插入一个Session。

A .全画面表示;

E.碰到错误时弹出;

N.不弹出错误画面,后台运行。

6.什么是BDC(Batch Data Communication)?简单介绍其流程?BDC调查有哪些方式?

BDC有几种,分别是什么?

BDC是SAP常用的一种数据传输方法。用于一些数据量大,但是对速度又要求不高的数

据传输。

其流程大致分为如下几步:

■ 提炼数据。

■ 把提炼的数据转换到BDCDATA内表中。

■ 根据BDC类型通过Call Transaction形式执行,或通过Session形式执行,如果Session

执行成功,数据将被传送成功。

调查BDC的事务代码:SHDB,查看Session执行结果的事务代码:SM35。

7.如果想把一个BDC的程序定义为零点开始启动应该怎么做?

通过计划后台作业(事务代码SM36),定义Job 并设定Job起始时间为零点。

5.5.2 语法

1.在BDC程序中,BDC内表所用的构造名及其字段是什么?

BDC内表所用的构造名为BDCDATA,其中字段分别是:

■ Program Program name of Transaction。

■ Dynpro Screen number of Transaction。

■ Dynbegin Indicator for new Screen。

■ Fnam Name of Database Field from Screen。

■ Fval Value to Submit to Field。

2.BDC Session如何创建?在程序中如何处理?

BDC Session创建过程如下:

■ CALL FUNCTION‘BDC_OPEN_GROUP’。

311

第 320 页 / 共 377 页

■ BDC内表做成。

■ CALL FUNCTION‘BDC_INSERT。

■ CALL FUNCTION‘BDC_CLOSE_GROUP。

使用如下语句可以立即执行BATCH INPUT SESSION。

SUBMIT RSBDCBTC AND RETURN WITH QUEUE-ID = WK_QID.

在SM35下查看BATCH INPUT SESSION执行结果。

3.BDC时如何确定表控件里各行的数据?

用括号数字确定BDC输入行数。

5.6 增强

1.什么叫增强?

增强就是ERP系统中标准程序的出口,在该出口中由用户根据企业实际需求编写客户化

逻辑代码。为什么会有出口呢?因为正常的业务系统不能满足实际需求,这时可以在出口中

增加一些功能,来达到要求,这也就是为什么它还叫增强。在SAP中,出口就是标准程序最

后要调用的一个函数或者功能模块,这个函数或功能模块的输入已经由SAP定义好。自己写

的SAP出口程序在系统升级的时候会被保留,而更改标准程序则会在SAP系统升级的时候被

覆盖。

2.如何查找SAP的第一类增强(User Exit)?

通过SE37,以EXIT*开头,找到的函数大多是做系统预留的出口函数。前面说过,用户

出口是标准程序留给用户的接口,标准程序通常不允许用户任意修改,如果修改需要申请

Access Key。而且修改标准程序可能导致的错误,ERP公司通常是不负责的。在SAP中,自

定义的程序通常以字母Y或Z开头,因此,出口函数中都预包含了一个Z开头的程序。

3.如何查找SAP的第二类增强(Customer exit)?其包含哪几方面?

客户自定义程序通过Call Function来调用SAP库中的一些系统函数,而用户增强的概念

刚好与之相反,可以使用一个由SAP功能模块调用的功能模块出口。

可以在下面这几个层面对模块进行增强:在ABAP程序中的Function Module Exi(t E类);

在 Gui 接口中的 Menu Exit(C 类);在指定区域插入一个子窗口的 Screen Exit(S 类);在

ABAP数据字典中表和结构的增强Table Enhancement(T类);还有在屏幕指定区域添加用户

自定义功能的Field Exit和Keyword Exit。

4.什么是 BADI?

即Business Add-in,是基于ABAP对象的一种增强技术。SAP预定了一些接口,供客户

进行实现,完成增强。它是一种新的功能增强概念,使用 ABAP 对象技术。实现 BADI 要

用到类、接口及方法等面向对象的概念。

在进行增强时,必须先定义 BADI,为 BADI 创建一个接口。接着创建一个适配器类

(Adapter Class)来实现这个接口,然后创建这个适配器类的实例。

5.SAP的第四类增强(Enhancement Spot)指什么?

可称为隐式增强,在代码中,可插入增强点对代码进行增强。Enhancement Spot 分为

31 2

第 321 页 / 共 377 页

ENHANCEMENT-POINT与ENHANCEMENT-SECTION,ENHANCEMENT-POINT添加的新

代码,能够与旧代码一起运行;ENHANCEMENT-SECTION增加的新代码,将覆盖旧代码。

6.如何建立增强?

■ 找到增强。

■ 建立增强项目。

■ 添加增强的组件添加进增强项目。

■ 编辑增强,添加自己的代码。

■ 激活增强代码。

7.与增强相关的事务代码有哪些?

■ 对于Customer Exit:SMOD查看增强组件,CMOD建立项目后,实现增强。

■ 对于BADI:SE18查找接口,SE19对接口进行实现。

8.如何进行数据库表字段的增强?Append和Include的方式有何区别?

Append 结构(Append Structure)是在向表尾添加字段时创建的,自定义 Include

(Customizing Include)由 SAP 开发人员指定,以使用户可以创建新字段。

它们之间的区别在于 Append结构只能由该表使用,其他表不可使用;Include能够插入

任意一个结构或表,其中当插入表时,该表会自动转换为相同字段的结构。

9.实现功能模块出口时SAP,应使用应用程序中的哪条语句?

某些 SAP 应用程序中存在功能模块出口,它使用户能够向 SAP 程序中添加一些功能。

通过搜索 "CALL CUSTOMER" 可以发现是否存在功能模块出口。

10.什么叫BTE (Business Transaction Event),BTE的两种类型?

BTE可以通过函数的模式附加一个组件到SAP系统中,从本质上讲,BTE也是预定义的

访问接口。

BTE的两种类型:

● Publish and Subscribe Interface:通过事件驱动的模式从SAP提供的参数触发一个或多

个事件(函数),但是这些事件不会返回信息给SAP,这种模式不影响SAP的正常业

务流程。

● Process Interface:属于SAP控制业务流程的一部分,这个接口可能对应多个事件,但

是每次运行的时候只能根据需要选择运行其中的一个事件,SAP供给参数接口,并且

返回参数给SAP,这种模式影响了SAP的正常业务流程。

5.7 接口

1.SAP有哪些外部接口及其内容?

SAP接口模式主要有RFC、BAPI、IDOC。

■ RFC:RFC 是 SAP 系统和其他(SAP 或者非 SAP)系统间的一个重要而常用的双向

接口技术,也被视为 SAP 与外部通信的基本协议。简单地说,RFC 过程就是系统调

用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有

一个必须是 SAP ABAP 系统。这种远程功能调用也可在同一系统内部进行(如本地

SAP系统内的远程调用),但通常情况下,调用程序和被调用程序处于不同系统中。

313

第 322 页 / 共 377 页

■ BAPI:BAPI 实质上是一种特殊的、支持远程调用的业务对象方法,并通过远程支持

的功能模块实现。BAPI支持同步与异步的数据通信过程,典型的BAPI功能包括业务

对象的创建、属性的读取与更新操作。

■ IDOC:IDOC是SAP系统之间或SAP系统与外部系统之间电子数据交换的标准数据

格式。通过IDOC接口可以实现SAP 系统之间以及SAP 系统与其他系统之间的数据

交换。使用IDOC的应用必须能够写入或读取IDOC格式的数据。

2.简述ALE/EDI接口类型概念及应用?

ALE:用于同一个企业中不同SAP系统之间的数据交换,通过IDOC格式的数据创建分

布式的系统。

EDI(Electronic Data Exchange,电子数据交换):用于实现不同企业间的电子数据交换,

是各应用系统间的结构化电子数据交换标准。EDI中的IDOC符合EDI标准,SAP格式的数

据通过EDI子系统转换为EDI标准,然后与业务伙伴进行数据交换。

ALE/EDI通过业务连接器(Business Connector),可以将业务文档以IDOC的形式发送至

Internet;通过IDOC也可连接其他业务应用系统,如PC应用、外部工作流工具等。

5.7.1 RFC接口

1.什么是RFC,有哪些通信模式?

RFC是Remote Function Call的简称,是SAP系统和其他系统之间重要而常用的双向接

口技术,它包含同步RFC、异步RFC、事务性RFC、队列RFC和并行RFC。

2.RFC中涉及的常用事务代码有哪些?

■ SM51:查看当前 SAP系统中活动的应用服务器,包括 Server_Names、Host name

和 Type(服务类型)。

■ SM49:查看、设定并执行外部命令。

■ SM59:配置RFC连接,其中相同类型的RFC目标被组合至同一个目录。这些远程目

标的定义将保存在表RFCDES中。

3.根据调用的不同,RFC接口提供了什么样的服务?

■ ABAP 程序的调用接口:任何 ABAP 程序都可以使用 CALL FUNCTION...DESTIN

ATION预计调用远程函数。DESTINATION参数告诉SAP系统被调用的功能将在调用

者之外的系统上运行,通过 RFC 接口与远程系统进行通信。如果远程函数来自 SAP

系统,则必须是时间的函数模块,并在功能库中注册为“支持远程调用

REMOTE-FUNCTION-ENABLE”,通信规则都通过ABAP的RFC接口实现。

■ 非SAP ABAP程序的调用接口:在RFC的实现过程中,如果调用或被调用一方是非

ABAP 程序,则非 ABAP 程序必须以特定的规格进行编程,确保它可作为 RFC 通信

的一方。SAP 系统为外部程序提供 RFC 支持接口(RFC-supported interface)和 GUI

支持接口(GUI-supported interface)。这样,在非SAP 系统中,外部程序就可以调用

并执行SAP远程函数模块。

4.RFC接口的具体功能包括哪些?

■ 登录并退出远程系统,并执行权限检查。

■ 调用并管理远程系统会话所需的通信例程。

31 4

第 323 页 / 共 377 页

■ 将参数转换成远程系统所需的格式。

■ 处理通信过程中的错误。

5.在通过CALL FUNCTION语句进行远程功能调用的基本模式有哪些?

■ CALL FUNCTION - DESTINATION:以同步 RFC 方式实现的远程函数调用。如果

DESTINATION后无其他附加项,则形成同步RFC调用,调用程序等待远程调用的结

果以继续执行。

■ CALL FUNCTION - STARTING NEW TASK:以异步RFC方式实现的远程函数调用。

通过STARTING NEW TASK 附加项形成异步RFC调用,调用程序不等待返回结果继

续执行,结果将在回调子程序(CallBack SubRoutine)中接收。

■ CALL FUNCTION - IN BACKGROUND TASK:以事务性RFC方式实现的远程函数调

用。通过IN BACKGROUND TASK 形成事务性RFC调用,远程功能暂不开始执行,

等待COMMIT WORK语句出现时,一次性执行一个或多个远程功能。

6.怎么创建一个支持远程调用的RFC?

在 SAP 系统中,RFC 的创建方式与普通函数模块类似,只是编写函数模块时需要在

Attribute选项卡中将Processing Type 选项设为Remote-Enable Module,在传入、传出参数那

里需要选择参数为Passing Value。

7.怎么调用一个SAP标准RFC?

在SAP中,功能模块的调用通过 CALL FUNCTION 语句实现。远程功能作为普通函数

模块调用的扩展,可通过在CALL FUNCTION语句中添加DESTINATION子句完成,其语法

格式与普通调用完全相同。

8.怎样建立RFC程序?RFC程序传递的参数是传递值还是引用?如何建立函数组?

在SE37中建立函数模块的时候,Attributes选项卡中选中 Remote Function。RFC程序传递

的参数都是值传递(选中 Pass Value 选项)。建立函数组可进入 SE80,选中屏幕左边的

Repository Browser选项,在第一个输入框中选中函数组,在第二个输入框中输入需建立的

函数组名,再按回车键就可以了。或者从 SE37进入,在菜单上选中go to→function group

→create group。

9.怎么维护DESTINATION(远程目标)?

SM59 中包含链接和登录远程系统所需的全部参数信息。还可以在远程调用时直接指

定当前系统的应用服务器作为RFC目标。通过SM51查看当前SAP系统中活动的应用服务器。

5.7.2 BAPI接口

1.什么是BAPI?你使用过哪些BAPI实现什么功能?

BAPI业务应用程序接口(Business Application Programming Interface,简称BAPI)是面

向对象程序设计方法中的一组程序接口。它允许程序员通过SAP将第三方软件整合成R/3专

有产品。为了完成一些特殊的商业任务,如上传交易数据等,R/3系统中内置了BAPI。

2.什么是业务对象类型?它包含哪些组件?

业务对象类型是业务对象的定义和描述,面向对象构架的实现基础,也就是SAP系统中

的类,它封装了业务功能和数据。它包含接口、关键字段、属性、方法和事件5个业务组件。

3.如何创建一个BAPI?

315

第 324 页 / 共 377 页

■ 定义BAPI Structure (Structure不能在BAPI中重复使用,因为一旦BAPI被释放,其

Structure将被冻结)。

■ 创建FUNCTION MODULE(每个BAPI必须有自己的Function Group,Function Group

属性必须为RFC)。

■ 创建Business Object(SW01)。

■ 使用BAPI WIZARD创建API Method(这样BAPI可以被外部程序调用)。

■ 释放BAPI Function Module,释放Business Object Type,释放BAPI作为BOR的一种

Method。

4.编写BAPI的注意事项有哪些?

BAPI不能包括Call Transaction 或 Submit Report那些会跳转到别的程序的语句;BAPI

的结构中不能使用Append或Include,并且每个BAPI的结构都必须新建;BAPI中不能使用

Dialog,如需进行文件选择或用户交互的也不能在RFC中出现。

5.谈谈与BAPI相关的事务代码。

■ SWO1业务对象创建器。

■ SWO2 业务对象浏览器。

■ SWO3业务对象仓库浏览器。

■ BAPI对象浏览器。

6.RFC和BAPI的区别?

■ BAPI和RFC不是同一个层次上概念。BAPI是SAP提供的基于业务对象的函数,关

键是它们处理的对象是R/3的业务相关Business Object,比如单据类销售订单、组织、

公司等,它们是一系列实体。RFC则是一种系统间通讯的方式(Remote Function Call),

一个BAPI函数往往是一个RFC函数。

■ BAPI是SAP里一个很好的思想,把业务对象都对象化了。

5.7.3 其他

1.本地文件上传为PDF、Excel文件使用的函数是什么?

■ KCD_EXCEL_OLE_TO_INT_CONVERT - 上传EXCEL文件。

■ CONVERT_OTFSPOOLJOB_2_PDF - Converts a OTF spool to PDF。

■ CONVERT_ABAPSPOOLJOB_2_PDF -Converts ABAP spool output to PDF。

2.FTP文件的上传、下载操作是什么?

FTP程序大致流程为:

■ FTP_CONNECT – 打开并登录FTP服务器的连接。

■ FTP_COMMAND – 在FTP服务器上执行一个命令。

■ FTP_DISCONNECT –关闭指向FTP服务器的连接。

FTP_COMMAND 中输入标准的 FTP 命令。如更改 FTP 目录 "cd dir"、更改本地目录

"lcd localdir"、上传文件"put file"。

3.本地文件上传为CVS文件的函数?

■ TEXT_CONVERT_CSV_TO_SAP:导入CSV数据到SAP系统。

■ GUI_UPLOAD:文件上传。

31 6

第 325 页 / 共 377 页

4.SAP文件操作都有哪几种?分别有什么操作?版本有什么限制?

SAP文件操作的有以下两种文件:

■ 顺次文件(服务器文件)。

■ 本地文件(客户端文件)。

顺次文件的操作包括:打开、读取、写入、关闭、删除。

本地文件的操作:上传、下载。根据版本具体函数如下:

■ 4.7版本以后:

● GUI_DOWNLOAD

● GUI_UPLOAD

■ 4.6版本以前,性能不好:

● WS_DOWNLOAD

● WS_UPLOAD

● DOWNLOAD

● UPLOAD

5.在文件处理时,文件中出现乱码,应该从哪方面考虑?

Open dataset 时指定字符编码。

6.简单描述Web Service的创建过程?

■ 发布大体步骤:SE37向导发布Web Service, SOAMANAGER配置端口。

■ 调用大体步骤:SE80创建代理类,LOCONFIG创建逻辑端口,SE38程序中调用,创

建代理类对象,调用对象的方法。

7.现阶段接口开发使用的技术?

企业服务总线(ESB:Enterprise Service Bus)+WebService。

8.为一个远程调用函数(Remote-Enabled Module)创建WEB SERVICE都有什么相关的

事务代码?

创建WEB SERVICE:SE37/SE80。

9.在企业信息系统结构内企业服务总线是如何使用的?

企业服务总线来管理 ERP 和其他接口交互的信息,可以查看监听管理双发系统的交

互信息。

5.8 数据库知识

5.8.1 基础知识

1.ABAP数据字典有哪些对象或元素?

Data element、Domain、structure、lock object、views。

2.据库提交确认和数据库回滚取消语句?

■ COMMIT WORK。

■ ROLLBACK WORK。

317

第 326 页 / 共 377 页

3.什么是LUW?

LUW称为逻辑工作单位,同一个逻辑工作单位共享一段内存,将操作放置在同一个LUW

中可以控制事务的同时提交和回滚。

4.简述Modify、Insert、Update对数据库表做操作时的影响。

Modify 操作数据库时,可以使用From 内表或者工作区来进行多条或单条的更新,要求

内表或工作区跟数据库表的结构一致。当数据库表中存在重复记录时,执行更新操作,更新

的值为内表或工作区的值;当数据库表中不存在记录时,执行插入操作,插入的值为内表或

工作区的值。

Insert 操作数据库时,可以用From内表或者工作区进行多条或单条的插入,要求内表或

工作区跟数据库表的结构一致。当数据库中不存在重复记录时,执行插入操作,插入的值为

内表或工作区的值;如果已经存在重复记录,会出现更新异常。

Update 操作数据库时,可以直接set 来进行单值更新,可以用From Table 和工作区进行

批量更新,要求内表和工作区跟数据库表的结构一致。当存在记录时执行更新操作;当不存

在记录时,没有数据会被更新,同时也不会产生异常,sy-subrc = 0。

5.描述域、数据元素、表字段之间的关系。

域为数据字典中最小的单元,数据元素是基于域进行定义的,表字段则是通过数据元素

进行定义的。

6.数据字典有几种缓冲方式,适用范围是什么?

Full Buffer(全缓冲),一个表的数据要么全在内存中要么全不在。当表记录很少,访问

非常频繁且很少进行修改时使用。

Generic Area Buffer(常规区域缓冲),语言代码相关的表是最常使用的情况,如文本描述表,

缓存满足在Generic Keys 中定义的字段(个数介于1个和表主键数减1之间)的值的记录。

Single-Record Buffer(单记录缓冲),数据库表记录比较多,并且经常都是读取一条记录,

如select single。

5.8.2 ABAP和数据库

1.ABAP 数据表的主索引是什么?索引的好处与坏处有哪些?建索引的注意事项有

哪些?

数据表的主键即是表的主索引;好的索引能加快数据读取的速度但会增加更新数据库表

的时间;建立次级索引时应尽量选取那些查询条件经常使用到的字段。

2.ABAP透明表有哪几种数据类(Data Class)?对数据的存储有什么影响?

数据类主要分为以下三类:

■ 主数据类:经常读取,很少修改的数据。

■ 业务数据类:经常更新的数据。

■ 组织数据类:系统初始化时存在的数据,也很少修改。

数据类决定了数据实际存放的物理区域。

3.SAP中有几种表,他们的区别是什么?

Transparent table(透明表),Pooled table(共享表)和Cluster table(簇表)。透明表是和

DB层的物理表(Physical Table)对应的,后两者则是不对应到DB表的。 比如TBSL就是

31 8

第 327 页 / 共 377 页

一个共享表,在DB层找不到此表。然后多个簇表或共享表组成一个表簇(table cluster)或表

池(Table Pool),表簇和表池是DB层的一个物理表。

4.什么是簇表(cluster table)?举出知道的簇表。

簇表是逻辑上有关联的几个表,在定义的时候分配给一个表簇,如Bseg。

5.找数据库表有哪些常用的方法?

■ 单击画面上需要查找的字段,单击<F1>键,在弹出画面中的技术信息中查找。

■ 通过 ST05 进行数据库操作的跟踪,对于在前台界面进行数据的新增或更新,在数据

库中都会有所体现。

■ 通过事务SE80→Repository Information System→ABAP字典→数据库表格中,对某个

字段进行查询。

6.如何提高程序效率?

■ 使用OPEN SQL时注意以下原则:

● 尽可能减少满足条件的数据条目数量。

● 减少数据的传输量,以减少网络流量。

● 减少访问的数据库表量。

● 减少查询难度,可以通过整理选择标准来实现。

● 减少数据库负载。

■ 不要在LOOP中访问数据库,尽量将数据预先提取到内表中,然后再通过语句READ

TABLE WITH KEY ... BINARY SEARCH将内表进行数据整合。

■ SELECT语句尽量提取需要的字段,避免使用SELECT *,对于不需要的字段避免抽取。

SELECT语句WHERE条件,应该先将主键相关条件放在前面,然后按照比较符 = < > <>

LIKE IN的顺序排列WHERE条件。

■ 读取内表使用二分查找方式 BINARY SEARCH,读取TABLE之前使用SORT TABLE

BY对内表进行排序。

■ 尽量使用Select(max,min,sum,avg)、select single、for all enteris、append和collect

语句。

■ 避免使用 select distinct,在抽取数据到内表前先 sort,后用 DELETE ADJACENT

DUPLICATES语句来消除重复行,再delete。

■ 不要使用SELECT...ENDSELECT语句。

■ 用SORT代替SELECT...ORDER BY。

■ 尽量多用WHERE语句进行条件抽取。

7.表内联(外联)限制条件有哪些?

LEFT OUTER JOIN限制条件:

■ 在 ON 附加项中,只能使用“=”操作符,且必须至少有一个条件是对主选择表和结

合表中的字段进行比较。

■ 不能在WHERE子句中对结合数据表中的字段进行条件限定,该语句中的OUTER关

键字可以省略。

INNER JOIN限制条件:

319

第 328 页 / 共 377 页

■ 不同逻辑条件之间只能通过AND连接。

■ 每一个条件中必须包含一个主选择表中的字段。

LEFT OUTER JOIN 与INNER JOIN的主要区别是LEFT OUTER JOIN中对于主选择表

的数据,即使在结合数据表中结合条件字段值不存在,也将该数据行选出,结合表中不存在

的字段保持空白。

8.UPDATE、DELETE数据库时的注意事项?

■ DELETE语句用以删除数据表里记录。

注意:删除记录并不能释放ORACLE里被占用的数据块表空间,它只把那些被删除的数

据块标成 unused。 如果确实要删除一个大表里的全部记录,可以用 TRUNCATE 命令,它

可以释放占用的数据块表空间:TRUNCATE TABLE 表名,且此操作不可逆。

● DELETE FROM dbtab WHERE <cond>只要删除一行,SY-SUBRC返回0。

● DELETE dbtab FROM wa删除成功,SY-SUBRC返回0。

● DELETE dbtab [CLIENT SPECIFIED] FROM TABLE itab如果有一行不能删除,系

统继续处理下一行,成功删除内表中所有行时,SY-SUBRC返回0。如果内表为空,

会删除所有数据,且SY-SUBRC和SY-DBCNT都返回0。

■ UPDATE语句用以修改数据表里记录。

注意:以上SQL语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的命令

COMMIT 才能正式生效,否则改变不一定写入数据库里。如果想撤回这些操作,可以用命令

ROLLBACK 复原。

● UPDATE dbtab SET f1 = g1 ... fn = gn WHERE <fix_key>只能更新非关键字,只要更

新一行,SY-SUBRC返回0。

● UPDATE dbtab FROM wa根据工作区中的关键字更新对应的条目。

● UPDATE dbtab FROM TABLE itab根据内表关键字批量更新数据。

9.在程序中使用逻辑数据库的两种方法是什么?

在程序中使用逻辑数据库有两种方法,通常是通过GET事件或者功能模块进行调用,如

NODES node。

通常情况下报表程序中输出的列表数据来自数据库,在ABAP程序中,可使用Open SQL

或者Native SQL读取这些数据库表。

逻辑数据库则提供另一种选择数据的方式,可以代替SQL语句在数据库中提取数据,供

程序操作。因而,可以认为逻辑数据库是一种报表设计程序中的辅助工具,而不能将其误解

为一种可进行数据存储的数据库。SAP 中提供多种类型的逻辑数据库,开发人员也可自行定

义数据源。它的维护工具的事物代码是SE36或 SLDB。

与普通SQL语句读取数据相比较,逻辑数据库有以下优点:

■ 预设的选择屏幕。

■ 逻辑数据库中可能包含多个数据表作为节点,在使用逻辑数据库的程序中,程序开发

人员可以忽略具体的数据表之间通过外部关键字设定的关系,而是使用GET事件按照

节点层次逐级获得数据。

32 0

第 329 页 / 共 377 页

■ 逻辑数据库可以提高程序数据的筛选效率,并在数据筛选的同时进行用户数据库访问

的权限检查。

■ 逻辑数据的维护和设定可以独立于程序进行,如果数据源发生变化,也可以直接修改

数据库,无需对所有程序进行修改。

一般只有在 HR 模块编程时才需要使用到逻辑数据库。其他模块基本用不到,但 HR 必

须用。

5.9 业务知识

1.SAP R/3包含哪些模块?

■ Financial Management (FI,财务会计)。

■ Cost Management and Controlling(CO,管理会计)。

■ Material Management(MM,物料管理)。

■ Production Planning(PP,生产计划和控制)。

■ Sales and Distribution (SD,销售和分销)。

■ Production Planning(PP,工程/项目管理)。

■ Quality Management(QM,质量管理)。

■ Project Management(PM,工厂维护与管理)。

■ Human Resource(HR,人力资源)。

■ Enterprise Control(EC,企业控制)。

■ Treasury(TR,财务管理)。

■ Investment Management(IM,投资管理)。

2.简述MM、SD、PP模块标准流程及主要事务码、数据库表?

■ MM模块的标准流程:

● 当库存不足时,由后勤等相关部门提出采购申请。

● 采购部门接到采购申请,经审查合格后向供应商(1个或多个)询问价格,在对供

应商的报价研究后,确定供应商。

● 采购部门向供应商下达采购订单。

● 入库等相关管理人员对供应商送达的商品进行入库确认。

● 采购部门对供应商提出支付请求进行确认,经确认无误后,向财务部门提出支付申

请,财务部门对支付申请进行审核合格后,进行支付处理。

■ SD模块的标准流程:

● 销售部门接到客户寻价后,在系统中登录客户的寻价信息。

● 销售部门对登录的寻价信息进行价格确认,在系统中登录报价信息并告知客户。

● 接到客户的采购订单后,销售部门在系统中登录采购订单。

● 仓库管理部门对客户所订购的商品进行筹措完毕后,进行出库处理,并在系统中登

录出库单(库存不足,由生产计划部门制定计划,生产部门组织生产)。

● 销售部门向客户提出支付请求,客户支付后,给客户出具发票,在系统中登录开票

信息。

321

第 330 页 / 共 377 页

■ PP模块的主要流程:

首先,生产计划部门需要根据客户订单以及在预测等基础上制定工厂的主生产计划(有

了需求,才能组织生产)。

● 生产计划部门根据主生产计划(MPS),运行物料需求计划(MRP)(前台或后台执

行)。运行MRP会产生2个结果,对库存不足的原材料生成采购申请,对产成品生

成计划订单(对原材料的采购参见MM流程)。

● 生产管理部门将计划订单转化为生产订单。

● 生产管理部门对生产部门下达生产订单。

● 仓库管理部门对生产订单发货。

● 工单确认,生产部门对生产完成的各道工序逐个进行确认和报工。

● 仓库管理部门对生产订单(按订单生产的产品)收货。

3.简述MM、SD、PP、FI模块数据库表。

■ MM模块主要数据库表:

● T001(公司代码)。

● T001W(工厂/分支机构)。

● T001L(仓储地点)。

● MARA(物料主数据)。

● LFA1(供应商主数据 (一般地区))。

● MARC(物料的工厂数据)。

● MARD(物料的仓储位置数据)。

● EKKO(采购凭证抬头数据)。

● EKPO(采购凭证项目)。

● EKET(计划协议计划行)。

● MSEG(凭证段:物料)。

● MKPF(抬头:物料凭证)。

■ SD模块主要数据库表:

● KNA1(客户主数据)。

● VBAK(销售凭证:抬头数据)。

● VBAP(销售凭证:项目数据)。

● VBEP(销售凭证:计划行数据)。

● VBRK(出具发票:抬头数据)。

● VBRP(出具发票:项数据)。

■ PP模块主要数据库表:

● STKO(BOM 表头)。

● STOP(BOM 项目)。

● CRTS(工作中心能力分配)。

● CRHD(工作中心表头)。

■ FI模块主要数据库表

● BKPF(会计核算凭证标题)。

32 2

第 331 页 / 共 377 页

● BSEG(会计核算凭证段)。

● BSID(会计核算:客户的第二次索引)。

● BSAD(会计核算:客户的第二个索引(已结算项目))。

● BSIK(会计核算:供应商的第二次索引)。

● BSAK(会计核算:供应商的第二个索引(已结算项目))。

● BSIS(会计核算:用于总账科目的第二个索引)。

● BSAS(会计核算:总账科目的第二个索引(已结算项目))。

4.简述MM、SD、PP、FI模块主要事务码。

■ MM模块主要事务码:

● MMBE 库存总览。

● ME51N 采购申请。

● ME21N 采购订单。

● MIGO 收货。

● MIRO 后勤发票校验。

■ SD模块主要事务码:

● VA11 询价。

● VA21 报价。

● VA01 销售订单。

● VL01N 出库。

● VF01 开具发票。

■ PP模块主要事务码:

● CS01 创建BOM。

● CS07 将BOM分配给工厂。

● CR01 创建工作中心。

● CA01 创建工艺路线。

● MD61 创建独立需求计划。

● MD05 显示MRP清单。

● MD04 库存需求订单。

● MD02 运行物料需求计划。

● COOIS 显示生产订单清单。

● CO02 更改生产订单(下达生产订单)。

● MD42 对成品的生产计划。

■ FI模块主要事务码:

● FB50 输入总账科目凭证。

● FB60 供应商凭证。

● FB70 客户凭证。

● FB02 总账科目过账。

● F-04 过账并清账。

● F-28 收款。

323

第 332 页 / 共 377 页

● F-53 付款。

5.简述HR模块各功能模块、主要事务代码及表。

HR模块主要包括组织管理、人事管理、时间管理、薪酬管理,覆盖了HR活动中组织、

招聘、发工资、任职、考勤、培训、提升、降级、辞退等各个事项。

■ 主要事务代码如下:

● PA10 人事档案。

● PA20 显示人力资源主数据。

● PA30 维护人力资源主数据。

● PA40 人事活动维护事务。

● PA41 变更输入/离开日期。

■ 主要表如下:

● T001P 人事领域/sub领域。

● T500L HR国家类别。

● T500P 人事领域。

● T510A HR 工资表类型。

5.10 其他

1.简述SAP系统中程序事件和系统事件。

■ 程序事件需要调用 Dispatch,由系统工程师决定这个事件在什么时间响应,而系

统事件不需要调用 Dispatch,什么时候响应系统事件由系统决定(自动调用

Dispatch)。

■ 程序事件在 PAI时,可以访问屏幕上面的值,而系统事件不能。系统会重写屏幕

上的值。

■ 程序事件在用户误操作的情况下可能丢失。

2.如何建立一个外部数据库的连接?

事务代码 DBCO或者维护表DBCON。

3.SAP 包括哪些传输技术?

■ SAP标准数据传输程序,包括批输入、调用事物、直接输入等数据传输技术。

■ 通过BAPI和IDoc传输数据。

■ 自定义数据传输程序。

4.如何将内表数据转换成一个XML文件?

可以使用普通的方法(SAP提供的一些生成XML类 IF_IXML, IF_IXML_ENCODING,

IF_IXML_COMMENT,IF_IXML_ELEMENT,IF_IXML_ATTRIBUTE,IF_IXML_OSTREAM,

等)

通过事务代码STRANS来创建一个Transformation,在这里定义好XML的格式、内容等,

然后通过CALL TRANSFORMATION xxx OPTIONS xml_header = 'no'SOURCE root = itab

header = header RESULT XML xml_string来将内表数据转换为XML文件。注意这个内表不能

使用带表头的内表。

32 4

第 333 页 / 共 377 页

5.怎么导出一个WSDL文件?

根据 SAP 版本不同,分别使用 SOAMANAGER(基于 NETWEAVER)/WSADMIN 和

WSCONFIG(Release Web Services (基于R3的)for SOAP Runtime)导出WSDL文件。

6.怎么导入一个WSDL文件?

在SE80里面导入该WSDL文件,导入后,会生成相应的Proxy Name(Class Interface),

在这个类(Class)里面就会包含该WSDL文件提供的方法。然后根据需要,在SM59创建一

个远程连接,在 LPCONFIG 里面创建逻辑端口(指定端口的目的地)。最后在接口程序里面

使用相应的类。

7.创建后台程序的TCODE是什么,如何在程序里面调用后台程序?

■ TCODE:SM36。

■ 调用程序的函数:JOB_OPEN和JOB_CLOSE。

8.什么是授权对象?在 ABAP 程序中使用哪条语句进行授权检查?

授权对象由一组字段组成,这些字段中的值将被用于进行授权检查。ABAP 程序中使用

AUTHORITY-CHECK 语句根据授权对象进行授权检查。在 AUTHORITY-CHECK 语句中,

必须指明授权对象的所有字段,但有一个例外,可以用 DUMMY 关键字来绕过某个

字段的检查。

一个授权对象中最多可以定义 10 个字段。

9.在 SAP 系统中是怎样定义“修改”的?它们对更新(Upgrade)有怎样的影响?

修改是指用户对 SAP 发布的库对象(Repository Object)进行的更改。必须在更新期间

对修改进行评审(Review),来决定是否应该使用新的 SAP 对象,以及将来使用时是否需要

进一步修改该对象。

10.什么是事务变式?为何要使用它?

事务变式是一组屏幕变式,用于预定义屏幕行为和默认值。通过使用变式功能,可以将

用户不需要的字段、子屏幕及全屏幕从用户视图中取消。可以给任何输入字段设置默认值,

字段也可以不用带Ready for Input状态。

只能为对话和报表事务创建事务变式,变式中只能包含普通屏幕、子屏幕及对话

屏幕。

开发人员可以使用 GuiXT 脚本语言通过事务变式维护对屏幕进行修改。修改屏幕布局

的方式有:插入按钮、值帮助(Value Helps)、移动对象、插入屏幕等。

11.请列出用户修改 SAP 标准功能的不同方式。

SAP Standard 可以通过 Personalization、Customizing、Modifications、Enhancements 及

自定义 ABAP 程序进行更改。这些方式的示例如下:

■ Personalization:Personalization 技术包含创建变式、设置/获取参数及活动组(Activity

Groups)。

■ Customizing:是最常用的使用 SAP 工具(如 R/3 Reference Model and Implementation

Guide)更改 SAP Standard 的方式。可以认为 Customizing 是实施 R/3 所必需的,

通常由 Functional Team 来执行。

■ Enhancements:常由开发 Team 执行,包含的活动有:字典增强、Funciton Module Exits、

菜单和屏幕出口及 Business Add-ins (BADI)。

325

第 334 页 / 共 377 页

■ 自定义 ABAP 程序:可以与 SAP 对象或自定义开发的对象一起工作。

■ Modifications:不建议对 SAP 对象使用 Modifications。使用 SSCR (SAP Software

Change Registration)注册所有对 SAP 对象的手动修改。

12.是否使用过QUERY,说明过程。用到哪些TCODE?

■ 建SAP QUERY的过程主要有三步:

● 创建用户组。

● 创建信息集。

● 创建SAP QUERY。

■ 与这三步对应的事务代码分别是:

● SQ01:SAP QUERY。

● SQ02:InfoSet。

● SQ03:UserGroup。

13.简述在SAP中如何进行Job管理?

(1)后台处理中,R/3 可以自动运行一个类型的报表程序(自定义屏幕除外)或外

部程序。

(2)后台处理步骤:

1)用户通过规划后台处理系统中的作业,通知R/3系统所需要进行的工作。设定事件、

程序、变式、打印等。

2)到达指定时间后,后台处理系统将启动作业并运行指定的程序。

3)稍后,用户可以检查工作是否完成,显示跟踪该作业执行的日志,查看后台作

业的状态。

(3)优点:

1)实现并行,不影响用户操作。

2)可定期自动重复作业,节省人力。

3)晚上执行可降低系统负载。

(4)在ABAP中提交作业,将列表发送至Spool(假脱机)系统。

1)通过功能模块JOB_SUBMIT将程序直接发送至后台。

2)使用SUBMIT语句中的VIA JOB附加项,WITH附加项则可以提交选择屏幕参数或

USING SELECTION-SET可指定变式,同时,必须指定AND RETURN选项。

SUBMIT rep ... USER user VIA JOB job NUMBER n [... WITH p1 = f1... | USING SELECTION-SET

vari] ... AND RETURN.

(5)已经规划的作业在释放之前不能运行。

(6)显示作业状态:SM37。

14.如果发现报表性能问题,应如何去处理?

首先要检查代码,检查代码是不是有误,看看能不能进行常做的代码优化,查找耗费资

源的原因。

如果是数据太多,可以增加筛选数据的条件,如在画面上增加查询条件。利用事务SE30

定位错误,有一个运行分析图示,找到瓶颈,确认是数据库操作还是代码运行的问题。如果

32 6

第 335 页 / 共 377 页

是代码运行的时间较长,把标准内表类型改成Sorted或者Hash的内表。

15.定义函数所涉及的属性、参数及其作用。

事务SE37定义功能组添加函数时涉及参数如下:

■ Attribute:设定功能模块类型、名称等通用属性。

■ Import:定义输入参数,从程序传递到功能模块。

■ Export:定义输出参数,从功能模块传递到程序中的参数。

■ Tables:定义内表参数,将内表整体输入、输出。

■ Exceptions:定义可能出现的异常。

■ Changing:定义输入、输出参数。

327

第 336 页 / 共 377 页

第 6 章 常 用 工 具

6.1 SAP 简单报表生成工具

SAP 系统提供了两个列表生成工具:Quick Viewer 和Quick Query。见到这两个工具,

关键用户如获至宝,例如:关键用户可以创建“固定资产列表”“物料列表”“客户列表”等。

Quick Viewer 与Quick Query 的区别在于Quick Viewer 不能创建包含统计、排序等功能

的列表,只能创建基本列表。使用这两个工具只需要少量的数据库知识。首先,顾问需要明

白信息系统的数据保存在数据库表中。其次,顾问需要知道关系数据库的根本就是表和表之

间的关系、约束,这样才能组织数据源(表的外联和内联)。

6.1.1 Quick View

Quick View访问路径:

菜单路径:工具→ABAP 工作台→实用程序→快速浏览器。

事务代码:SQVI。

1.Quick View的作成

步骤一:Quick View(第一画面)。

在快速浏览的栏位填入Quick View的ID,单击 按钮,如图6-1所示。

图6-1

步骤二:Quick View(编辑画面)。

填写QuickView所在的标题和注释,指定数据源及显示模式,如图6-2所示。

图6-2

32 8

第 337 页 / 共 377 页

注:数据源可为一个表、一个逻辑数据库、一个连接或来自 SAP 查询的一个信息集,

在这里选择表连接(即:从多个关联表中取数)。

单击图6-2中的 按钮。

步骤三:Quick View(编辑画面)。

定义列表的字段选择和排序,以及列表运行前的选择屏幕等信息。

“可用域”包括了上一步选择的数据库表中的所有字段。“字段中清单”包括在列表中将

会显示的字段。根据需要将字段从“可用域”移至“字段中清单”。通过 按钮和 按钮,调

整选择字段的输出顺序,如图6-3所示。

图6-3

下面是“Sort Sequence”视图,在这里指定列表的排序规则,如图6-4所示。

图6-4

329

第 338 页 / 共 377 页

下面是“Selection Fields”视图,在这里指定选择屏幕上将出现的字段,如图6-5所示。

图6-5

步骤四:Quick View(保存编辑视图)。

单击标准工具栏中的保存按钮 ,如图6-6所示。

图6-6

2.Quick View的使用

步骤五:Quick View(运行视图)。

保存视图并单击 按钮,测试运行该列表,屏幕如图6-7所示。

图6-7

单击 按钮显示视图,如图6-8所示。

图6-8

33 0

第 339 页 / 共 377 页

注:在QuickView初始画面输入QuickView 名称,单击菜单按照以下路径可以查找报表

名称。这样能在ABAP 编辑器中查看系统自动生成的代码,也能够为该列表分配一个事物代

码,如图6-9和图6-10所示。

图6-9 图6-10

因为SAP 没有将QuickView 作为传输系统中的一个组件(即创建的QuickView 不会出

现在Object Directory 中),故QuickView 不能传输。另外,QuickViews 定义成属于某一系统

用户,A 用户定义的QuickView,B 用户无法使用。

6.1.2 Quick Query

可以将Quick Query 理解成QuickView 的高级版本,它在QuickView 的基础上增加的功

能有:

■ 能够实现统计、排序、计算等功能。

■ 提供标准的图形形式显示列表。

■ 用户之间能够共享。

■ 作为SAP 传输系统的一个部分,能够在系统之间传输。

在创建SAP Query 之前,先要弄明白两个概念:

■ 功能区:在这里定义查询数据源,也称为信息集。

■ 用户组:为了方便管理,定义一些用户组,将用户包含在用户组中。然后将功能区分

配给用户组使用。用户组与用户、用户组与功能区都是多对多的关系。

1. 创建功能区

功能区访问路径:

菜单路径:工具→ABAP 工作台→实用程序→SAP查询→信息集。

事务代码:SQ02。

步骤一:功能区(第一画面)。

在相应的栏位填入信息集的名称,单击 按钮,如图6-11所示。

331

第 340 页 / 共 377 页

图6-11

输入要创建的功能区名称,单击“创建”按钮,弹出对话框如图6-12所示。

图6-12

输入InfoSet 的名称和基础数据表,单击 按钮,进入数据源设定界面,如图6-13所示。

33 2

第 341 页 / 共 377 页

图6-13

步骤二:功能区(第二画面)。

单击应用工具栏中的 按钮,添加与之关联的表或视图,如图6-14所示。

图6-14

填写要追加的表,单击 按钮,如图6-15所示。

图6-15

333

第 342 页 / 共 377 页

步骤三:功能区(第二画面)。

单击应用工具栏中的 按钮,编辑输出信息集,如图6-16所示。

图6-16

选中“创建空字段组”,单击 按钮,进入如图6-17所示界面。

图6-17

从左边的数据库表中选择字段,拖到右边的“Field Group Fields”中。在右下方,能够设

定字段的显示标题,如图6-18所示。

图6-18

33 4

第 343 页 / 共 377 页

步骤四:QuickQuery(第二画面,保存、检查并生成该数据源)。

将需要的字段添加到字段中后,单击标准工具栏上的保存按钮 ,如图6-19所示。

图6-19

单击保存按钮 ,如图6-20所示。

图6-20

单击上图中的 按钮,如图6-21所示。

图6-21

单击标准工具栏中的检查按钮 ,如图6-22所示。

图6-22

单击应用工具栏中的生成按钮 ,如图6-23所示。

图6-23

335

第 344 页 / 共 377 页

2.创建用户组

用户组访问路径:

菜单路径:工具→ABAP 工作台→实用程序→SAP查询→用户组。

事务代码:SQ03。

步骤一:用户组(第一画面)。

在相应的栏位填入用户组的名称,单击 按钮,如图6-24所示。

图6-24

弹出创建对话框,如图6-25所示。

图6-25

输入用户组的描述后,单击 按钮,如图6-26所示。

图6-26

33 6

第 345 页 / 共 377 页

单击保存按钮 ,如图6-27和图6-28所示。

图6-27

图6-28

单击上图中的 按钮。

步骤二:用户组(第二画面)。

单击 按钮,填写可分配用户如图6-29所示。

图6-29

单击 按钮,选中上述步骤创建的信息集,如图6-30所示。

337

第 346 页 / 共 377 页

图6-30

步骤三:用户组(第二画面)。

单击标准工具栏中的保存按钮 ,保存用户组,如图6-31所示。

图6-31

3.创建Query

用户组访问路径:

菜单路径:工具→ABAP 工作台→实用程序→SAP查询→查询。

事务代码:SQ01。

步骤一:查询(第一画面)。

在相应的栏位填入查询的名称,单击 按钮,如图6-32所示。

图6-32

33 8

第 347 页 / 共 377 页

弹出如图6-33所示窗口,选择相应数据源。

图6-33

步骤二:查询(第二画面)。

输入标题,选择清单格式、输出格式等列表基本信息,如图6-34所示。

图6-34

单击 按钮,进入下一屏幕,如图6-35所示。

图6-35

339

第 348 页 / 共 377 页

选择相应字段组,单击 按钮,进入下一屏幕,如图6-36所示。

图6-36

选择希望出现在选择屏幕及清单上的字段,单击 按钮,进入下一屏幕,如图6-37所示。

图6-37

34 0

第 349 页 / 共 377 页

在这个屏幕中,各选项的介绍如下:

■ 勿使用参数ID预分配选项:选择字段是否自动带出默认值。

■ 否:选择参数在选择屏幕上的输出次序。

■ SV:如果选中该选项,则该选择参数只有一个输入框。

■ 1Z:如果选中该选项,则该选择参数没有“多项选择”按钮。

步骤三:查询(第二画面)。

单击 按钮,定义查询基本列表,选中并编辑要显示的字段,屏幕如图6-38所示。

图6-38

逐一双击需要出现在列表中的字段,设计字段清单的列。然后选中需要设定格式的列表

字段,在左下角修改字段的显示格式,如图6-39所示。

图6-39

341

第 350 页 / 共 377 页

单击标准工具栏中的保存按钮 ,保存基本清单,单击 按钮返回查询处理界面。

步骤四:查询(第二画面)。

单击 按钮,定义查询统计功能,选中并编辑字段的统计选项,屏幕如图6-40所示。

图6-40

在这个屏幕中,各选项的介绍如下:

■ 否:统计中字段顺序的定义,可以分配 1 和 98 之间的序列号。

■ Srt:策略里的排序顺序的定义。

■ De:如果选择此字段,统计将根据相关排序标准以降序排序,在其他情况中,以升序

排列。

■ Su:ABAP/4 查询在统计中为排序标准生成小计,输出含相关小计的行。

■ NS:在统计中为每个字符串插入换页,即每次排序字符串更改,就显示一个新的页面。

■ 否:盘点用于确定统计行的数据记录。

■ Av:为左侧单个被加数输入的字段计算平均值。

■ %:输出总计字段百分比。

■ Len:更改字段的输出长度。

■ Rnd:整取时的小数点的位数。

使用统计列表,有三个限制条件:

■ 它的字段来源为基本列表。

■ 只能对数量和金额字段进行条目数统计、平均值统计、百分比统计。

■ 显示统计列表时,如果与“数量/金额”相应的“单位/币别”不一致,则能引发统计

错误。

单击标准工具栏中的保存按钮 ,保存统计设定,单击 按钮返回查询处理界面。

34 2

返回ABAP参考资料列表