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

Select-options problem

Former Member
0 Likes
709

hello all,

i have a field MATNR in SELECT-OPTIONS but without passing it in query i selected the data in itab.

after getting data in itab now i want if user put the value in selection-screen then it must show only those selected values in output, so i did coding like..

code:

LOOP AT ITAB.

IF MATNR-LOW NE ''.

IF ITAB-MATNR NE MATNR-LOW.

DELETE ITAB.

CLEAR ITAB.

CONTINUE.

ENDIF.

ENDIF.

endloop.

it is working for single value, but when i give 15 or 20 values then again its showing for single value.

can anyone please help me?

regards saurabh.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
688

Hi Saurab,

Check the below code.


TABLES : MARA.
DATA : BEGIN OF T_MARA OCCURS 0,
        MATNR TYPE MARA-MATNR,
        MTART TYPE MARA-MTART,
        NAME(5),
       END OF T_MARA.
SELECT-OPTIONS : S_MATNR FOR MARA-MATNR.

SELECT MATNR
       MTART FROM MARA INTO TABLE T_MARA
             UP TO 200 ROWS.
IF NOT S_MATNR[] IS INITIAL.
  LOOP AT T_MARA.
    IF T_MARA-MATNR IN S_MATNR[].
      DELETE T_MARA INDEX SY-TABIX.
    ENDIF.
  ENDLOOP.
ENDIF.

7 REPLIES 7
Read only

Former Member
0 Likes
688

u can pass the directly in select query like where matnr = MATNR-LOW . if you want any internal calulations you need to use seperate internal table and query with full data.

Read only

Former Member
0 Likes
688

Hi,

when ever you use select option, you have to use IN operator for that it will work like bwlow code, i hope you requirement will meet.

LOOP AT ITAB.

IF ITAB-MATNR IN MATNR.

DELETE ITAB.

CLEAR ITAB.

CONTINUE.

ENDIF.

endloop.

Read only

0 Likes
688

Use :: Delete ITAB where MATNR NOT IN MATNR.

Read only

SuhaSaha
Product and Topic Expert
Product and Topic Expert
0 Likes
688

Hello,

Plz change ur code as follows:


LOOP AT ITAB.
* IF MATNR-LOW NE ''. 
* IF ITAB-MATNR NE MATNR-LOW.
IF MATNR IS NOT INITIAL.
  IF ITAB-MATNR NOT IN MATNR.
    DELETE ITAB.
    CLEAR ITAB.
    CONTINUE.
  ENDIF.
ENDIF.
ENDLOOP.

Hope this is clear.

BR,

Suhas

Edited by: Suhas Saha on Dec 16, 2008 10:09 AM

Edited by: Suhas Saha on Dec 16, 2008 10:10 AM

Read only

Former Member
0 Likes
689

Hi Saurab,

Check the below code.


TABLES : MARA.
DATA : BEGIN OF T_MARA OCCURS 0,
        MATNR TYPE MARA-MATNR,
        MTART TYPE MARA-MTART,
        NAME(5),
       END OF T_MARA.
SELECT-OPTIONS : S_MATNR FOR MARA-MATNR.

SELECT MATNR
       MTART FROM MARA INTO TABLE T_MARA
             UP TO 200 ROWS.
IF NOT S_MATNR[] IS INITIAL.
  LOOP AT T_MARA.
    IF T_MARA-MATNR IN S_MATNR[].
      DELETE T_MARA INDEX SY-TABIX.
    ENDIF.
  ENDLOOP.
ENDIF.

Read only

Former Member
0 Likes
688

Hi,

You can use IN and NOT IN statement instead of NE.

Try it.

Regards,

Chris Gu

Read only

Former Member
0 Likes
688

Hi Saurabh,

You can directly code as below:

Delete ITAB where matnr not in MATNR.

Regards,

Zafar Ali