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这种非常考验运行时间的系统来说,每优化一点都是很重要的。

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP/4用户指南是关于ABAP/4编程语言的手册。其目的在于: · 向新的ABAP/4程序员提供从基本语言组件到复杂报表和事务编码的全面指导 · 向资深ABAP/4程序员提供解决特殊问题的参考方案 为满足这些需求,特提供一个整体概述并本指南分成三个部分,循序渐进,逐步深入 · ABAP/4的基本组件 · 如何编写报表程序 · 如何编写事务 ABAP/4用户指南目的不在替换ABAP/4关键字文档。可以通过如下方式调用该文档 · 从“ABAP/4编辑器:初始屏幕”(事务SE38)选择“实用程序->ABAP/4关键字文档 · 选择ABAP/4编辑器的“帮助” · 将光标放在ABAP/4编辑器的关键字上,然后按下F1键 ABAP/4用户指南的真正目的在于说明如何使用以及为何使用ABAP/4关键字。并为此提供了许多示例,构成用户自己测试程序的基础。 要获取详细信息,可以进行以下某种操作: · 关于关键字的详细信息,请参阅关键字文档。 · 关于ABAP/4环境术语的详细信息,请从“ABAP/4编辑器:初始屏幕”(事务SE38)选择“实用程序->ABAP/4关键字文档”。然后就会出现与解释文本相链接的主题层次。要找出这些文本用于哪些主题,请选择“查看->标题和关键字”。屏幕右侧就会出现一个名称列表。对于所有以ABEN而非TITL开头的名称,如果双击树结构的主题,则会出现文本屏幕。 · 关于如何提高ABAP/4任务性能的技巧,请从“ABAP/4开发工作台”上选择事务SE30或“测试->运行时间分析”,然后单击“提示和技巧”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值