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 & internal table

Former Member
0 Likes
915

Hi ,

I want to use the select option data filter with the internal table. Can anybody help me.

My program looks something like ........

Report zSelectOptionWithItab

tables : kna1.

data : itab like kna1 occurs 0 with header line.

select-options : s_kunnr for kna1-kunnr.

start-of-selection.

select kunnr from kna1 into corresponding fields of table itab up to 50 rows.

end-of-selection.

loop at itab where kunnr >= s_kunnr-low or kunnr <= s_kunnr-high.

write : / itab-kunnr.

endloop.

If you could look at the program I have an Internal table named Itab which has data for 50 customers.

In the selection screen I have a customer field. I want to delete all the recorss from ther itab for the given selection.

Consider the test case:

1. s_kunnr-low = 20

s_kunnr-high = 40

option is INCLUDE

This should delete records 20 to 40 from itab.

Test case 2.

s_kunnr-low = 20

s_kunnr-high = 40

option is EXCLUDE

This should delete all records EXCLUDING 20 to 40 from itab.

I will award points for the right answer.

Good luck!!

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
722

LOOP AT so_werks.

IF NOT so_werks-low IS INITIAL.

READ TABLE l_t_werks WITH KEY so_werks-low.

IF sy-subrc <> 0.

IF so_werks-option = 'NE' OR so_werks-sign = 'E'.

SELECT SINGLE werks INTO l_f_werks FROM t001w

WHERE werks = so_werks-low.

ENDIF.

IF sy-subrc <> 0.

SET CURSOR FIELD 'SO_WERKS-LOW'.

MESSAGE e892(m7) WITH so_werks-low.

ENDIF.

ENDIF.

ENDIF.

IF NOT so_werks-high IS INITIAL.

READ TABLE l_t_werks WITH KEY so_werks-high.

IF sy-subrc <> 0.

IF so_werks-option = 'NE' OR so_werks-sign = 'E'.

SELECT SINGLE werks INTO l_f_werks FROM t001w

WHERE werks = so_werks-high.

ENDIF.

IF sy-subrc <> 0.

SET CURSOR FIELD 'SO_WERKS-HIGH'.

MESSAGE e892(m7) WITH so_werks-high.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

Check this code..you can use this as per ur requirement...

Praveen

5 REPLIES 5
Read only

former_member491305
Active Contributor
0 Likes
722

Hi,

Use the following stmt..

Test case1:

Delete itab where kunnr in s_kunnr.

Test case2:

Delete itab where kunnr NOT in s_kunnr.

Regards,

Vigneswaran S

Read only

Former Member
0 Likes
722

Hi,

After select stmt give this:

if flag = 'EXCLUDE'.
delete table itab where kunnr between s_kunnr-low and s_kunnr-high. 
else.
delete table itab where kunnr NOT between s_kunnr-low and s_kunnr-high. 
endif.

Read only

Former Member
0 Likes
722

you can do like this...

loop at s_kunnr.

if s_kinnr-sign = 'I'.

delete itab where kunnr between s_kunnr-low and s_kunnr-high.

elseif s_kunnr-sign = 'E'.

delete itab where kunnr not between s_kunnr-low and s_kunnr-high.

endif.

endloop.

regards

shiba dutta

Read only

santhosh_patil
Contributor
0 Likes
722

Hi,

Try this

for case 1:

<b>delete itab where kunnr in s_kunnr.</b>

for case 2:

<b>delete itab where kunnr not in s_kunnr.</b>

-


Patil

Read only

Former Member
0 Likes
723

LOOP AT so_werks.

IF NOT so_werks-low IS INITIAL.

READ TABLE l_t_werks WITH KEY so_werks-low.

IF sy-subrc <> 0.

IF so_werks-option = 'NE' OR so_werks-sign = 'E'.

SELECT SINGLE werks INTO l_f_werks FROM t001w

WHERE werks = so_werks-low.

ENDIF.

IF sy-subrc <> 0.

SET CURSOR FIELD 'SO_WERKS-LOW'.

MESSAGE e892(m7) WITH so_werks-low.

ENDIF.

ENDIF.

ENDIF.

IF NOT so_werks-high IS INITIAL.

READ TABLE l_t_werks WITH KEY so_werks-high.

IF sy-subrc <> 0.

IF so_werks-option = 'NE' OR so_werks-sign = 'E'.

SELECT SINGLE werks INTO l_f_werks FROM t001w

WHERE werks = so_werks-high.

ENDIF.

IF sy-subrc <> 0.

SET CURSOR FIELD 'SO_WERKS-HIGH'.

MESSAGE e892(m7) WITH so_werks-high.

ENDIF.

ENDIF.

ENDIF.

ENDLOOP.

Check this code..you can use this as per ur requirement...

Praveen