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

table

Former Member
0 Likes
595

Hello gurus,

I have an internal table with following fields.

matnr -


werks-----lgort

-


A--


P--


M

A--


Q--


M

A--


Q--


N

A--


Q--


O

B--


P--


M

B--


P--


N

B--


Q--


M

i want 2 delete records which have only one lgort associated with particular matnr and werks.

in this example :

i want 2 delete 2 records .....Can anyone tell me logic....

A--


P--


M

B--


Q--


M

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
520

This works



DATA:
  BEGIN OF inrec,
    matnr    TYPE c,
    werks    TYPE c,
    igort    TYPE c,
  END OF inrec,
  it_in LIKE STANDARD TABLE OF inrec.
DATA:
  BEGIN OF sumrec,
    matnr    TYPE c,
    werks    TYPE c,
    cnt      TYPE i,
  END OF sumrec,
  it_sum LIKE STANDARD TABLE OF sumrec.

inrec-matnr = 'A'.
inrec-werks = 'P'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'N'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'O'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'P'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'P'.
inrec-igort = 'N'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'Q'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

LOOP AT it_in INTO inrec.
  sumrec-matnr = inrec-matnr.
  sumrec-werks = inrec-werks.
  sumrec-cnt   = 1.
  COLLECT sumrec INTO it_sum.
ENDLOOP.

LOOP AT it_sum INTO sumrec
  WHERE cnt = 1.
  write:/ 'Deleted', sumrec-matnr, sumrec-werks.
  DELETE it_in WHERE matnr = sumrec-matnr
                 AND werks = sumrec-werks.
ENDLOOP.

loop at it_in into inrec.
  write:/ inrec.
endloop.

Output


Deleted A P      
Deleted B Q      
AQM              
AQN              
AQO              
BPM              
BPN              

3 REPLIES 3
Read only

Former Member
0 Likes
520

loop itab into wa

read table itab where matnr = wa-matnr and

werks = wa-werks and

lgort ne wa-lgort.

if sy-subrc ne 0.

delete record from itab by using index.

endif.

endloop

Read only

0 Likes
520

that is not working .can u tell any other logic and specify clearly....

Read only

Former Member
0 Likes
521

This works



DATA:
  BEGIN OF inrec,
    matnr    TYPE c,
    werks    TYPE c,
    igort    TYPE c,
  END OF inrec,
  it_in LIKE STANDARD TABLE OF inrec.
DATA:
  BEGIN OF sumrec,
    matnr    TYPE c,
    werks    TYPE c,
    cnt      TYPE i,
  END OF sumrec,
  it_sum LIKE STANDARD TABLE OF sumrec.

inrec-matnr = 'A'.
inrec-werks = 'P'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'N'.
APPEND inrec TO it_in.

inrec-matnr = 'A'.
inrec-werks = 'Q'.
inrec-igort = 'O'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'P'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'P'.
inrec-igort = 'N'.
APPEND inrec TO it_in.

inrec-matnr = 'B'.
inrec-werks = 'Q'.
inrec-igort = 'M'.
APPEND inrec TO it_in.

LOOP AT it_in INTO inrec.
  sumrec-matnr = inrec-matnr.
  sumrec-werks = inrec-werks.
  sumrec-cnt   = 1.
  COLLECT sumrec INTO it_sum.
ENDLOOP.

LOOP AT it_sum INTO sumrec
  WHERE cnt = 1.
  write:/ 'Deleted', sumrec-matnr, sumrec-werks.
  DELETE it_in WHERE matnr = sumrec-matnr
                 AND werks = sumrec-werks.
ENDLOOP.

loop at it_in into inrec.
  write:/ inrec.
endloop.

Output


Deleted A P      
Deleted B Q      
AQM              
AQN              
AQO              
BPM              
BPN