使用COLLECT语句

2020-09-07 14:55发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想根据物料编号从表VBBE添加未结订单(VBBE-OMENG)。 和plant。我可以使用COLLECT语句吗? 我该如何利用它?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我想根据物料编号从表VBBE添加未结订单(VBBE-OMENG)。 和plant。我可以使用COLLECT语句吗? 我该如何利用它?

付费偷看设置
发送
6条回答
樱桃小丸子0093
1楼 · 2020-09-07 15:59.采纳回答

嗨..

这是代码:尝试.....

类型:ST_VBBE的开始,

MATNR类型VBBE-MATNR ,

WERKS类型VBBE-WERKS,

OMENG类型VBBE-OMENG,

ST_VBBE的结尾。

数据:IT_VBBE类型表 在ST_VBBE中,

WA_VBBE类型为ST_VBBE。 。

将IT_VBBE放入WA_VBBE。

将WA_VBBE放入IT_VBBE。

ENDLOOP。

如果有帮助,则奖励

蓋茨
2楼-- · 2020-09-07 16:00

此消息已被审核。

小熊yu生菜
3楼-- · 2020-09-07 15:38

此消息已被审核。

SKY徐
4楼-- · 2020-09-07 15:47

Hello Vishal,

< p>查找要收集的文档。

通常用于收集记录以附加到内部表中……

COLLECT语法图

基本形式COLLECT [wa INTO] itab。

添加:

...由f

排序在ABAP Objects上下文中,语法更为严格

在其他ABAP区域执行。 请参见行的短格式

操作。

效果COLLECT允许您创建唯一或汇总的数据集。

系统首先尝试查找表条目 对应于

表键(请参阅内部表的键定义)。

键值是从

内部表itab的标题行获取的,还是从明确指定的工作

区域wa获取的。 itab必须具有平面结构,也就是说,

可能不包含其他内部表。 所有不属于键的

部分的组件都必须具有数字类型(请参阅ABAP数字

类型)。

如果系统找到条目,则 不属于表键的

部分的数字字段(请参阅ABAP数字类型)被添加到现有条目的

总和中。 如果找不到

条目,则系统将创建一个新条目。

系统查找条目的方式取决于

类型 内部表的编号:

-标准表:

系统为

表创建临时哈希管理以查找条目。 这意味着找到它们所需的运行时

不取决于

表条目的数量。 该管理是临时的,因为它会被诸如DELETE,INSERT,MODIFY或

SORT之类的操作使

无效。 然后,后续的COLLECT将不再与表的大小无关,因为系统必须使用线性

搜索来查找条目。 因此,您只能

使用COLLECT填充标准表。

-排序表:

系统使用二进制搜索来查找条目。

表的数量

条目和搜索时间之间是对数关系。

-哈希表:

使用

表的内部哈希管理来查找记录。 由于(与标准表不同),即使在表修改操作之后,此

仍保持完整,因此

的搜索时间始终与表项的数量无关。

对于标准表和SORTED TABLE,系统字段

SY-TABIX包含APPEND之后现有或新添加的

表条目的编号。 对于HASHED TABLE,将SY-TABIX

设置为0。

注释1. COLLECT允许您创建唯一的或汇总的

数据集,您应该 仅在必要时使用它。

如果这两个特征都不是必需的,或者在应用程序中表的性质

表示它是

不可能发生重复的条目,您应该使用

INSERT [wa INTO] TABLE Itab而不是COLLECT。 如果您

需要表唯一或汇总,则COLLECT是实现表的最有效方法。

2.如果您将COLLECT与 工作区,工作区必须与内部表的线型兼容。

3.如果使用COLLECT编辑标准表,则只能

>

使用COLLECT或MODIFY ... TRANSPORTING f1 f2 ...

语句(其中f1,f2,...都不在键中)

热情的盛宴)。 只有这样,您才能确定:

-内部表实际上是唯一的或汇总的

-COLLECT有效地运行。 检查数据集

是否已经包含具有相同键的条目,并具有

常量

搜索时间(哈希过程)。

如果您使用任何其他表修改语句,

检查数据集中具有相同键的条目只能

使用线性搜索运行(并且将因此

>

更长)。 您可以使用功能模块

ABL_TABLE_HASH_STATE来测试COLLECT对于给定的标准表是否具有恒定的或线性的搜索时间。

汇总销售额示例 按公司分类:

类型:公司开始,

名称(20),类型C,

销售类型I,

公司。

数据:COMP类型公司,

具有唯一键名的公司COMPTAB类型哈希表

COMP-NAME ="鸭子"。 COMP-SALES =10。将COMP收集到

COMPTAB中。

COMP-NAME ='Tiger'。 COMP-SALES =20。将COMP收集到

COMPTAB中。

COMP-NAME ='Duck'。 COMP-SALES =30。将COMP收集到

COMPTAB中。

表COMPTAB现在具有以下内容:

名称销售

鸭子 40

Tiger 20

添加...按f排序

效果COLLECT ...按f排序已过时,不再应该

已使用。 它仅适用于标准表,并具有与APPEND ... SORTED BY f相同的功能

,您应该改用

。 (另请参见过时的语句。)

注意性能:

1.在使用带有标题行的内部表时,避免不必要地分配给标题行。 尽可能使用具有明确工作区域的

语句。

例如," APPEND wa TO itab"。 大约是" itab = wa。APPEND itab"的两倍。

COLLECT和INSERT也是如此。

2. COLLECT的运行时间随表键

的宽度和数字字段数量的增加而增加。

的内容求和。

注意运行时错误:

-COLLECT_OVERFLOW:

加法期间

>

-COLLECT_OVERFLOW_TYPE_P:在添加

期间,P型字段溢出。

-TABLE_COLLECT_CHAR_IN_FUNCTION:在非数字

字段上收集。

奖励如果有用。

致谢

-

Sasidhar Reddy Matli。

5楼-- · 2020-09-07 15:55

通过这个简单的程序。

类型:公司开始时,

NAME(20)C型,

销售类型I,

公司结尾。

数据:COMP TYPE COMPANY

公司的混合类型哈希表

具有唯一键名。

COMP-NAME ='Duck'。 COMP-SALES =10。将COMP收集到COMPTAB中。

COMP-NAME ="老虎"。 COMP-SALES =20。将COMP收集到COMPTAB中。

COMP-NAME ='Duck'。 COMP-SALES =30。将COMP收集到COMPTAB中。

表COMPTAB现在具有以下内容:

NAME | 销售

-


鸭| 40

老虎| 20

在您的程序中使用collect VBBE-werks。

代楠1984
6楼-- · 2020-09-07 15:55

嗨,请注意,您在我的理解上犯了一个小错误,这就是为什么您无法通过collect获取数据


这是重新改正的代码,就像您感到满意一样。


< p>类型:ST_VBBE的开始,
MATNR类型VBBE-MATNR,
WERKS类型VBBE-WERKS,
OMENG类型VBBE-OMENG,
ST_VBBE的结尾。
数据:IT_VBBE类型表 ST_VBBE的类型,
WA_VBBE的类型ST_VBBE,
it_vbbe_f的st_vbbe的类型表,
WA_VBBE_F的ST_VBBE的类型。
开始选择。 最多500行。
断点。
将IT_VBBE放入WA_VBBE。
将WA_VBBE收集到IT_VBBE_f。
ENDLOOP。


我希望这能解决您的查询。

谢谢。



一周热门 更多>