ABAP中Collect的用法详解编程语言

简单来说:collect在非数值字段相同的情况下,起到了数值字段汇总作用。
非数值字段不同的情况下,效果和append相同执行插入内表操作,当非数值字段相同的时候,则相当于modify的效果,只不过是将数值字段进行汇总相加后更新。

语法:

collect W_table into I_table .

举个简单的栗子:

这里写图片描述

代码如下:

REPORT ZTEST NO STANDARD PAGE HEADING. 
 
TYPES:BEGIN OF TY_TEST, 
ID(3) TYPE C, 
MENGE TYPE I, 
END OF TY_TEST. 
 
DATA:I_TEST TYPE TABLE OF TY_TEST, 
     W_TEST TYPE TY_TEST. 
DATA:I_TEST2 TYPE TABLE OF TY_TEST. 
 
W_TEST-ID = '001'. 
W_TEST-MENGE = 10. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '001'. 
W_TEST-MENGE = 70. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '002'. 
W_TEST-MENGE = 20. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '002'. 
W_TEST-MENGE = 50. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '002'. 
W_TEST-MENGE = 80. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '003'. 
W_TEST-MENGE = 30. 
APPEND W_TEST TO I_TEST. 
 
W_TEST-ID = '003'. 
W_TEST-MENGE = 90. 
APPEND W_TEST TO I_TEST. 
 
 
LOOP AT I_TEST INTO W_TEST. 
  COLLECT W_TEST INTO I_TEST2."关键一步。。。" 
  CLEAR:W_TEST. 
ENDLOOP. 
 
WRITE:/ 'Collect前的内容:'  . 
WRITE:/1(12) '编号' ,   '数量'. 
LOOP AT I_TEST INTO W_TEST. 
  WRITE:/ W_TEST-ID, ' ',W_TEST-MENGE. 
  CLEAR:W_TEST. 
ENDLOOP. 
 
 
WRITE:/ . 
 
 
WRITE:/ 'Collect后的结果:'  . 
WRITE:/1(12) '编号' ,   '数量'. 
LOOP AT I_TEST2 INTO W_TEST. 
  WRITE:/ W_TEST-ID , ' ',W_TEST-MENGE. 
  CLEAR:W_TEST. 
ENDLOOP.

根据上面的代码,不难看出,我们的基础数据内表I_TEST经过collect之后,提交到I_TEST2中,完成了数值字段的汇总。
COLLECT一般在loop中使用,但是不同于之前博文提到的at end of,at new的用法,使用collect不需要对内表排序,对内表也没有其他限制条件,使用起来非常方便。
这里为了方便,我们的内表结构只设了一个非数值字段和一个数值字段,同时两个内表结构完全一致,但是也能看出效果,经过汇总后,非数值型字段值相同的几行汇总成了一行,数值字段完成累计。

当然,在实际程序开发过程中,可以更灵活多变的使用collect,这样在统计数值字段时就可以节省许多代码量,甚至可以避免loop嵌套之类的耗费时间的写法。希望大家能活学活用,将简单的一个小语法的作用发挥到极致。

这里我们顺便复习下类似的语法: collect , append , modify , insert .

1. 
append w_table to i_table. 
 
2. 
modify i_table from w_table. 
 
3. 
collect w_table into i_table. 
 
4. 
insert w_table into i_table index 1. 
insert用法和append类似,但必须指定index,通过index指定插入第几行。

在ABAP编程中,我们最常见的操作内表的写法基本就是上述几种用法,尤其是modify,在最后数据内表空余字段填充时都要用到。而insert可能用到的比较少,append也是很常用的写法,有时我们会习惯使用我们熟悉的常用的写法,反倒是忽略了有些简单又高效的语法,尝试着用更精简的代码实现更快的执行速度,对于SAP这种非常考验运行时间的系统来说,每优化一点都是很重要的。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17928.html

(0)
上一篇 2021年7月19日 20:36
下一篇 2021年7月19日 20:36

相关推荐

发表回复

登录后才能评论