‎2007 Jun 13 11:29 AM
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!!
‎2007 Jun 13 12:20 PM
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
‎2007 Jun 13 11:33 AM
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
‎2007 Jun 13 11:34 AM
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.
‎2007 Jun 13 11:35 AM
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
‎2007 Jun 13 11:35 AM
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
‎2007 Jun 13 12:20 PM
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