Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

how to use collect?

Former Member
0 Kudos

hi all ,

i want to add net value of all the line items which are in the same group

am using collect but am unable to do that.

plz suggest me what to do?

DATA: BEGIN OF del_grp_data occurs 0,

vbeln like vbap-vbeln, " Sales document

grkor like vbap-grkor, " Delivery group

netwr like vbap-netwr, "net value

posnr like vbap-posnr, " Sales document item

End OF del_grp_data.

SELECT vbeln grkor pstyv netwr

posnr

FROM vbap

INTO corresponding fields of TABLE del_grp_data

FOR ALL ENTRIES IN orders_vbeln

WHERE vbeln eq orders_vbeln-vbeln.

loop at del_grp_data.

collect ord_grp_data .

endloop.

Regards,

Amit.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Amit,

declare one more internal table same as del_grp_data.

and grkor should be the first field in ur internal tables.

if orders_vbeln[] is not initial.

SELECT vbeln grkor pstyv netwr

posnr

FROM vbap

INTO corresponding fields of TABLE del_grp_data

FOR ALL ENTRIES IN orders_vbeln

WHERE vbeln eq orders_vbeln-vbeln.

endif.

sort del_grp_data by group (grkor)

loop at del_grp_data.

  • collect del_grp_data into del_grp_data_1.

del_grp_data_1 = del_grp_data.

collect del_grp_data_1.

endloop.

Reward points for all helpful answers.

kiran.M

Message was edited by:

KIRAN KUMAR

3 REPLIES 3

Former Member
0 Kudos

Hi Amit,

declare one more internal table same as del_grp_data.

and grkor should be the first field in ur internal tables.

if orders_vbeln[] is not initial.

SELECT vbeln grkor pstyv netwr

posnr

FROM vbap

INTO corresponding fields of TABLE del_grp_data

FOR ALL ENTRIES IN orders_vbeln

WHERE vbeln eq orders_vbeln-vbeln.

endif.

sort del_grp_data by group (grkor)

loop at del_grp_data.

  • collect del_grp_data into del_grp_data_1.

del_grp_data_1 = del_grp_data.

collect del_grp_data_1.

endloop.

Reward points for all helpful answers.

kiran.M

Message was edited by:

KIRAN KUMAR

Former Member
0 Kudos

Basic form

COLLECT [wa INTO] itab.

Addition:

... SORTED BY f

Cannot Use Short Forms in Line Operations.

Effect

COLLECT allows you to create unique or summarized datasets. The system first tries to find a table entry corresponding to the table key. (See also Defining Keys for Internal Tables). The key values are taken either from the header line of the internal table itab, or from the explicitly-specified work area wa. The line type of itab must be flat - that is, it cannot itself contain any internal tables. All the components that do not belong to the key must be numeric types ( ABAP Numeric Types).

If the system finds an entry, the numeric fields that are not part of the table key (see ABAPNumeric Types) are added to the sum total of the existing entries. If it does not find an entry, the system creates a new entry instead.

The way in which the system finds the entries depends on the type of the internal table:

STANDARD TABLE:

The system creates a temporary hash administration for the table to find the entries. This means that the runtime required to find them does not depend on the number of table entries. The administration is temporary, since it is invalidated by operations like DELETE, INSERT, MODIFY, SORT, ...). A subsequent COLLECT is then no longer independent of the table size, because the system has to use a linear search to find entries. For this reason, you should only use COLLECT to fill standard tables. U

SORTED TABLE:

The system uses a binary search to find the entries. There is a logarithmic relationship between the number of table entries and the search time.

HASHED TABLE:

The system uses the internal hash administration of the table to find records. Since (unlike standard tables), this remains intact even after table modification operations, the search time is always dependent on the number of table entries.

For standard tables and SORTED TABLEs, the system field SY-TABIX contains the number of the existing or newly-added table entry after the APPEND. With HASHED TABLEs, SY-TABIX is set to 0.

Notes

COLLECT allows you to create a unique or summarized dataset, and you should only use it when this is necessary. If neither of these characteristics are required, or where the nature of the table in the application means that it is impossible for duplicate entries to occur, you should use INSERT [wa INTO] TABLE itab instead of COLLECT. If you do need the table to be unique or summarized, COLLECT is the most efficient way to achieve it.

If you use COLLECT with a work area, the work area must be compatible with the line type of the internal table.

If you edit a standard table using COLLECT, you should only use the COLLECT or MODIFY ... TRANSPORTING f1 f2 ... statements (where none of f1, f2, ... may be in the key) enthalten sein). Only then can you be sure that:

-The internal table actually is unique or summarized

-COLLECT runs efficiently. The check whether the dataset

already contains an entry with the same key has a constant

search time (hash procedure).

If you use any other table modification statements, the check for entries in the dataset with the same key can only run using a linear search (and will accordingly take longer). You can use the function module ABL_TABLE_HASH_STATE to test whether the COLLECT has a constant or linear search time for a given standard table.

Example

Summarized sales figures by company:

TYPES: BEGIN OF COMPANY,

NAME(20) TYPE C,

SALES TYPE I,

END OF COMPANY.

DATA: COMP TYPE COMPANY,

COMPTAB TYPE HASHED TABLE OF COMPANY

WITH UNIQUE KEY NAME.

COMP-NAME = 'Duck'. COMP-SALES = 10. COLLECT COMP INTO COMPTAB.

COMP-NAME = 'Tiger'. COMP-SALES = 20. COLLECT COMP INTO COMPTAB.

COMP-NAME = 'Duck'. COMP-SALES = 30. COLLECT COMP INTO COMPTAB.

Table COMPTAB now has the following contents:

NAME | SALES

-


Duck | 40

Tiger | 20

Addition

... SORTED BY f

Effect

COLLECT ... SORTED BY f is obsolete, and should no longer be used. It only applies to standard tables, and has the same function as APPEND ... SORTED BY f, which you should use instead. (See also Obsolete Language Elements).

Note

Performance:

Avoid unnecessary assignments to the header line when using internal tables with a header line. Whenever possible, use statements that have an explicit work area.

For example, " APPEND wa TO itab." is approximately twice as fast as " itab = wa. APPEND itab.". The same applies to COLLECT and INSERT.

The runtime of a COLLECT increases with the width of the table key and the number of numeric fields whose contents are summated.

Note

Non-Catchable Exceptions:

COLLECT_OVERFLOW: Overflow in an integer field during addition

COLLECT_OVERFLOW_TYPE_P: Overflow in a type P field during addition.

TABLE_COLLECT_CHAR_IN_FUNCTION: COLLECT on a non-numeric field.

Related

APPEND, WRITE ... TO, MODIFY, INSERT

Additional help

Inserting SummarizedTable Lines

Former Member
0 Kudos

Hi amit,

DATA: BEGIN OF del_grp_data occurs 0,

vbeln like vbap-vbeln, " Sales document

grkor like vbap-grkor, " Delivery group

netwr like vbap-netwr, "net value

posnr like vbap-posnr, " Sales document item

End OF del_grp_data.

DATA: BEGIN OF ord_grp_data occurs 0,

grkor like vbap-grkor, " Delivery group

netwr like vbap-netwr, "net value

End OF ord_grp_data.

SELECT vbeln grkor pstyv netwr

posnr

FROM vbap

INTO corresponding fields of TABLE del_grp_data

FOR ALL ENTRIES IN orders_vbeln

WHERE vbeln eq orders_vbeln-vbeln.

loop at del_grp_data.

ord_grp_data-grkor = del_grp_data-grkor.

ord_grp_data-netwr = del_grp_data-netwr.

collect ord_grp_data .

endloop.

than look into ord_grp_data.

Regards, Dieter