Application Development and Automation 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: 
Read only

Collect Statement

Former Member
0 Kudos
961

Code tags added by moderator

Hello EXperts,

Plz tell where I m wrong in using COLLECT statement, Its adding both -ve & +ve values

loop at main_table.
call function 'CONVERSION_EXIT_MATN1_OUTPUT'
  exporting
    input              = main_table-matnr
  importing
   output              = main_table-matnr.

 if main_table-shkzg = 'H'.

              
              i_main-mblnr   = main_table-mblnr.
              i_main-mjahr   = main_table-mjahr.
              i_main-zeile   = main_table-zeile.
              i_main-bwart   = main_table-bwart.
              i_main-matnr   = main_table-matnr.
              i_main-werks   = main_table-werks.
              i_main-lgort   = main_table-lgort.
              i_main-lifnr   = main_table-lifnr.
              i_main-shkzg   = main_table-shkzg  .
              i_main-dmbtr   = main_table-dmbtr  * -1.
              i_main-menge   = main_table-menge  * -1.
              i_main-meins   = main_table-meins.
              i_main-ebeln   = main_table-ebeln.
              i_main-ebelp   = main_table-ebelp.
              i_main-ekgrp    = main_table-ekgrp.
              i_main-maktx   = main_table-maktx.
              i_main-name1   = main_table-name1.


 else.

              i_main-mblnr   = main_table-mblnr.
              i_main-mjahr   = main_table-mjahr.
              i_main-zeile   = main_table-zeile.
              i_main-bwart   = main_table-bwart.
              i_main-matnr   = main_table-matnr.
              i_main-werks   = main_table-werks.
              i_main-lgort   = main_table-lgort.
              i_main-lifnr   = main_table-lifnr.
              i_main-shkzg   = main_table-shkzg  .
              i_main-dmbtr   = main_table-dmbtr.
              i_main-menge   = main_table-menge .
              i_main-meins   = main_table-meins.
              i_main-ebeln   = main_table-ebeln.
              i_main-ebelp   = main_table-ebelp.
              i_main-ekgrp    = main_table-ekgrp.
              i_main-maktx   = main_table-maktx.
              i_main-name1   = main_table-name1.

   endif.
     COLLECT I_MAIN.
      CLEAR I_MAIN.

 endloop.

Best Regards,

Aastha

Edited by: Matt on Jan 20, 2009 10:13 AM

7 REPLIES 7
Read only

Former Member
0 Kudos
608

Hi,

Refer below links.

Regards

Md.MahaboobKhan

Read only

Former Member
0 Kudos
608

Try COLLECT i_main INTO i_main.

regards,

Jinson

Read only

Former Member
0 Kudos
608

Hi

A COLLECT statement simply adds the numeric fields if the entry is a duplicate and displays. So it will add +ve and -ve values.

Regards,

Jayanthi.K

Read only

Former Member
0 Kudos
608

Hi,

Collect statement is for Numeric data type but not on char data type.

Regards,

Jyothi CH.

Read only

Former Member
0 Kudos
608

Hi,

Take a look at this example program :


REPORT  z_collect_table                         .

TYPES : BEGIN OF t1,
          col1(20) TYPE c,
          col2 TYPE i,
          col3(4)  TYPE c,
        END OF t1.

DATA gt_tab  TYPE STANDARD TABLE OF t1.
DATA gt_tab_collect TYPE STANDARD TABLE OF t1 WITH KEY col1 col3.

DATA : gwa_tab TYPE t1.

gwa_tab-col1 = 'Sam'.
gwa_tab-col2 = 1000.
gwa_tab-col3 = 'SAP'.
APPEND gwa_tab TO gt_tab.

gwa_tab-col1 = 'Sam'.
gwa_tab-col2 = 1000.
gwa_tab-col3 = 'JAVA'.
APPEND gwa_tab TO gt_tab.

gwa_tab-col1 = 'Sam'.
gwa_tab-col2 = 1000 * -1.
gwa_tab-col3 = 'SAP'.
APPEND gwa_tab TO gt_tab.

gwa_tab-col1 = 'Sam'.
gwa_tab-col2 = 1000.
gwa_tab-col3 = 'JAVA'.
APPEND gwa_tab TO gt_tab.

LOOP AT gt_tab INTO gwa_tab.

  COLLECT gwa_tab INTO gt_tab_collect.

ENDLOOP.

LOOP AT gt_tab_collect INTO gwa_tab.
  WRITE : / gwa_tab-col1,10 gwa_tab-col3, gwa_tab-col2.
ENDLOOP.

*********************************************************
Output :
Sam      SAP           0               " this is the effect of +1000 -1000 after collect.
Sam      JAVA      2.000

Collect statment will add the numeric fields so addition of -ive value and a +ive value will be correct.

example -100 + 200 will give you 100. Are you saying that you are getting 300 instead ?

Edited by: Advait Gode on Jan 20, 2009 9:23 AM

Read only

Former Member
0 Kudos
608

Hi Aastha,

COLLECT statement inserts the contents of a work area wa either as single row into an internal table itab or adds the values of its numeric components to the corresponding values of existing rows with the same key.

COLLECT wa INTO itab

This statement adds up all the numeric content of the wa to the itab data with the same key( type char) even if it is positive or negative.

If no line is found with an identical key, a row is inserted , and filled with the content of wa.

Regards

Madhu

Read only

matt
Active Contributor
0 Kudos
608

Please use tags around any ABAP