很全abap入门知识

更新时间:2024-04-13 08:47:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ABAP入门知识

1. ST05是用于在开发ABAP程序时,对应事务码取得的字段是“数据结构”而不是“透

明表”的时候,通过ST05的“SQL跟踪”来获得相关“Select”的语句;一般查看“REC”列耗时比较多的“Select”语句; 2. 跟踪时如果有涉及到“数量”这类有对数据表进行更新或插入操作的,则直接去查

Update和Insert的SQL语句; 3. 在跟踪后,直接双击“对象名”列的名称,点选“表格字段”转到“SE11”的表字段表;

4. ABAP程序开头的Tables:“数据表名”,只有在屏幕中有用到的表,才需要声明;

在程序中用到的表则不需要进行在Tables内声名; 5. 抓SAP“文本”字段的数据,要先自定义变量,然后通过SE37的函数

“FUNCTION ?ZREAD_TEXT?”取回文本数据; 6. 新建的ABAP程序,在测试运行的时候要先进行“激活”,才能测试运行;

7. SE93:把ABAP写好的程序指定一个事务码执行;

8. abap引号内的字符??必须要是大写;

9. ABAP select 里面的语句,不能像mssql有那么丰富的函数使用,需要导到内

表后再对数据进行操作; 10. ?EQ?是单个数据值,?BT?是between区间的意思。

11. 在写select inner join 里面,要注意是否需要加上销售组织的条件;on 条

件1 and 销售组织条件。 12. SELECTION-SCREEN,里面有两个子项,PARAMETERS和select-options。

PARAMETERS 一般是用于必输项的屏幕参数设置,如果这个参数不是必输项的,就要用select-options。在select ...where条件里,用PARAMETERS的条件语法是“数据字段 = 屏幕字段”;而select-options的条件语法是“数据字段 in 屏幕字段”。 13. 在where判断一个日期型数据是空,不是DEAKT = ??,也不是DEAKT is

initial,而应该写成DEAKT = ?00000000? (8个0)。 14. 一对多的inner join,如果取出的数据有重复,前面加上distinct,用法和

MSSQL相同。

15. sy-subrc,指上一个语句执行是否成功;执行成功返回0,执行不成功返回非0。

用if判断。 16. 如果一个语句中,该名称同时可能代表内表或者同名表工作区,则需要在内表名称

之后加“[]”指明当前操作的是内表对象。不提倡使用带有表头行的内表,而是应该总是声明结构相同的其他数据对象作为显示工作区进行内表行操作。 17. 如何调整ABAP程序的性能(copy)

a) 使用where语句

不推荐

Select * from zflight.

Check : zflight-airln = ?LF? and zflight-fligh = ?BW222?. Endselect.

推荐

Select * from zflight where airln = ?LF? and fligh = ?222?. Endselect.

b) 使用聚合函数

不推荐

Maxnu = 0.

Select * from zflight where airln = ?LF? and cntry = ?IN?. Check zflight-fligh > maxnu. Maxnu = zflight-fligh. Endselect.

推荐

Select max( fligh ) from zflight into maxnu where airln = ?LF? and cntry = ?IN?.

c) 使用视图代替基本表查询

不推荐

Select * from zcntry where cntry like ?IN%?. [Page]

Select single * from zflight where cntry = zcntry-cntry and airln = ?LF?. Endselect.

推荐

Select * from zcnfl where cntry like ?IN%? and airln = ?LF?. Endselect.

d) 使用INTO table 代替select endselect

不推荐

Refresh: int_fligh.

Select * from zflight into int_fligh. Append int_fligh. Clear int_fligh. Endselect.

推荐

Refresh: int_fligh.

Select * from zflight into table int_fligh.

e) 使用批量修改内表代替逐行修改

不推荐

Loop at int_fligh.

If int_fligh-flag is initial. Int_fligh-flag = ?X?. Endif.

Modify int_fligh. Endloop.

推荐

Int_fligh-flag = ?X?.

Modify int_fligh transporting flag where flag is initial. f) 使用二分法查询,提高查询内表数据速度

不推荐

Read table int_fligh with key airln = ?LF?.

推荐

Read table int_fligh with key airln = ?LF? binary search. g) 两个内表添加使用批量增加代替逐行

不推荐

Loop at int_fligh1.

Append int_fligh1 to int_fligh2. Endloop.

推荐

Append lines of int_fligh1 to int_fligh2.

h) 使用table buffering

Use of buffered tables is recommended to improve the performance considerably. The buffer is bypassed while using the following statements Select distinct Select … for update

Order by, group by, having clause Joins Use the Bypass buffer addition to the select clause in order to explicitly bypass the buffer while selecting the data. i) 使用FOR ALL Entries

不推荐

Loop at int_cntry.

Select single * from zfligh into int_fligh where cntry = int_cntry-cntry. Append int_fligh. Endloop.

推荐

Select * from zfligh appending table int_fligh For all entries in int_cntry Where cntry = int_cntry-cntry.

j) 10、正确地使用where语句,使查询能使用索引When a base table has

multiple indices, the where clause should be in the order of the index, either a primary or a secondary index

k) To choose an index, the optimizer checks the field names

specified in the where clause and then uses an index that has the same order of the fields. One more tip is that if a table begins with MANDT, while an index does not, there is a high possibility that the optimizer might not use that index. l) 正确地使用MOVE语句

Instead of using the move-corresponding clause it is advisable to use the move statement instead. Attempt should be made to move entire internal table headers in a single shot, rather than moving the fields one by one. m) 正确地使用inner join

Let us take an example of 2 tables, zairln and zflight. The table zairln has the field airln, which is the airline code and the field lnnam, which is the name of the airline. The table zflight has the field airln, the airline code and other fields which hold the details of the flights that an airline operates. [Page] Since these 2 tables are logically joined by the airln field, it is advisable to use the inner join. Select a~airln a~lnnam b~fligh b~cntry into table int_airdet From zairln as a inner join zflight as b on a~airln = b~airln. In order to restrict the data as per the selection criteria, a where clause can be added to the above inner join. n) 使用sort by 代替order by o) 避免使用SELECT DISTINCT语句

使用的 ABAP SORT + DELETE ADJACENT DUPLICATES 代替.

18. 定义内表与工作区最方便的方法

*定义 名为 ITAB 的内表,内表结构参照表TABLE。 DATA: ITAB TYPE TABLE OF TABLE.

*定义 名为 WA 的工作区,其行结构与内表 ITAB 相同。 DATA: WA LIKE LINE OF ITAB.

19. 使用occurs 0,定义的不再是对象,而是internal table

20. 使用with header line后缀,定义为internal table的同时也定义了一个

同名对象,因此可以用以下语句: LOOP AT STH. WRITE: / STH. ENDLOOP. 21. TYPE后面接结构,LIKE后面接对象

22. OBLIGATORY为必输字段

23. DATA SEPARATER. = DATA SEPARATER TYPE C.

24. 关于内表的结构描述,它的当前记录数据是放在header line中的,Occurs 是

分配数据缓冲区,大小不重要,系统会自动分配。但定义内表不用occurs就需要用with header line,occurs语句记得是为了向下兼容。 25. occurs 指明的數量是有一點學問的.

a) 當你知道可能每次用Select命中或交換的紀錄數xxx時,可指明 occurs

xxx.

b) 如用occurs 0 聲明時, buffers 由系統自動分配.

26. SELECT在into时记得一般都要加上table,不然是into一个工作区,即wa,

而工作区要写入内表,则需要再append,所以直接定放内表即可,内表和工作区的区别就在于工作区就相当于表头,是有一行,data定义begin of itab时不加occurs就是工作区,加了就是内表,occurs *,后面表示系统初始分配给此内表多少行,每次满时再多分配多少行,我们平常为了节约内存,一般直接用0,with header line是为了定义含表头的内表,平常occurs就直接带表头,而with header line一般是在itab1 like itab occurs 0 with header line时用,这是参照一个内表定义另一内表,如果要带表头,一定要加with header line。 27. 你这样问不是办法,最好不懂时直接接F1,查到SAP的帮助即可. check是检查

后面的逻缉是否满足,不满足则在上例是跳出form,不的执行下面的语句。说实在,初略的看了一下上面的程序,写得太烂了,竟然将usr01或usr03透明表中的字段按条件取到一个表工作区,竟然不加single,象这种不加single的select按理说应该是调不过的,必须在后面再对应一个endselect,而这种select加endselect用每次去读一次透明表,访问数据库的次数太多了,换个好一点程序自己研究吧。

SAP ABAP PA certification 培训笔记

28. 常见数据类型

P (4) 长度4个字节

Xstring (10) 长度为10个字节,可以容纳20个数字 29. 大结构体与小结构体的兼容

Move 大 to 小 大的覆盖小的 大结构体的剩余部分保持不变 Move 小 to 大 匹配的部分 被小的覆盖, 其余的字段被初始化 30. P 类型 与 F类型的优缺点

P:计算精确,适合商业结算,但范围短

F:储存范围大,计算不精确

31. P 与 F 类型的运算方式

F IEEE 用二进制数进行运算

P 采用半字节储存一个数字的方式进行运算

32. 字段 结构体 兼容问题

字段兼容:类型和长度相同

结构体:字段按顺序兼容,并且字段数相同

内表兼容:行类型相同, KEY 兼容,表类型相同 如果字符串 move 到一个比字符串小的结构体 , [][][][] ---à [][] [][]

33. 一个字段 move 到一个 内表中

Internal table 内表.

静态数据对象包括: 简单数据类型(除了string 和xstring 类型), 结构体(不包含string 和xstring 类型)

2. 动态数据对象:string , xstring , 包含string 或 xstring 的结构体, 内表

34. 一个结构体是否可以包含STRING 或xstring, 如果可以 结构体可以拓展吗?

定义一个 只有一个字段的 内表 字段长度是c(18),

定义一个结构体 结构体里 包含三个字段, 类型 随意, 第二个类型,是另一个结构体

定义一个内表 内表的行类型 是第一个结构体.

再用第二个结构体定义一个内表 ,利用这个内表 作为行类型,做一个内表。

35. 内表的三个基本属性

line type 行类型

key definition 键类型 table kind 表类型

1)在standard table 中 使用 table key的查找方式为 table scan 全表扫描

2)在 sorted table 中使用table key 在遵循; left-aligned 从左至右匹配, no gaps 没有间隔,使用”=” 填充字段时, 使用 二分查找法 ,其它情况下 使用 table scan查找+

3) 对hash表访问, 只能通过key访问单条记录, 访问的速度不依赖于表中的数据量,而在其余两种表中,查询的时间与表中数据量成正比,其它情况是否代表,只是顺序不符合left-aligned. 哈希表可以通过部分的key 进行访问吗? 定义内表

a) 定义一个局部内表类型,通过该类型定义内表变量

b) 直接定义字段 直接定义内表变量(隐藏了一个内表类型) c) 通过全局内表类型定义内表变量

36. 标准的定义内表语句

Types or DATA name

TYPE table_kind OF line_type WITH key_def [INITIAL SIZE n.]

Table kind and key. 表类型 和 表键

注意:在定义standard类型的内表时,如果使用 WITH DEFAULT KEY. 系统会自动将内表中的字符类型字段(c,n,d,t,x,string,xstring)组合成table key.

37. 内表的key

a) standard标准表: key 不唯一.

b) sorted排序表: 可以指定KEY是否唯一 c) Hash 哈希表: KEY必须是唯一

38. 在内表中使用不是结构体类型的行类型,当内表的行类型只有一列的时候,需要使

用pseudo-compnent 伪列,用途:设置一个按钮工具栏,用只含有一列的内表.对内表的操作

a) move对内表的拷贝 b) clear 将数据清空 c) free 释放内存

d) compare表之间的操作,比较 e) sort 排序表 f) array fetch

39. 递归比较

a) 先对内表之间的行数进行比较

b) 如果有必有的话,还需要对行的组件进行比较

40. 内表之间的比较

a) 用行数比较, 有必要的话 可以 用内容比较

b) 定义两个内表 两个 内表不兼容 一个有3个字段 一个有5个

41. 对两个内表进行比较.

a) 定义两个内表, 结构一样 , 变量不一样 b) 全做成数字型字段 c) 第一个 添加 小数字 d) 第二个内表 添加大数字 e) 排序可以指定升序降序.

42. 对内表具体操作

1. Insert 插入 2. Read 读取 3. Change 修改 4. Delete 删除

5. Insert summated collect. 插入累计

43. 对内表中的数据行进行限制条件操作

对数据的访问 一、单条数据访问

1) 通过 table key访问

2) 通过 line index 访问(对于line index 类型内表) 3) 通过 condition条件访问 二、多条数据访问

1) 通过condition条件访问

2) 通过 index interval 通过行区间访问

指定访问数据的传输方式

1. 使用 结构体 work area 进行 copy 对内表数据进行操作

2. 定义 field symblo 指针 指向访问数据,(可以直接访问数据) 3. 通过将内表插入内表的操作 重要: 不能通过line index 对hash 表 进行访问, 在排序表中插入数据.除非插入的位置正好是排序表中规定的位置,否则会出现 运行期异常(强烈不推荐使用insert往 sorted b表中插入数据)

Field symbol 指针

作用: 直接对内表进行操作,而不用再重新定义结构体对目标内表数据进行拷贝, 增大了效率. 定义指针语法:

Data: var_a TYPE I VALUE 4. FIELD-SYMBOLS: TYPE i. ASSIGN var_a TO . = 77.

重要: 定义的指针名,必须加”<>”

Insert 插入操作

一、单条数据的插入操作

1)标准表: 可以使用 index (推荐) 和 table key 方式插入 2)排序表: 可以通过 table key方式插入 , 但也可以用index插入(强烈不推荐, 很有可能出现运行错误)

3) Hash表: 只能够用table key 方式插入 二、多条记录的插入

1)源内表index table:则可以指定源内表的数据范围,并插入到目标内表中 2)目标内表为index table: 则可以可以指定目标内表被插入数据的具体index 位置.

具体的语句插入语法:

Insert wa INTO TABLE itab. 单条插入不指定位置

Insert wa INTO itab INDEX n. 单条插入指定插入位置

INSERT LINES OF itab1 [from n1 to n2] INTO TABLE itab2.

INTO itab2 [ INDEX n]

读取内表的一条将数据读到结构体中,如果系统独到行 sy-subrc = 0 . 然后读取到结构体中,Sy-tfill 存放总行数,Sy-tleng 行的长度,Transporting 指定特定列传输字段,传送部分字段TRANSPORTING NO Fields 不传值,作用,看内表中有没有这条数据Camparing有一个结构体和内表 C1 C2 C3 Lh 0019 17 Lh 0018 18

通过comparing 后的值,可以判断读取的值是否符合要求.现在结构体中需要比较的字段赋值,先判相应字段是否相等比较成sy-subrc = 0 Zmycompare_2009 用一个结构作为 查询条件,到内表查询符合条件的数据With key 可以用 table key 或 普通字段作为条件使用field symbol

通过一个内表定义一个结构体作为指针

Read table itab [index n / key ] assigning . Write: / -field_1.

直接修改 的值 会怎么样? Change 修改内表

Transporting 的 传输方向 通过 field symbol 直接修改 内表

重要: 不能直接指针对sorted 和 hash表进行操作

Delete

Delete table itab key Key: from wa ()

With table key k1 = f1….

不能用sort 对排序表进行排序对sorted表进行insert modify,使用不当可能会出错.

HASH表不能通过 index 进行操作 Header line

With head line 关键字定义 废弃用法 Occur + 整数, 10 , Occur 0 , 默认大小,

Occur 0 with head line 废弃用法了

重要: 在面向环境中 不能用带有 head line 的内表

Data: so_carr LIKE RANGE OF carrid. Loop 内表

Where 条件 从起始点二分查找

标准表 可以部分指定顺序 From 1 to 5

对于一个标准表来说, 加上二分查找 是不是 先排序 先把标准表 排序, 然后再二分 必须先手工排序,再进行二分查找

关于ABAP内表(about abap internal table)

44. 内表的类型及定义:

1) ANY TABLE:即任意表类型,此种定义方式只能在传递参数的时候定义。 例如:FORM XXX USING/CHANGING TYPE ANY TABLE .

ANY TABLE包括了两种类型:INDEX TABLE和HASHED TABLE 。 INDEX TABLE:包括了STANDARD TABLE和SORTED TABLE A. STANDARD TABLE:其实就是一个线性表,通过key访问内表是线性查找的,

也就是说,随着表中记录的增加,对表的操作的时间开销也相应的增加。

定义方法:TYPES/DATA: LIKE/TYPE STANDARD TABLE OF .

B. SORTED TABLE:顾名思义,表中的记录是按照一定的顺序排列的。访问表的

主要方式是表中定义的key,如果key不唯一,则选择index最小的那个。也可以通过index来访问排序表,如果你想通过index插入一条记录,系统会自动检查你插入的位置是否正确。所以,如果插入的时间比插入到标准表的时间会长。因此,尽量选择key来对排序表进行操作。

定义方法:TYPES/DATA: LIKE/TYPE SORTED TABLE OF .

45. HASHED TABLE:对哈希表只能用你定义的key进行操作,而不能使用index进

行操作。因此,定义哈希表必须定义uniquekey 。注意:所有关于使用index操作表的语句都不能用于操作哈希表。例如:sort,loop等。

定义方法:TYPES/DATA: LIKE/TYPE HASHED TABLE OF .

46. 内表的操作:

1) 创建:

A. 定义一个结构,然后type/like这个结构

例如:

TYPES: BEGIN OF , ...i> ..., ...

END OF .

DATA TYPE STANDARD TABLE OF WITH NON-UNIQUE

DEFAULT KEY INITIAL SIZE WITH HEADER LINE.

B. type/like系统表或者数据库表或者结构

DATA TYPE STANDARD TABLE OF <系统表名> INITIAL SIZE

WITH HEADER LINE.

2) 添加数据:

A. APPEND:直接向表中添加数据

1. APPEND [wa TO|INITIAL LINE TO] itab[ASSIGNING |REFERENCE INTO dref].

2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2. 3. APPEND [wa TO] itab SORTED BY f [ASSIGNING B. 向表中插入数据:

1. INSERT [wa INTO|INITIAL LINE INTO] itab [INDEX idx] [ASSIGNING |REFERENCE INTO dref].

2. INSERT [wa INTO|INITIAL LINE INTO] TABLE itab [ASSIGNING |REFERENCE INTO dref].

3. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO itab2 [INDEX idx3].

4. INSERT LINES OF itab1 [FROM idx1] [TO idx2] INTO TABLE itab2. C. 相同字段求和向表里添加:

Basic form COLLECT [wa INTO] itab.

Extras:

1. ... ASSIGNING

2. ... REFERENCE INTO dref 3. ... SORTED BY f

3) 删除数据:

1. DELETE itab.

2. DELETE TABLE itab WITH TABLE KEY k1 = v1 ... kn = vn. 3. DELETE TABLE itab [FROM wa]. 4. DELETE itab INDEX idx.

5. DELETE itab FROM idx1 TO idx2. 6. DELETE itab WHERE logexp.

7. DELETE ADJACENT DUPLICATES FROM itab.

4) 修改数据:

1. MODIFY itab [FROM wa] [INDEX idx] [ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn]. 2. MODIFY TABLE itab [FROM wa]

[ASSIGNING |REFERENCE INTO dref] [TRANSPORTING f1 ... fn]. 3. MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond.

ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 OCCURS 0

先是用TYPES关键字定义一个行(row)的类型. 如下:

TYPES: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.

这里的line,就相当于一个自定义的类型,表示一行(row)的字段(field).这里一行有两个字段field1和field2.

然后是声明一个work area: DATA wa TYPE line.

我用C++(还是对cpp最有好感^^)的概念理解就是,line是一个class,而wa是一个object.

接着是声明一个每一行的类型是line的internal table: DATA itab TYPE line OCCURS 0.

我在暂时把OCCURS作为了区别工作区和内表的标志.OCCURS应该有更深层次的意义,但我目前只能领悟至此...

当我们用以上这个方法来声明一个iternal table时,可以选择是否有无header line.

上面这句就是没有header line的.改成如下就有了:

DATA itab TYPE line OCCURS 0 WITH HEADER LINE.

有无header line的区别就是,header line可以当作一个work area来使用(参照我之前的一个日志).

有一下两种方式操作itab: a) wa-field1 = 1.

wa-field2 = 2.

APPEND wa TO itab. b) itab-field1 = 1.

itab-field2 = 2. APPEND itab. 这里wa就是上面那个已经定义的work area.

有header line的时候,这两种都可以.无header line的时候,只能用第1种. 第2种里,itab的意义是一个header line,而不是内表.因为\line OCCURS 0 WITH HEADER LINE.\这样的声明,已经隐式声明了一个与内表同

名的header line.所以OCCURS用来声明内表可能造成二义性(ambiguous). 于是,OCCURS被认为是old的东西,采用一下方式声明一个内表比较好:

DATA itab TYPE STANDARD TABLE OF line.

还有一种声明内表的方法:

DATA: BEGIN OF itab OCCURS 0, field1 TYPE i, field2 TYPE i, END OF itab.

这样的itab就自动有了一个同名的header line. 好像不会有 WITHOUT HEADER LINE 或者 NOT WITH HEADER LINE 这样的用法... 如果没有OCCURS 0,比如这样: DATA: BEGIN OF itab,

field1 TYPE i, field2 TYPE i, END OF itab.

那么这个itab就不是内表咯,只是一个structure,可以作为itab的work area.

写到这里发现,归根到底就是TYPES和DATA这两个关键字的区别嘛. 还有有无OCCURS的区别.

这样一想,简单明了~~

OCCURS 是在3.0以前申明内表的关键字。意思是内表初始的时候有多少行。现在不提倡使用。看到了认识就行。

=======================================================

ABAP Work Area & Header Line -

1. Difference between Work Area and Header Line

工作区与标题行的不同之处

在对内表进行一些操作的时候,比如增加或者取回一条记录.我们必须暂时保存这条记录.这条记录就保存在内表的工作区里(work area).内表的工作区必须和内表有相同的结构.内表由主体(body)和一个可选的标题行(head line)组成.

标题行是一个隐式的(implicit)工作区.在内表声明的时候,可以选择有无标题行. e.g.

data: begin of itab occurs 10, ab type c, cd type i, end of itab.

这样的内表itab,是有标题行的. data: wa_itab like itab.

这样的wa_itab是显式(explicit)声明的一个itab的工作区.

data: itab1 like itab occurs 10. 这样的内表itab1,是没有标题行的.

标题行是一个和内表主体有着一样结构的字段的串,标题行只有一行.

所以,标题行相当于一个缓冲区(buffer),用于存放被操作的纪录,是内表的缺省的工作区.

2. Using Header Lines as Work Areas

把标题行当工作区来使用

当你在创建一个内表的时候,你同时也声明了一个具有相同名称的标题行(这个好像很奇特的样子么...).可以把这个标题行当作工作区来对内表进行操作.

如果一个内表有标题行,则对其进行操作的ABAP语句会简短一些,因为这些语句会自动认为标题行是一个隐式的工作区.语句的不同如下表:

Operations without header line Operations with header line Operations for all Table Types

INSERT INTO TABLE . INSERT TABLE ITAB.

COLLECT INTO . COLLECT .

READ TABLE ... INTO . READ TABLE ...

MODIFY TABLE FROM ... MODIFY TABLE ...

MODIFY FROM ...WHERE ... MODIFY ... WHERE ...

DELETE TABLE FROM . DELETE TABLE .

LOOP AT ITAB INTO ... LOOP AT ITAB ...

Operations for Index Tables

APPEND TO . APPEND .

INSERT INTO ...

INSERT ...

MODIFY FROM ... MODIFY ...

但是,用隐式的工作区,代码难以被理解,所以还是用一个不同名称的工作区比较好.

=======================================================

sap abap---通过例子学习ABAP--初始化内表 清空内表

初始化内表的作用是清空内表所有的数据行,将内表恢复到填充或赋值之前的状态。初始化内表过程中需要注意之处仍然是初始化无 表头行内表和有表头行内表的区别,以及初始化内表和表头行的区别。

(1)CLEAR ITAB. 同时清空表头和行内表的值

(2)CLEAR ITAB. 只清空内表本身的值,保留表头行的值。 (3)REFRESH ITAB 只清空内表本身的值,保留表头行的值。 (4)FREE ITAB. 只清空内表本身的值,保留表头行的值。

DATA: BEGIN OF line, col1(1) TYPE c, col2(1) TYPE c, END OF line.

DATA itab LIKE TABLE OF line WITH HEADER LINE. line-col1 = 'A'. line-col2 = 'B'. APPEND line TO itab. loop at itab.

write : itab-col1. endloop.

clear itab.

\在这里可以尝试CLEAR ITAB[],FREE ITAB,REFRESH ITAB,看看效果是不是如上所说这样。

IF itab IS INITIAL. WRITE 'ITAB is empty'. ENDIF.

很多程序BUG,就是这一类不起眼的东西引起的~ Clear & Refresh Internal Table. 1. with headerline. CLEAR itab. : Clear the headerline of the Internal Table only.

CLEAR itab[]. : Clear the contents of the Internal Table except the headerline.

REFRESH itab. : Same as CLEAR itab[]. REFRESH itab[]. : Same as CLEAR itab[]. 2. without headerline. ( all four commands have same functionality ) CLEAR itab. : Clear all contents of the Internal Table. CLEAR itab[]. : Same as CLEAR itab. REFRESH itab. : Same as CLEAR itab. REFRESH itab[]. : Same as CLEAR itab.

如何一次性的给内表的一列赋值,不用LOOP循环来做,比如把第一列都给设置成空.

CLEAR 对应工作区清空

MODIFY 内表 FROM 内表对应工作区 TRANSPORTING 修改字段 WHERE 修改字段 <> SPACE.

MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond

这句话的意思是凡是内表itab中满足条件cond的记录都被工作区wa的数据修改,修改的字段是f1...fn

sap abap programming----CALL TRANSACTION USING bdc_tab for Data Transfer

http://help.sap.com/saphelp_sm32/helpdata/en/fa/09715a543b11d1898e0000e8322d00/frameset.htm

DATA: it_bdcdata TYPE TABLE OF bdcdata, wa_bdcdata TYPE bdcdata. wa_bdcdata-program = 'SAPLBTCH'. wa_bdcdata-dynpro = '2170'. wa_bdcdata-dynbegin = 'X'.

APPEND wa_bdcdata TO it_bdcdata. CLEAR wa_bdcdata.

wa_bdcdata-fnam = 'BTCH2170-JOBNAME'. wa_bdcdata-fval = '*'.

APPEND wa_bdcdata TO it_bdcdata.

wa_bdcdata-fnam = 'BTCH2170-USERNAME'. wa_bdcdata-fval = sy-uname.

APPEND wa_bdcdata TO it_bdcdata.

CALL TRANSACTION 'SM37' USING it_bdcdata.

-------------------------------------------------------- Submit to executable program via selection options

-------------------------------------------------------- SUBMIT zrmm0001 VIA SELECTION-SCREEN

AND RETURN

WITH p_matnr = itab-matnr WITH p_werks = itab-werks WITH p_lgort = itab-lgort WITH s_charg = itab-charg WITH p_num = p_label WITH p_dest = p_print.

----------------------------------------------------------

Submit to program which not has selection screen

----------------------------------------------------------

SET PARAMETER ID 'RBN' FIELD S_ARSEG-BELNR. SET PARAMETER ID 'GJR' FIELD S_ARSEG-GJAHR. CALL TRANSACTION 'MIR4' AND SKIP FIRST SCREEN.

sap abap programming----execute--Call Underlying Database Store Procedure in ABAP

摘自sapguys.cn群中Robbin和徐的交流

1. 配置个外部DB, T-code为: DB59, DB50N, 测试连接 2. 执行Native SQL eg:

EXEC SQL. EXECUTE PROCEDURE EAI_ETL_CONTROL(IN :XX1,IN :XX2,IN :wa_datet_update,IN :XX3,OUT :YY1) ENDEXEC.

18:09 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP sap ABAP 常用函数(sap abap function)

RS_VARIANT_VALUES_TECH_DATA

可以返回一个内表, 里面存的是PARAMETER SELECT-OPTION的名字 以及对应的值. 可用于background job中对vaiant的修改. 函数名 描述

SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息

EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT=“*”重新组织 VIEW_MAINTENANCE_CALL 维护表视图 函数名 描述

DY_GET_FOCUS 获得屏幕焦点

DY_GET_SET_FIELD_VALUE 获得或者设置屏幕字段的值 函数名 描述

F4IF_INT_TABLE_VALUE_REQUEST 显示检索help READ_TEXT 读取长文本

CONVERSION_EXIT_CUNIT_OUTPUT 单位转换 SJIS_DBC_TO_SBC 全角转半角 SJIS_SBC_TO_DBC 半角转换为全角

CO_R0_CHECK_DECIMAL_POINT 根据单位检查数据的小数位 POSTAL_CODE_CHECK 检查邮政编码 函数名 描述

CONVERSION_EXIT_ALPHA_INPUT 全数字则在前面补0 CONVERSION_EXIT_ALPHA_INPUT 和上面相反 GET_JOB_RUNTIME_INFO 获得job相关信息 TERMINAL_ID_GET 获得端末id

DATE_CONVERT_TO_FACTORYDATE 把输入日期转为工厂日历日期 MESSAGE_TEXT_BUILD 把消息转为文本 函数名 描述

POPUP_TO_CONFIRM 弹出确认窗口 函数名 描述

CONVERSION_EXIT_MATN1_INPUT 物料号码转换函数 CONVERSION_EXIT_MATN1_OUTPUT 同上相反

CONVERT_TO_LOCAL_CURRENCY 按照指定日期汇率转换金额为指定货币类型 SSF_FUNCTION_MODULE_NAME 根据form名取得对应的函数名(SmartForm) 函数名 描述

DATE_CHECK_PLAUSIBILITY 日期CHECK

cl_gui_frontend_services=>gui_upload 上传到服务器 cl_gui_frontend_services=>gui_download 下载到服本地 SSF_FUNCTION_MODULE_NAME SMARTFORMS输出报表时,生成一个函数名称,然后CALL这个名称 函数名 描述

POPUP_TO_DECIDE_LIST 弹出供选择窗口

ABAP_DOCU_DOWNLOAD – 以HTML格式下载ABAP文档。 ARFC_GET_TID – 以十六进制形式返回终端的IP地址。 BAL_* -容纳了SAP的应用程序日志所有的函数模块。 BP_EVENT_RAISE –在 ABAP/4 程序中触发一个事件。 BP_JOBLOG_READ –获得job log的执行结果。

CLOI_PUT_SIGN_IN_FRONT – 将负号前置, SAP默认将负号放在数字后面。 CLPB_EXPORT –从内表导入到剪贴板。 CLPB_IMPORT – 从剪贴板导入内表。

COMMIT_TEXT -To load long text into SAP 。 CONVERSION_EXIT_ALPHA_INPUT - 数字串前补0 example: input = 123

output = 0000000000000。。。000000000000123

CONVERSION_EXIT_ALPHA_OUTPUT – 消除数字串前的0 example:

input = 00000000000123 output = 123

CONVERT_OTF – 将SAP文档(SAP Script)转换成其他类型。 example:

CALL FUNCTION 'CONVERT_OTF' EXPORTING

FORMAT = 'PDF' IMPORTING

BIN_FILESIZE = FILE_LEN TABLES

OTF = OTFDATA LINES = PDFDATA EXCEPTIONS

ERR_MAX_LINEWIDTH = 1 ERR_FORMAT = 2

ERR_CONV_NOT_POSSIBLE = 3 OTHERS = 4.

DATE_GET_WEEK – 返回一个日期所在的周数。

DATE_CHECK_PLAUSIBILITY – 检查一个日期是否是SAP的有效格式。

DYNP_VALUES_READ – 读取SCREEN字段的值,也可以用来读取报表SELECTION SCREEN。

DYNP_VALUES_UPDATE -更新屏幕字段的值。

ENQUE_SLEEP –在继续处理之前等待一个指定的时间。

ENQUEUE_ESFUNCTION – 锁定一个ABAP程序使它不可以被执行: RELID = 'ZZ' SRTF2 = 0

SRTF = (your report name)

注意不要用SY-REPID来传递你的报表名字,当把SY-REPID作为参数传递给函数模块的时候,SY-REPID的值实际上已经发生了变化。 EPS_GET_FILE_ATTRIBUTES – 获得文件属性。

EPS_GET_DIRECTORY_LISTING – 返回一个本地或网络目录的文件列表。 F4_DATE - 弹出一个窗口显示一个日历允许用户选择一个日期。 F4IF_SHLP_EXIT_EXAMPLE – F4接口模块。 FILENAME_GET – 弹出一个文件选择对话框。 DATA out(60) TYPE c.

CALL FUNCTION 'FILENAME_GET' EXPORTING

filename = 'c:\\1.txt' title = 'GET FILENAME' IMPORTING

filename = OUT.

FTP_CONNECT – 打开并登陆FTP服务器的连接。 FTP_COMMAND – 在FTP服务器上执行一个命令。 FTP_DISCONNECT –关闭指向FTP服务器的连接。

FORMAT_MESSAGE - Takes a message id and number, and puts it into a variable。 Works better than WRITE_MESSAGE, since some messages use $ as a place holder, and WRITE_MESSAGE does not accommodate that, it only replaces the ampersands (&) in the message。

GET_GLOBAL_SYMBOLS – 返回一个程序的tables, select options, texts, etc 。甚至包含selection screen的文本定义。

GET_INCLUDETAB – 获得一个程序的INCLUDES列表。

GUI_CREATE_DIRECTORY –在显示服务器端创建一个目录 。 GUI_DELETE_FILE – 在显示服务器端删除一个文件 。 GUI_DOWNLOAD – 从应用服务器下载内表到显示服务器。 GUI_EXEC – 调用一个文件或程序,取代了WS_EXECUTE。

GUI_GET_DESKTOP_INFO – 获得客户端桌面信息,取代了WS_QUERY。 GUI_REMOVE_DIRECTORY – 从显示服务器删除一个目录 。 GUI_RUN – 启动一个文件或程序 。

GUI_UPLOAD – 从显示服务器上传文件到应用服务器,取代了WS_UPLOAD。 HELP_START – 为一个字段显示帮助。 Useful for doing AT SELECTION SCREEN ON VALUE REQUEST for those fields that do not provide F4 help at the DDIC level。

HOLIDAY_GET – 基于Factory Calendar&/ Holiday Calendar提供了一个节日表。

INIT_TEXT –上传长文本到SAP。

K_WERKS_OF_BUKRS_FIND – 返回一个特定公司代码的所有工厂。 LIST_TO_ASCII –将ABAP报表从 OTF形式转换成ASCII 形式。

LIST_FROM_MEMORY – Retrieves the output of a report from memory when the report was executed using SUBMIT。。。EXPORTING LIST TO MEMORY。 See also WRITE_LIST。

MONTH_NAMES_GET – 获得所有的月和名字

**** MS_EXCEL_OLE_STANDARD_OLE – 创建一个文件并自动启动Excel 。 CONVERT_OTFSPOOLJOB_2_PDF - converts a OTF spool to PDF (i。e。 Sap script document)

CONVERT_ABAPSPOOLJOB_2_PDF -convert ABAP spool output to PDF POPUP_TO_CONFIRM_LOSS_OF_DATA – 弹出一个对话框告知用户有可能丢失数据,询问是否操作继续。

POPUP_TO_CONFIRM_STEP -弹出一个对话框询问用户是否操作继续。

POPUP_TO_CONFIRM_WITH_MESSAGE 可以显示定制的提示信息的确认窗口 类似POPUP_TO_CONFIRM_STEP,只是多三行的文本错误诊断提示。

POPUP_TO_CONFIRM_WITH_VALUE 用此函数可以建立一个对话框用于询问用户是

否执行某步操作,该操作可能会丢失数据,用户可以选择Yes No 或者Cancel。该函数可以传入一个标题,两行的文本(提示问题)和一个对象值 POPUP_TO_DECIDE 显示一个对话框,用户可以两个操作中的一个或者取消。可以传入三行提示文本

POPUP_TO_DECIDE_WITH_MESSAGE 类似POPUP_TO_DECIDE POPUP_TO_DISPLAY_TEXT 显示多行信息的窗口

POPUP_TO_SELECT_MONTH –弹出一个对话框供选择月。

POPUP_WITH_TABLE_DISPLAY -Provide a display of a table for user to select one,

with the value of the table line returned when selected。 PRICING – 获得定价条件

PROFILE_GET - 从INI文件读取一条记录 PROFILE_SET – 往INI文件写一条记录 READ_TEXT – 上传长文本

REGISTRY_GET – 从注册表读取一条记录 REGISTRY_SET – 在注册表里设置一条记录

RFC_ABAP_INSTALL_AND_RUN – 当MODE参数值为?F?时运行PROGRAM表中的程序'.

RH_GET_ACTIVE_WF_PLVAR – 获得激活的HR计划

RH_START_EXCEL_WITH_DATA – 启动Excel并用内表给文件赋值 RH_STRUC_GET –返回所有相关的组织信息 RP_CALC_DATE_IN_INTERVAL – 年月日加减

RP_LAST_DAY_OF_MONTHS – 获得一个月的最后一天 RPY_DYNPRO_READ – 读取屏幕

RPY_TRANSACTION_READ – 给定一个事务代码,获得其程序和屏幕;或给定一个程序和屏幕获得事务代码

RS_COVERPAGE_SELECTIONS – 获得一个报表的选择参数列表。 RS_REFRESH_FROM_SELECTOPTIONS –获得当前选择屏幕的内容

RS_SEND_MAIL_FOR_SPOOLLIST – 在程序中给SAP office 发送消息 RS_VARIANT_CONTENTS – 获得一个变式的内容 RZL_SLEEP – 将当前程序挂起 RZL_SUBMIT – 提交一个远程报表

RZL_READ_DIR_LOCAL – 读取应用服务器的目录

RZL_READ_DIR – 如果服务器名字左部为空,从本地读取目录,否则读取远程服务器的目录

RZL_READ_FILE – 如果为给定服务器名字则读取本地文件,否则读取远程服务器文件。

RZL_WRITE_FILE_LOCAL - 将内表保存到显示服务器(not PC). 不使用OPEN DATASET因此避免了授权检查。

SAPGUI_PROGRESS_INDICATOR – 显示一个进度条 SAVE_TEXT – 上传长文本

SCROLLING_IN_TABLE –当编写模块池的时候可以用它来处理滚动 SD_DATETIME_DIFFERENCE – 两日期作差

SO_NEW_DOCUMENT_ATT_SEND_API1 - 将文档作为邮件的一部分发送

SO_SPLIT_FILE_AND_PATH – 将一个包含路径的全文件名分割为文件名和路径 SO_SPOOL_READ – 根据SPOOL号获得printer spool SO_WIND_SPOOL_LIST – 根据用户浏览printer spool号

SX_OBJECT_CONVERT_OTF_PDF – 从OTF转换为PDF (SAP 脚本转换)

SX_OBJECT_CONVERT_OTF_PRT – 从OTF转换为打印机格式(SAP 脚本转换) SX_OBJECT_CONVERT_OTF_RAW – 从OTF转换为ASCII(SAP 脚本转换) SXPG_CALL_SYSTEM - 检查用户是否有执行某个命令的权限

SXPG_COMMAND_LIST_GET – 获得一个包含所有定义的外部OS命令的列表.

SXPG_COMMAND_DEFINITION_GET – 从R/3系统数据库读取单个外部OS命令的定义

SXPG_COMMAND_CHECK - 检查用户是否有执行某个命令的权限 SXPG_COMMAND_EXECUTE -检查用户是否有执行某个命令的权限,拥有授权则执行命令

TERMINAL_ID_GET –返回终端ID

TH_DELETE_USER – 剔除一个用户,效果同SM04 TH_ENVIRONMENT – 获得UNIX环境

TH_POPUP –在特定用户屏幕上显示一个系统消息

TH_REMOTE_TRANSACTION – 在远程服务器上运行事务代码

TH_USER_INFO – 获得当前用户的信息 (会话,登陆的工作台等) TH_USER_LIST –显示登陆到应用服务器的用户列表 UNIT_CONVERSION_SIMPLE –衡量单位转换 UPLOAD –上传文件到显示服务器

UPLOAD_FILES – 上传一个或多个文件 WRITE_LIST –显示一个列表对象

WS_DOWNLOAD –将内表下载到显示服务器 WS_EXCEL –启动EXCEL WS_EXECUTE –执行一个程序

WS_FILE_DELETE – 删除一个文件

WS_FILENAME_GET –调用文件选择对话框 WS_MSG –显示一个对话框显示在线消息

WS_UPLOAD – 从显示服务器上传文件到内表 WS_VOLUME_GET –获得终端设备标签

WWW_LIST_TO_HTML – 运行一个报表之后,调用这个方法将列表输出转换成HTML SD_VBAP_READ_WITH_VBELN 根据销售订单读取表vbap中的信息

EDIT_LINES 把READ_TEXT返回的LINES中的行按照TDFORMAT=“*”重新组织 VIEW_MAINTENANCE_CALL 维护表视图 DY_GET_FOCUS 获得屏幕焦点

DY_GET_SET_FIELD_VALUE 获得或者设置屏幕字段的值 F4IF_INT_TABLE_VALUE_REQUEST 显示检索help CONVERSION_EXIT_CUNIT_OUTPUT 单位转换 SJIS_DBC_TO_SBC 全角转半角 SJIS_SBC_TO_DBC 半角转换为全角

CO_R0_CHECK_DECIMAL_POINT 根据单位检查数据的小数位

POSTAL_CODE_CHECK 检查邮政编码 GET_JOB_RUNTIME_INFO 获得job相关信息

TERMINAL_ID_GET 获得终端

idDATE_CONVERT_TO_FACTORYDATE 把输入日期转为工厂日历日期 MESSAGE_TEXT_BUILD 把消息转为文本

CONVERT_TO_LOCAL_CURRENCY 按照指定日期汇率转换金额为指定货币类型 SSF_FUNCTION_MODULE_NAME 根据form名取得对应的函数名(SmartForm) DATE_CHECK_PLAUSIBILITY 检查日期合法性

CHECKcl_gui_frontend_services=>gui_upload 上传到服务器 cl_gui_frontend_services=>gui_download 下载到本地 SSF_FUNCTION_MODULE_NAME SMARTFORMS输出报表时,生成一个函数名称,然后CALL这个名

通过这个日期得出那天是星期几 DAY_IN_WEEK

用来得到将来/过去的日期的 RP_CALC_DATE_IN_INTERVAL 日期的加减

BKK_ADD_MONTH_TO_DATE

一组有用的用户交互窗口函数

POPUP_TO_CONFIRM_LOSS_OF_DATA 显示有YES/NO的弹出窗口,提示用户未保存的数据将丢失

POPUP_TO_CONFIRM_STEP 提示是否确认操作的弹出窗口

POPUP_TO_CONFIRM_WITH_MESSAGE 可以显示定制的提示信息的确认窗口

POPUP_TO_CONFIRM_WITH_VALUE 显示确认用户对某个特定对象的操作的弹出窗口 POPUP_TO_DECIDE 将待确认选项以单选按钮的方式显示的弹出窗口 POPUP_TO_DECIDE_WITH_MESSAGE 带消息的确认窗口 POPUP_TO_DISPLAY_TEXT 显示多行信息的窗口 POPUP_TO_SELECT_MONTH 月份选择窗口

POPUP_WITH_TABLE_DISPLAY 有表格对象的确认窗口 一组操纵客户端文件系统的函数

GUI_CREATE_DIRECTORY 在PC上建立文件目录 GUI_DELETE_FILE 删除PC上的文件 GUI_DOWNLOAD 文件下载函数

GUI_EXEC 执行PC上的程序,或者打开文件

GUI_GET_DESKTOP_INFO 得到PC客户端的系统信息,比如操作系统等 GUI_REMOVE_DIRECTORY 删除PC目录 GUI_RUN 运行PC程序(ShellExecute) GUI_UPLOAD 从PC上传程序 判断某天是否是假日

HOLIDAY_CHECK_AND_GET_INFO ABAP_DOCU_DOWNLOAD

Download ABAP documentation in HTML format. GET_CURRENT_YEAR

得到当前的财政年(fiscal year)

察看某日期的属性,包括该日期是星期几,第几天(周2=2),是不是公共假期等,需要输入国家日历。

DAY_ATTRIBUTES_GET

Return useful information about a day. Will tell you the day of the week as a word (Tuesday), the day of the week (2 would be Tuedsay), whether the day is a holiday, and more.(provided by Francois Henrotte)?

CLPB_IMPORT :从剪贴板导入internal table CLPB_EXPORT : 从internal table输入到剪贴板 示例程序:GRCLPB_1

=======

沟通无限

msn:erp.expert@hotmail.com

18:05 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP

sap abap programming---关于ABAP程序执行效率和优化(z)

程序的效率是每个程序员都应该重视的,无论是采用的哪一种语言进行开发.

在我做过的一个项目中,一个几万条数据的运行,在没有考虑效率,对代码没有进行优化前的运行时间是7个小时,当对代码进行一系列的优化修改后,运行的时间就只剩一个小时,由此可见,代码的优化是多么的重要。 那么,我们在写ABAP程序时,怎样的语句才能提高到效率呢,下面是我总结到的几点: 1、抽取数据时,避免使用SELECT *, 尽量使用SELECT A B INTO TABLE ITAB这样的语句。

2、不要使用SELECT...ENDSELECT语句。 3、尽量避免在LOOP中访问数据库。可以在之前先把数据取到内表,在LOOP中用READ TABLE WITH KEY ... BINARY SEARCH.进行读取对应的数据。 4、用SORT代替ORDER BY。 5、避免使用嵌套的循环。 6、尽量不要使用JOIN进行多表连接。把一个表的数据先取到内表,然后使用FOR ALL ENTRIES语句再进行抽取。 7、使用二分查找法。 READ TABLE的之前使用SORT TABLE BY对内表进行排序, 然后使用READ TABLE WITH KEY ...BINARY SEARCH.

8、避免使用SELECT DISTINCT语句。在抽取数据到内表后用DELETE ADJACENT DUPLICATES语句来消除重复行。

9、尽量加多WHERE语句进行条件抽取。 以上,说的还不全,会进行不断更新。

另外,可以通过TCODE:ST05 SE30 进行程序和SQL语句性能和效率的分析

17:59 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP sap 在ABAP 中 MOVE ... TO 和 WRITE ... TO 的区别

WRITE ... TO 把源的格式 附值到目标。

MOVE ... TO 直接把源的值附到目标。

示例:

data: gv_char1(20) type c, gv_char2(20) type c,

dec1(10) type p decimals 2 value '22345.89'.

start-of-selection. * date *

write:/ 'date variable'. write sy-datum to gv_char1. write:/ 'write to', gv_char1. move sy-datum to gv_char2. write:/ 'move to', gv_char2. skip 1. * decimal *

write:/ 'decimal variable'. write dec1 to gv_char1.

write:/ 'write to', gv_char1. move dec1 to gv_char2.

write:/'move to', gv_char2.

Assigning Values with MOVE To assign the value of a data object source to a variable destination, use the following statement:

MOVE source TO destination.

or the equivalent statement

destination = source. The content of source remains unchanged, source does not therefore have to be a variable - it can also be a literal, a text symbol, or a constant. You must always specify decimal points with a period (.), regardless of the user?s personal settings.

Multiple assignments

f4 = f3 = f2 = f1. are also possible. ABAP processes them from right to left as follows:

MOVE f1 TO f2. MOVE f2 TO f3. MOVE f3 TO f4. In the MOVE statement (or when you assign one value to another with the equal sign), it is not possible to specify the field names dynamically as the contents of other fields. If you need to do this, you must use field symbols .

The source and target fields can be of different data types. The result of the value assignment depends on whether these data types are compatible and whether a type conversion can be performed. If there is no conversion rule between the data types in question, no assignment can be made.

DATA: t(10) TYPE c,

number TYPE p DECIMALS 2, count TYPE i.

t = 1111.

MOVE '5.75' TO number. count = number.

Following these assignments, the fields t, number and count have the values ?1111 ?, 5.75, and 6 respectively. When you assign the number literal 1111 to T, it is converted into a character field with length 10. When you assign number tocount , the decimal number is rounded to an integer (as long as the program attributeFixed pt. arithmetic has been set).

Assigning Values Between Components of Structures

The rules for value assignments between data objects also apply to structures. With the command

DATA: struct1 TYPE structure, struct2 TYPE structure. struct1 = struct2.

two structures of the same type can be assigned to one another without difficulty. Here, the entire source structure is seen as a unit and copied to the source structure. It is then possible to access the components individually again. If the structures in question are not compatible, see the conversion rules for structures.

In practice, however, you will often only need to assign certain components of a structure to be certain components of another structure. ABAP has a special statement for this purpose:

MOVE-CORRESPONDING sourcestruct TO destinationstruct.

This statement assigns the contents of the components of structure sourcestruct to the components of the destinationstruct structure that have identical names.

When it is executed, it is broken down into a set of MOVEstatements, one for each pair of fields with identical names, as follows:

MOVE sourcestruct-comp1 TO destinationstruct-comp1.

MOVE sourcestruct-comp2 TO destinationstruct-comp2. ...

Any necessary type conversions are performed individually.

DATA: BEGIN OF address,

firstname(20) TYPE c VALUE 'Fred',

surname(20) TYPE c VALUE 'Flintstone', initials(4) TYPE c VALUE 'FF',

street(20) TYPE c VALUE 'Cave Avenue', number TYPE i VALUE '11',

postcode(5) TYPE n VALUE '98765', city(20) TYPE c VALUE 'Bedrock', END OF address.

DATA: BEGIN OF name,

surname(20) TYPE c, firstname(20) TYPE c,

initials(4) TYPE c,

title(10) TYPE c VALUE 'Mister', END OF name.

MOVE-CORRESPONDING address TO name.

In this example, the values of name-surname, name-firstname and name-initialsare set to 'Flintstone?, ?Fred?, and 'FF'. name-title always has the value ?Mister?.

17:33 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP

sap ABAP--关于Data Reference的使用---FIELD-SYMBOLS

Data References(只能指向abap定义的基本数据或者基本数据组合体)

1、定义数据参考变量(Data References)

DATA dref TYPE REF TO DATA.(指向任意类型,但在创建时必须指定对象类型)

DATA dref TYPE REF TO DATA_TYPE.

或者

TYPES t_dref TYPE REF TO DATA.

DATA dref TYPE t_dref.

在完成地址变量定义时,变量没有指向任何对象,此时你不可引用。只有在变量赋值后

在引用。地址变量的赋值有两种方法:

CREATE DATA

GET REFERENCE OF dobj INTO dref.

2、动态创建数据参考的内存空间(CREATE DATA)

CREATE DATA dref {TYPE type}|{LIKE dobj}这种语句创建的对象没有名称,只有地址变量指向该内存变量;在申明参考变量时,未指定类型则必须加{TYPE type}|{LIKE dobj}说明。

有时需要动态创建动态类型数据对象,语法如下

CREATE DATA dref TYPE (name).

3、将数据地址赋值给数据参考变量(GET REFERENCE)

GET REFERENCE OF dobj INTO dref.

4、访问数据参考变量指定的数据

访问数据参考变量指定的数据有两种情况:

1) 对于使用DATA dref TYPE REF TO DATA_TYPE来声明的数据参考变量,程序可以直接通过->*运算符直接访问数据;

代码样例

types: begin of STRUC_1, A type I,

B type ref to SFLIGHT, C type P,

end of STRUC_1. data: S1 type STRUC_1. types: begin of STRUC_2, X(10) type C,

Y type ref to STRUC_1, Z type I, end of STRUC_2. data: S2 type STRUC_2,

R2 type ref to STRUC_2. if S1-A > 10.

create data S1-B.

S1-B->CARRID = 'LH'.

S1-B->PAYMENTSUM = 1000. endif.

S2-Y->A = 100.

S2-Y->*-A = 200. \S2-Y->B->FLDATE = SY-DATUM.

2) 对于使用DATA dref TYPE REF TO DATA来声明的数据参考变量,程序如果要访问数据参考变量指定的数据,你首先要将数据参考变量赋值给一个字段符号(Field symbol)(是不能直接通过数据参考变量来访问的).如果数据参考变量为初始化状态, sy-subrc就返回4。

ASSIGN dref->* TO [CASTING ...].

代码样例

DATA: numref TYPE REF TO DATA, number TYPE I VALUE 123. FIELD-SYMBOLS: TYPE ANY.

GET REFERENCE OF number INTO numref. ASSIGN numref->* TO .

===================================

沟通无限

msn:erp.expert@hotmail.com

17:12 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP sap abap系统自定的变量(TCODE)

sy-tabix 例如在loop的时候,此变量就代表当前所在行的index.

sy-tabix contains the index of the appended line.

sy-index 一个随着循环而增加的数字

sy-dyngr four character id placed in system field sy-dyngr while screen is prossed.

sy-title at runtime it contains the title.

se51 screen painter

tfawf Field selection: Modifiable fields

sy-repid 当前的program name sy-tcode 当前系统的tcode screen-input=0表示禁止输入

screen-active=0表示此按钮不可用。

screen-invisible表示是否可见

we02 display idoc we09 search idoc we19 test idoc

tfawf Field selection: Modifiable fields

sy-dyngr four character id placed in system field sy-dyngr while screen is prossed.

sy-title at runtime it contains the title.

sy-dbcnt 正在处理的数据笔数

SE01: Create Customizing Transport. SE11: Data Dictionary. SE13: ABAP Dictionary. SE14: Database Utility.

SE15: Respository Information System. SE16: Data Browser.

SE17: General Table Display. SE18: BADI Definition.

SE19: BADI Implementation. SE37: Function Module. SE38: Create Program. SE51: Screen Painter.

SE55: Table View Maintenance. SE71: Copy Script.

SE78: Upload graphics(RSTXLDMC). SE81: Locating Customer Exit. SE80: Function Groups. SE91: Message Class.

SE93: Create Transaction Code. SM30: Table Maintenance.

SM37: Background Processing. SO10: Standard Text. SCC1: Copy From Client. RSTXSCRP: SAP Script.

SMOD: Locating Customer Exit.

WE42: Inbound Processing Procedure.

WEDI: IDOCS Area Code. WE21: Port Definition. WE01: View IDOCS.

SY-UZEIT: Current System Time. SY-DATUM: Current System Data. SY-TABIX: Index of Appended Line.

SY-SUBRC: Return Value After Specific Statements. SY-DBCNT: Number of Elements in the Edited Dataset. SY-LINSZ: Line Size.

SY-UCOMM: Current Function Code.

SY-DATAR: Check if a User Made Any Input. SY-CPROG: Getting the Current Program Name.

最后下面是关于XI的tcode

ALRTCATDEF- Alerts Configuration.

ALRTDISP - Display of Alerts Created

SXMB_IFR -> Start Integration Builder

SXMB_MONI -> Integration Engine - Monitoring SXI_MONITOR -> XI: Message Monitoring

SXI_CACHE -> To Access IS runtime cache

SXI_SUPPORT -> Test all the Repository and Directory Objects SXI_CACHE -> XI data directory cacheidx1 -> idoc adapter IDX2 -> idoc metadata

IDX5 -> monitor idoc adapter ST22 -> ABAP dump analysis

SMQ1 -> messages inbound e outbound queue SMQ2 -> messages inbound e outbound queue SMICM -> J2EE administration

ST06 -> Operating System Monitor. cpu memory filesystem machine status - cpu, memory and file system. ST03 -> workload.

SCC4 -> Client Administration sale - ale settings

RZ10 - edit system profile

SM59 ->mantain rfc destinations

BD64 -> mantain distribution model (trasformazioni) AL08 -> list all logged users(user login logon) SE10 -> Change Request SE09 -> Change Request

WE05 -> All idocs

WE19 -> IDoc Test Tool WE21 -> port definition SE11 -> Data dictionary

se37 -> mantain funcion modules SICF -> http server configuration SMGW -> Gateway Monitor BD13 ->

BD64 -> Maintenance of Distribution Model PFCG -> Roles

table TSTC -> sap transactions codes table TSTCT -> transaction descriptions STMS -> transports management

SPAM -> apply ABAP support packages

SPAU -> manage objects after apply support packages SE01 -> manage change requests SLDCHECK -> Test SLD Connection SLDAPICUST-> SLD API Customizing

SXMB_ADM -> Integration Engine - Administration SXMB_MONI_BPE -> Process Engine - Monitoring SE38 -> ABAP Editor

SE11 -> ABAP Dictionary ST22 -> ABAP dump analysis

SPROXY-> ABAP Proxy Generation SE80 -> Object Navigator

ABAPDOCU -> ABAP Documentation and Examples SE24-> Class Builder

SM21-> Online System Log Analysis SMQ1-> qRFC Monitor (Outbound Queue) SMQ2-> qRFC Monitor (Inbound Queue) RZ70-> SLD Administration

SM58-> Asynchronous RFC Error Log

SM59-> RFC Destinations (Display/Maintain) SMICM-> ICM Monitor

WE60-> Documentation for IDoc types BD87-> Status Monitor for ALE Messages IDX1-> Port Maintenance in IDoc Adapter IDX2-> Meta Data Overview in IDoc Adapter WE02-> Display IDoc

WE09-> Search for IDocs by Content WE20-> Partner Profiles SE16-> Data Browser

SE93-> Maintain Transaction Codes SM30-> Call View Maintenance

SU01-> User Maintenance SM02-> System Messages

BD54 -Logical System Creation.

SWF_XI_PBUILDER -> for Detail BPM Process

SMQS - > to register the destination in QOUT scheduler WEOUTQUEUE - > to start the queue processing SMQR - > to register the queue

IDXPW - > to activate the IDOC message package IDXP - > to monitor the message packages.

SWF_XI_CUSTOMIZING -> transaction to check prerequisites for integration processes.

SWF_XI_ADM_BPE-> Start or Stop BPE

SWF_XI_ADM_BPE_DISP-> Display BPE Status

SXI_MAPPING_Test--> Test ABAP Mapping

16:37 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP sap ABAP基础 programming

--------------------------------------------------------------------------------

分支结构(IF,CASE)

使用IF的条件分支

IF . ELSEIF . ELSEIF . ..... ELSE.

ENDIF. l 例子:

l DATA flag TYPE c VALUE ?a'.

l IF flag = ?a?.

l WRITE / ?true?.

l ELSE.

l WRITE / ?error'.

l ENDIF.

l 产生如下输 出:

true

使用CASE的条件分支

基本语法:

CASE . WHEN .

WHEN .

WHEN .

WHEN ... ......

WHEN OTHERS.

ENDCASE.

l 例子:

l DATA: TEXT1 VALUE 'X', TEXT2 VALUE 'Y', TEXT3 VALUE 'Z', STRING VALUE 'A'.

l CASE STRING.

WHEN TEXT1.

WRITE: / 'String is', TEXT1. WHEN TEXT2.

WRITE: / 'String is', TEXT2. WHEN TEXT3.

WRITE: / 'String is', TEXT3. WHEN OTHERS.

WRITE: / 'String is not', TEXT1, TEXT2, TEXT3. ENDCASE.

l 产生如下输出: String is not X Y Z

l 这里,执行WHEN OTHERS后面的语句块,因为 STRING 的内容“A” 不等于“X” 、“Y”或 “Z”,

循环结构(DO,WHILE)

使用DO的无条件循环 DO

[TIMES]

[VARYING FROM NEXT ].

ENDDO.

? TIMES 循环次数,

? VARYING选项在每次循环中给变量重新赋值

? 可以是文字或变量。如果是0或负数,系统不执行该循环

? 使用 DO 语句时要避免死循环。 如果不使用 TIMES 选项,则在语句块中至少应包含一个 EXIT、 STOP 或 REJECT 语句,以便系统能够退出循环。

? 例子:

? DO.

? WRITE SY-INDEX.

? IF SY-INDEX = 3.

EXIT. ENDIF.

? ENDDO.

? 产生如下输出:

? 1 2 3

? 这里,处理 3 次循环,然后在 EXIT 语句后退出循环。

? SY-INDEX代表循环次数

使用WHILE的条件循环

语法:

– WHILE [VARY FROM NEXT ].

ENDWHILE.

? 循环终止(CONTINUE,CHECK,EXIT)

无条件终止循环:CONTINUE

DO 4 TIMES.

IF SY-INDEX = 2.

CONTINUE.

ENDIF.

WRITE SY-INDEX.

ENDDO.

输出结果:

1 3 4

? 有条件终止循环:CHECK

DO 4 TIMES.

CHECK SY-INDEX BETWEEN 2 and 3.

WRITE SY-INDEX.

ENDDO.

输出结果: 2 3 3

完全终止循环:EXIT

DO 4 TIMES.

IF SY-INDEX = 3.

EXIT.

ENDIF.

WRITE SY-INDEX.

ENDDO.

输出结果: 1 2

16:33 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP sap abap----常用的SAP标准函数(sap abap standard function)---and SAP standard programs

Function Module Description

ABAP4_CALL_TRANSACTION

Call transaction code, also see SAPGUI_SET_FUNCTIONCODE

ADDR_PERS_COMP_COMM_GET

Get additional user address details not retrived by SUSR_USER_ADDRESS_READ (i.e. email address)

BAPI_COMPANYCODE_GET_PERIOD

Retrieve fiscal year and payrole period (based on date and company code)

CALCULATE_DATE

Increase/decrease DATE by a specific number of Days/Months

CONVERT_DATE_TO_EXTERNAL Converts date from system storage format to users specified display format

CREATE_TEXTS

Create standard texts (i.e. PO headers texts)

CURRENCY_AMOUNT_SAP_TO_DISPLAY

Convert currency value from value stored in SAP to displayed currency

CURRENCY_AMOUNT_DISPLAY_TO_SAP Convert currency value from displayed currency value to value stored in SAP

CLPB_EXPORT

Export files to clipboard

CLBP_IMPORT

Copies clipboard into table

DATE_COMPUTE_DAY

Returns day of the week for a particular date(1=Monday, 5=Friday etc.)

DATE_TO_DAY

Returns day of the week for a particular date('Monday', 'Friday', 'Sat.')

ENQUEUE_READ

Returns list if active lock objects

DETERMINE_PERIOD

Retrieve fiscal year and payrole period (Note: verision parameter is fiscal year varient from table T009)

DYNP_VALUES_UPDATE Return values (i.e. from an F4 value request) into respective fields on a dynpro.

F4IF_INT_TABLE_VALUE_REQUEST

Display internal table as search help (documented in SAP)

FILE_GET_NAME

Retrieve Logical file path.

Use Transaction 'FILE' to view/create logical file paths

FTI_FISCAL_YEAR_MONTH_GET

Returns fiscal year for specific date

GUI_DOWNLOAD, WS_DOWNLOAD, DOWNLOAD Download file to PC

GUI_UPLOAD, WS_UPLOAD, UPLOAD Upload file from PC

HR_SEN_CRULE_0100_DATE

Increase/decrease DATE by a specific number of Days/Months/Years

JOB_OPEN, JOB_SUBMIT, JOB_CLOSE Create and submit background jobs.

MESSAGE_TEXT_BUILD Builds actual message based on info returned from Call transaction

NUMBER_GET_NEXT

Get the next unique number in a number range. Use tcode SNRO for maintaining number ranges.

NUMBER_CHECK

Check if number is within a number range (see tcode SNRO)

NUMBER_GET_INFO

Get info about number range (see tcode SNRO).

POPUP*

Display Pop-up Screen(s)

READ_TEXTS

Retrive standard texts (i.e. PO headers texts)

READ_EXCHANGE_RATE

Retrieve exchange rate on a particular date

RS_CREATE_VARIANT

Creating a Report Variant

RS_VARIANT_CONTENTS

Returns contents of a variant, is also useful as the result lists all variable names that could be set on screen.

RZL_READ_DIR_LOCAL

Get list of files within specific directory(Application Server)

SAPGUI_SET_FUNCTIONCODE

Execute SAP function code. Can also be used to execute transaction code by using '/o' i.e. '/OSE80'.

STUM_WP_TOTAL_ACTIVITY

Retrieves list of all process from all servers (i.e. SM50, SM66). Also returns a second table, containing a list of all the servers.

STUM_WP_SERVER_ACTIVITYS & EW_TH_WPINFO

Retrieves list of processes on current server.

SUSR_USER_ADDRESS_READ

Get user address details stored under 'Own data'

SUSR_USER_PARAMETERS_GET

Get user parameter details stored under 'Own data'

SUSR_USER_DISPLAY_WITH_AUTHS Displays user authorisation objects (Note: may have to debug around authority checks)

SUSR_USER_AGR_ACTIVITYGR_GET

Get users activity group details

SUSR_SYNC_USER_TABLES Sync USR tables

SXPG_COMMAND_EXECUTE

Execute external command(FTP data in & out of SAP)

TH_POPUP

Display Windows Message on Users Screen

WS_EXECUTE

Execute External Program

===========================================================================

SAP standard programs

Program

Description

BALVBT01

Example SAP program for displying multiple ALV reports on one page

BCALV_GRID_DEMO

ALV Dialog grid demo (4.6)

SHOW_COLO

Displays all colours available

SHOW_ICON

Displays all icon available

RGUGBR00

Substitution/Validation and rules utility

RKCTSEAR

Search source code of various programs for up to two strings. Also

see RPR_ABAP_SOURCE_SCAN or use search in source functionality via SE80

RPCIFU01

Display File

RPCIFU03

Download Unix File to PC

RPCIFU04

Upload PC File to Unix File

RPR_ABAP_SOURCE_SCAN

Search ABAP code for a string. Much more flexible than RSRSCAN1 or RKCTSEAR

RSBDCBTC

Submit a BDC job with an internal batch number and wait for the end of the batch input session

RSBDCDRU

Prints the contents of a Batch Input session. No options for error transactions only

RSBDCOS0

Execute OS Command (Logged in SYSLOG and Trace Files)

RSBDCSUB

Process batch input sessions automatically

RSBTCDEL

Delete batch jobs

RSCONN01

SAPconnect: Start Email Send Process

RSCSAUTH

Maintain/Restore Authorization Groups

RSINCL00

Extended ABAP Program Reference List

RSMODRES

Restore enhancement projects after upgarde

RSORAREL

Check Oracle Version

RSPARAM

Display all instance parameters

RSPO0041

Delete Old Spool Requests

RSSNAPDL

Reorganization Program for Table SNAP of Short Dumps

RSTRANSP

Transport Report Variants

RSTXFCON

SAPscript: Conversion of Page Format for Forms

RSTXPDFT4

Convert spool request to PDF document

RSTXPDFT5

GUI download of a spool request

RSTXSCRP

SAPscript Export to Dataset / SAPscript Import from Dataset (Upload and download SAPScript layout sets)

RSTXTRAN

Transfer of SAPscript Texts(standard texts) to a transport

RSUSR003

Check the Passwords of Users SAP* and DDIC in All Clients

RSUSR006

List of Users with Incorrect Logons

RSVARFIT

Adjust Variants to Modified Selections

RSVTPROT

Evaluation of change logs

RSWBO052

Change Object Directory Entries

RSWBO060

Include Objects in a Transport Request

SAPMSUU0

Program for user maintenance(SU01), Maybe useful if you do not have access to the actual SU01 transaction code.

9:50 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP

SAP如何通过RFC连接.NET(sap abap .net programming)

The following steps need to create server side application.

1. Create a SAP Connector Class - Application ( Under Visual C# Projects ) and give the RFC name and build the application.

2. Inside this application, write your .net code as per your requirement. 3. After completed, this application will create an exe file ( Under the folder binrelease ).

4. You need to pass the command line parameters to execute this exe file. Command line parameters are

-a -g -X

For example:-aREG -gSAPSER1 -xSAPGW00 5. Create a RFC destination in SM59, Under TCP/IP.Technical Settings --> Activation Type --> Registered Server Program ( Need to be selected ).

Program ID must be your registeration name : TDS - SAP的RFC中Program ID 在.NET里面的名称是随便命名的。 Gateway Options are

Gateway Host:SAPSER1(10.1.2.150)-SAP服务器的IP地址 Gateway Service:SAPGW00-SAP网关

For the parameter Gateway Host, you should enter the hostname of your SAP application server. The value for the parameter Gateway Service is usually SAPGW, where the XX is the system number of your SAP system. 6. Write an ABAP program to call the RFC with destination as created in 5th setp. 7. The exe file should run in the same domain/LAN of your SAP server. You can test the connection in SM59.It should be obvoius that the main option is \And \or \name\is an arbitrary string that just need to be equal in SM59 and at the command line of the RFC server.

1.查看.NET注册的Program ID是否运行 It sounds like that another RFC server program with the same Program ID is running there and the SAP gateway is \between your RFC server and that one.

You can use SMGW->GoTo->Logged on Clients to check all registered RFC servers and their programIDs (TP name).

2.Tcode:SM59 - 创建RFC连接,选择TCP/IP连接

3.Calling RFC .NET Server from SAP Programs

To execute our .NET server stub application from the SAP system we need to execute the ABAP command Call function X Destination Y. This report calls our proxy and writes the results to screen. Alternatively, you can use the SAP function module?ssingle test capability with the TRFC destination for your .NET server stub.

To create a TRFC destination for the SAP .NET server stub create a destination of type T (TRFC) in transaction code SM59. The program ID in your server stub is case sensitive.

Example

*&---------------------------------------------------------------------

*& Report ZRFCSERVERCALL

**&--------------------------------------------------------------------

*& This program can be used with the RFCServerConsole sample

*& Source is available in %RFCServerConsoleABAPProgram

*&---------------------------------------------------------------------

REPORT ZRFCSERVERCALL .

DATA: TBLCUST like BRFCKNA1 occurs 0 with header line.

PARAMETERS: P_CUSTNO like KNA1-KUNNR, P_CUSTNA like KNA1-NAME1,

P_DEST(15) TYPE C.

CALL FUNCTION 'RFC_CUSTOMER_GET' DESTINATION P_DEST

EXPORTING

KUNNR = P_CUSTNO

NAME1 = P_CUSTNA

TABLES

CUSTOMER_T = TBLCUST

EXCEPTIONS

NOTHING_SPECIFIED = 1

NO_RECORD_FOUND = 2

OTHERS = 3.

CASE SY-SUBRC.

WHEN 0.

LOOP AT TBLCUST.

WRITE: / SY-TABIX, TBLCUST-KUNNR, TBLCUST-NAME1, TBLCUST-ORT01.

ENDLOOP.

WHEN 1.

WRITE: / 'You need to specify a value ', SY-MSGV1.

WHEN 2.

WRITE: / '.NET component didnt find anything ', SY-MSGV1.

WHEN 3.

WRITE: / 'Some other error occurred ', SY-MSGV1.

WHEN OTHERS.

WRITE: / 'Something is wrong if we get here'.

ENDCASE.

The entry point in the C# method is the method with the function module name being called from the SAP system (for example,

RFC_CUSTOMER_GET). In Microsoft Visual Studio, you can set a breakpoint here and examine the input values from the SAP system. This provides a similar idea to the ABAP_DEBUG functionality that is provided in the client proxy.

RFCServerConsole - is an SAP RFC Server implemented in C#. The SAP system calls out to this .net component.

This component implements, RFC_CUSTOMER_GET and will return 2 customers to SAP. Before calling this component from inside of SAP, you'll need a TCP/IP destination (SM59) - (type registration). Set the

SAP connection in the Visual Studio project properties for RFCServerConsole (e.g. right click on it)

Properties > Configuration Properties > Debugging > Command line arguments.

(example -aSomeProgID -gLOCALHOST -xSAPGW00)

The program id (-a) parameter must match exactly in your component and in the TCP/IP destination (SM59)

All you have to do in sm59 is write RFC destination , Program ID , Description .

The Program ID is important ,because it is just the SomeProgID (example -aSomeProgID -gLOCALHOST -xSAPGW00)run RFCServerConsole.exe -aSomeProgID -gLOCALHOST -xSAPGW00 in commond.exe

9:48 | 添加评论 | 固定链接 | 写入日志 | SAP ABAP SAP用户权限解剖及自修改

通常basis会使用PFCG做权限管理,时你保存时会产生一个系统外的profile name,

记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢?

首先明白几个概念. 1.activity

这样说吧,我们从activity谈起,activity是什么意思这个你查下

字典也就知道了,对就是规定可做什么动作,比如说不能吸烟只能喝酒,不能多于2两, 不对,这是我老婆讲的,SAP不是这样子的,是只能insert, update,display什么的.

这些东西当年德国佬是写在tobj表中的. activity 也是可分activity group的.

2.activity category &Authorization group Role Vs Profile

本文来源:https://www.bwwdw.com/article/9esp.html

Top