2009 Jan 20 5:40 AM
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
2009 Jan 20 5:45 AM
2009 Jan 20 5:51 AM
2009 Jan 20 8:02 AM
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
2009 Jan 20 8:09 AM
Hi,
Collect statement is for Numeric data type but not on char data type.
Regards,
Jyothi CH.
2009 Jan 20 8:22 AM
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
2009 Jan 20 8:56 AM
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
2009 Jan 20 9:14 AM