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

来源:互联网 发布:support v4 源码下载 编辑:程序博客网 时间:2024/05/21 03:16

转自:桥风的博客空间-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.

原创粉丝点击