ABAP中Collect的用法
Posted 我爱编程_怎么可能
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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这种非常考验运行时间的系统来说,每优化一点都是很重要的。
以上是关于ABAP中Collect的用法的主要内容,如果未能解决你的问题,请参考以下文章