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

adding numeric fields based on char(MATKL) field in a itab?

Former Member
0 Likes
692

Hi,

          I have tried using COLLECT STATEMENT to add MATKL WISE which is not working....suggest me which idea would be better...

How can we add based on MATKL,,,cause mblnr & werks etc.. fields are not even to do collect statement? 

loop at itab.

mblnr werks matkl matnr menge

   12    2000   AA     123   50

   13    2000   CC     124   60

  14    1000   DD    125    70

   11    2000   AA     123   50

  14    2000   CC     124   60

   16    1000   DD    125    70

endloop.

ouput:

           mblnr werks matkl matnr menge

           12     2000    AA     123    100

           14     1000    DD     125   140

           13    2000   CC      124     120


Hi,

          I have tried using COLLECT STATEMENT to add MATKL WISE which is not working....suggest me which idea would be better...

How can we add based on MATKL,,,cause mblnr & werks etc.. fields are not even to do collect statement? 

loop at itab.

mblnr werks matkl matnr menge

   12    2000   AA     123   50

   13    2000   CC     124   60

  14    1000   DD    125    70

   11    2000   AA     123   50

  14    2000   CC     124   60

   16    1000   DD    125    70

endloop.

ouput:

           mblnr werks matkl matnr menge

           12     2000    AA     123    100

           14     1000    DD     125   140

           13    2000   CC      124     120


4 REPLIES 4
Read only

Former Member
0 Likes
656

Hi Shree,

The Collect statement works only when the internal table is sorted based on the field you collect.

Put MATKL & numeric fields into another internal table

TYPES : BEGIN OF TY_ADD,

                    MATKL TYPE MARA-MATKL,

                    MENGE TYPE P,

               END OF TY_ADD.    

DATA : IT_ADD TYPE STANDARD TABLE OF TY_ADD,

             WA_ADD TYPE   TY_ADD,

SORT ITAB BY MATKL.

LOOP AT ITAB.

      MOVE ITAB-MATKL TO WA_ADD-MATKL.

      MOVE ITAB-MENGE TO WA_ADD-MENGE.   

      COLLECT WA_ADD INTO IT_ADD.

ENDLOOP.

IT_ADD will have all the collected values based on MATKL.

Let me know if you need additional info on this.

Thanks,

Tooshar Bendale

Read only

Former Member
0 Likes
656

Hi

try this

loop at itab.

a = itab-matkl.

read table itab with key matkl = a.

b = sy-tabix.

if sy-subrc = 0.

delete itab index b.

endif.

endloop.

regards

vaibhav

Read only

former_member282968
Contributor
0 Likes
656

Hi Shree,

Take the combination of werks,matkl and matnr as the key.Check the below code, hope it helps.

DATA:BEGIN OF WA_ITAB,
      MBLNR TYPE MBLNR,
      WERKS TYPE WERKS_D,
      MATKL TYPE MATKL,
      MATNR TYPE MATNR,
      MENGE TYPE MENGE_D,
      END   OF WA_ITAB.

DATA:BEGIN OF WA_ITAB_C,
      WERKS TYPE WERKS_D,
      MATKL TYPE MATKL,
      MATNR TYPE MATNR,
      MENGE TYPE MENGE_D,
      END   OF WA_ITAB_C.

DATA:ITAB   LIKE STANDARD TABLE OF WA_ITAB,
     ITAB_C LIKE SORTED TABLE OF WA_ITAB_C WITH
     UNIQUE KEY WERKS MATKL MATNR,
     ITAB_D LIKE STANDARD TABLE OF WA_ITAB.


WA_ITAB-MBLNR = '12'.
WA_ITAB-WERKS = '2000'.
WA_ITAB-MATKL = 'AA'.
WA_ITAB-MATNR = '123'.
WA_ITAB-MENGE = '50'.
APPEND WA_ITAB TO ITAB.

WA_ITAB-MBLNR = '13'.
WA_ITAB-WERKS = '2000'.
WA_ITAB-MATKL = 'CC'.
WA_ITAB-MATNR = '124'.
WA_ITAB-MENGE = '60'.
APPEND WA_ITAB TO ITAB.

WA_ITAB-MBLNR = '14'.
WA_ITAB-WERKS = '1000'.
WA_ITAB-MATKL = 'DD'.
WA_ITAB-MATNR = '125'.
WA_ITAB-MENGE = '70'.
APPEND WA_ITAB TO ITAB.


WA_ITAB-MBLNR = '11'.
WA_ITAB-WERKS = '2000'.
WA_ITAB-MATKL = 'AA'.
WA_ITAB-MATNR = '123'.
WA_ITAB-MENGE = '50'.
APPEND WA_ITAB TO ITAB.


WA_ITAB-MBLNR = '14'.
WA_ITAB-WERKS = '2000'.
WA_ITAB-MATKL = 'CC'.
WA_ITAB-MATNR = '124'.
WA_ITAB-MENGE = '60'.
APPEND WA_ITAB TO ITAB.

WA_ITAB-MBLNR = '16'.
WA_ITAB-WERKS = '1000'.
WA_ITAB-MATKL = 'DD'.
WA_ITAB-MATNR = '125'.
WA_ITAB-MENGE = '70'.
APPEND WA_ITAB TO ITAB.

LOOP AT ITAB INTO WA_ITAB.
  MOVE-CORRESPONDING WA_ITAB TO WA_ITAB_C.
  COLLECT WA_ITAB_C INTO ITAB_C.
ENDLOOP.


LOOP AT ITAB_C INTO WA_ITAB_C.

  READ TABLE ITAB INTO WA_ITAB
  WITH KEY  WERKS = WA_ITAB_C-WERKS
            MATKL = WA_ITAB_C-MATKL
            MATNR = WA_ITAB_C-MATNR.

  IF SY-SUBRC = 0.
    WA_ITAB-MENGE = WA_ITAB_C-MENGE.
    APPEND WA_ITAB TO ITAB_D.
  ENDIF.

ENDLOOP.


LOOP AT ITAB_D INTO WA_ITAB.
  WRITE:/ WA_ITAB-MBLNR,
          WA_ITAB-WERKS,
          WA_ITAB-MATKL,
          WA_ITAB-MATNR,
          WA_ITAB-MENGE.
ENDLOOP.

With regards,

Read only

0 Likes
656

Hi all,

       I think we need to add based on MATKL.. is there any option we can add keep all fields together. cause already stores all five fields values into a Internal table..

Thanks

Shree.