您的位置:首页 > 编程语言

浅谈SAP 中ABAP循环和取数代码优化

2009-06-03 10:38 447 查看
转自:桥风的博客空间-daringz-共舞SAP

本着尽量少的访问数据库,将数据多放在内存中处理,提高数据的处理速度。一般不建议使用loop循环,在循环中select 数据库。如数据量不大,建议直接提取所有数据,再通过内表处理。或者通过for all entries in 处理。简列两例:

例一、

***取客户名称,直接去kna1表所有记录,因数据量不大
select kunnr name1 into corresponding fields of table tkna1 from
kna1 where loevm <> 'X'.

***对应客户名称
sort tvbak by kunnr.
sort tkna1 by kunnr.
fcount = 1.
loop at tvbak.
fcount = sy-tabix.
read table tkna1 with key kunnr = tvbak-kunnr binary search.
tvbak-namef = tkna1-name1.
modify tvbak index fcount.
endloop.

这里有几点需要注意:

1、将两需要处理的数据库排序。(read 处理时需要)

2、最好先去掉重复数据。(本次取数没有重复数据,故没做处理)

3、如果限制表中没有数据,则会取所有数据。(如下例中若tvbak表为空,则会取所有数据)

4、into corresponding 相比appending corresponding会自动去掉重复数据。

例二、

***选择订单的行项目
select vbeln posnr matnr arktx kbmeng vrkme into corresponding
fields of table tvbap from vbap for all entries in tvbak where vbeln =
tvbak-vbeln.

***给订单行项目添加单据条件数。(前面代码(没有列出)已经对tvbak按vbeln重新排序过)
sort tvbap by vbeln.
fcount = 1.
loop at tvbap.
fcount = sy-tabix.
read table tvbak with key vbeln = tvbap-vbeln binary search.
tvbap-knumv = tvbak-knumv.
modify tvbap index fcount.
endloop.

注意点同上

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

SAP ABAP 循环嵌套优化浅探。
2007年02月03日 星期六 下午 03:34

此处提供代码三例,仅供参考,还望指正。

1、(se30可以找到)

I = 1.
LOOP AT ITAB1 INTO WA1.
LOOP AT ITAB2 INTO WA2 FROM I.
IF WA2-K <> WA1-K.
I = SY-TABIX.
EXIT.
ENDIF.
" ...
ENDLOOP.
ENDLOOP.

2、(和上述有些不同)

DATA: fcount TYPE i.
fcount = 1.
SORT tvbrk BY vbeln.
SORT tvbrp BY vbeln.
LOOP AT tvbrp.
LOOP AT tvbrk FROM fcount.
IF tvbrk-vbeln = tvbrp-vbeln.
fcount = sy-tabix.
tvbrp-bukrs = tvbrk-bukrs.
tvbrp-vkorg = tvbrk-vkorg.
tvbrp-kunag = tvbrk-kunag.
tvbrp-fkdat = tvbrk-fkdat.
tvbrp-fkart = tvbrk-fkart.
MODIFY tvbrp.
EXIT.
ENDIF.
ENDLOOP.
ENDLOOP.

3、(se30提示)

LOOP AT tvbrp.
READ TABLE tvbrk WITH KEY vbeln = tvbrp-vbeln BINARY SEARCH.
tvbrp-bukrs = tvbrk-bukrs.
tvbrp-vkorg = tvbrk-vkorg.
tvbrp-kunag = tvbrk-kunag.
tvbrp-fkdat = tvbrk-fkdat.
tvbrp-fkart = tvbrk-fkart.
MODIFY tvbrp.
ENDLOOP.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: