淺談SAP 中ABAP循環和取數代碼優化

轉自:橋風的博客空間-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.

發佈了84 篇原創文章 · 獲贊 3 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章