‎2009 Oct 12 5:34 AM
Hello All,
i am creating RFC enabled function module with 2 input parameters as banfn and vbeln
i have defined them in import paramaters as
IMPORT
P_M_BANFN_LOW TYPE BAPIEBAN-PREQ_NO
P_M_BANFN_HIGH TYPE BAPIEBAN-PREQ_NO
P_M_VBELN_LOW TYPE BAPIEBKN-SD_DOC
P_M_VBELN_HIGH TYPE BAPIEBKN-SD_DOC
user can enter two values or any of the 1 value or values in ranges..it shd work like select-options.
now in source code i have defined...
tables : eban,ebkn.
types : BEGIN OF ITAB ,
vbeln LIKE EBKN-vbeln,
banfn LIKE EBAN-banfn,
bnfpo like eban-bnfpo,
end of itab.
DATA: ITAB_MSGPF TYPE STANDARD TABLE OF ITAB WITH HEADER LINE.
‎2009 Oct 12 5:42 AM
Hi,
Refer:
Declare tow ranges in the SOURCE CODE area as:-
RANGES : r_banfn FOR eban-banfn,
r_vbeln FOR vbak-vbeln.
To populate the range for these two use code:-
IF NOT p_m_banfn_low IS INITIAL.
IF NOT p_m_banfn_high IS INITIAL.
r_banfn-sign = 'I'.
r_banfn-option = 'BT'.
r_banfn-low = p_m_banfn_low.
r_banfn-high = p_m_banfn_high.
APPEND r_banfn.
CLEAR r_banfn.
ELSE.
r_banfn-sign = 'I'.
r_banfn-option = 'EQ'.
r_banfn-low = p_m_banfn_low.
APPEND r_banfn.
CLEAR r_banfn.
ENDIF.
ENDIF.
IF NOT p_m_vbeln_low IS INITIAL.
IF NOT p_m_vbeln_high IS INITIAL.
r_vbeln-sign = 'I'.
r_vbeln-option = 'BT'.
r_vbeln-low = p_m_vbeln_low.
r_vbeln-high = p_m_vbeln_high.
APPEND r_vbeln.
CLEAR r_vbeln.
ELSE.
r_vbeln-sign = 'I'.
r_vbeln-option = 'EQ'.
r_vbeln-low = p_m_vbeln_low.
APPEND r_vbeln.
CLEAR r_vbeln.
ENDIF.
ENDIF.
Now use these two ranges for you select query.
Hope this helps you.
Regards,
Geeta
‎2009 Oct 12 5:35 AM
(continued source code)
ranges : banfn1 FOR eban-banfn.
if p_m_banfn_low is not initial and p_m_banfn_high is not initial.
banfn1-sign = 'I'.
banfn1-option = 'BT'.
banfn1-LOW = p_m_banfn_low.
banfn1-high = p_m_banfn_high.
append banfn1.
else.
banfn1-sign = 'I'.
banfn1-option = 'CP'.
banfn1-LOW = '*'.
append banfn1.
endif.
ranges : vbeln1 FOR eban-banfn.
if p_m_vbeln_low is not initial and p_m_vbeln_high is not initial.
vbeln1-sign = 'I'.
vbeln1-option = 'BT'.
vbeln1-LOW = p_m_vbeln_low.
vbeln1-high = p_m_vbeln_high.
append vbeln1.
else.
vbeln1-sign = 'I'.
vbeln1-option = 'CP'.
vbeln1-LOW = '*'.
append vbeln1.
endif.
select ebanbanfn ebanbnfpo ebkn~vbeln into corresponding fields of table itab_msgpf up to 10 rows
from eban
inner join ebkn on
ebanbanfn = ebknbanfn
where eban~banfn in banfn1.
i am unable to fill my internal table itab_msgpf..what might be reason?
‎2009 Oct 12 5:54 AM
Hi,
Check in the Debug-mode, if BANFN1 is populating with data. Also there may not be any data for the SELECT statement.
‎2009 Oct 12 6:10 AM
Try some thing like this
if p_m_banfn_low is not initial and p_m_banfn_high is not initial.
BT
elseif p_m_banfn_low is not initial and p_m_banfn_high is initial.
EQ
elseif p_m_banfn_low ca '' or p_m_banfn_high ca '' .
CP
endif.
‎2009 Oct 12 6:25 AM
hello geeta...
thnks for u r reply..u r answer was up to the mark and it solved my problem...
thnks keshu and mahesh...
‎2009 Oct 12 6:28 AM
Hey,
Thats good... Please close your thread if you got an answer..
Regards,
Geeta
‎2009 Oct 12 5:42 AM
Hi,
Refer:
Declare tow ranges in the SOURCE CODE area as:-
RANGES : r_banfn FOR eban-banfn,
r_vbeln FOR vbak-vbeln.
To populate the range for these two use code:-
IF NOT p_m_banfn_low IS INITIAL.
IF NOT p_m_banfn_high IS INITIAL.
r_banfn-sign = 'I'.
r_banfn-option = 'BT'.
r_banfn-low = p_m_banfn_low.
r_banfn-high = p_m_banfn_high.
APPEND r_banfn.
CLEAR r_banfn.
ELSE.
r_banfn-sign = 'I'.
r_banfn-option = 'EQ'.
r_banfn-low = p_m_banfn_low.
APPEND r_banfn.
CLEAR r_banfn.
ENDIF.
ENDIF.
IF NOT p_m_vbeln_low IS INITIAL.
IF NOT p_m_vbeln_high IS INITIAL.
r_vbeln-sign = 'I'.
r_vbeln-option = 'BT'.
r_vbeln-low = p_m_vbeln_low.
r_vbeln-high = p_m_vbeln_high.
APPEND r_vbeln.
CLEAR r_vbeln.
ELSE.
r_vbeln-sign = 'I'.
r_vbeln-option = 'EQ'.
r_vbeln-low = p_m_vbeln_low.
APPEND r_vbeln.
CLEAR r_vbeln.
ENDIF.
ENDIF.
Now use these two ranges for you select query.
Hope this helps you.
Regards,
Geeta