浅谈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
本着尽量少的访问数据库,将数据多放在内存中处理,提高数据的处理速度。一般不建议使用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. |
相关文章推荐
- SAP ABAP代码优化(5)之空间换取时间策略
- ABAP--C语言调用SAP的RFC的代码样例
- 优化定制化abap代码必须遵守的经典黄金规则
- 浅谈SAP:关于R/3和ABAP4
- SAP ABAP程序优化方法(搜集自论坛)
- ABAP--SAP的SYSTEM的函数列表和代码示例
- [性能] SAP销售订单取数逻辑优化---索引表
- 【每周至少一篇 160901】循环级别的代码优化(上周补充)
- SAP ABAP 特性相关表取数逻辑
- ABAP--SAP的SYSTEM的函数列表和代码示例
- SAP ABAP程序性能优化 2
- ABAP:SAP报表性能的优化
- 关于代码速度优化,MDK中 static 与优化级别与典型for循环之间的关系
- SAP ABAP编程 常用事物代码
- ABAP--SAP的SYSTEM的函数列表和代码示例
- ABAP:SAP报表性能的优化
- SAP ABAP程序优化方法(搜集自论坛)
- 【代码优化】for-each代替普通的for循环或者while循环
- SAP ABAP 性能优化技巧 — 正确使用”move” 语句
- ABAP--在SAP中设计自动刷新的报表代码