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 in FM

former_member227140
Active Participant
0 Likes
849

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
809

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

6 REPLIES 6
Read only

former_member227140
Active Participant
0 Likes
809

(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?

Read only

0 Likes
809

Hi,

Check in the Debug-mode, if BANFN1 is populating with data. Also there may not be any data for the SELECT statement.

Read only

0 Likes
809

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.

Read only

0 Likes
809

hello geeta...

thnks for u r reply..u r answer was up to the mark and it solved my problem...

thnks keshu and mahesh...

Read only

0 Likes
809

Hey,

Thats good... Please close your thread if you got an answer..

Regards,

Geeta

Read only

Former Member
0 Likes
810

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