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

condition as range

Former Member
0 Likes
3,389

I need the partner information for parvw as WE & ZM. So if vbeln = 123 has 2 rows in VBAP, one for WE and the other for ZM, both should be included in itab. Currently only WE is been added. How to change this code. Thanks

    SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
      FROM vbpa
      INNER JOIN adrc
      ON adrc~addrnumber = vbpa~adrnr
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   vbpa~kunnr IN s_kunnr
      AND   vbpa~pernr IN s_pernr
      AND   adrc~country IN s_cntry
      AND ( vbpa~parvw = 'WE' OR vbpa~parvw = 'ZM' ).

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,907
SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
      FROM vbpa
      INNER JOIN adrc
      ON adrc~addrnumber = vbpa~adrnr
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   adrc~country IN s_cntry
      AND   vbpa~parvw IN r_parvw.

The inner join on ADRC is causing me the grief. I am looking for partner function employee responsbile (ZM) and ship to (WE). For ZM it does not have a adrnr. How to resolve this. I tried OUTER JOIN but then I cant include the adrc~country condition

i need to reduce access to VBPA to minimum as it already has over 16 ml records. So I would prefer to execute the query in one SELECT rather than two.

Message was edited by:

Megan Flores

9 REPLIES 9
Read only

Former Member
0 Likes
1,907

Hi,

Your code seems to be ok, if you want to get the details for both WE and ZM.

Or else you can do as below : Declare a range as below and use the code in the initailzation event.

data : gr_parvw for vbpa-parvw..

Initialization.

gr_parvw-option = 'EQ'.

gr_parvw-sign = 'I'.

gr_parvw-low = 'WE'.

gr_parvw-high = 'WE'.

append gr_parvw.

gr_parvw-option = 'EQ'.

gr_parvw-sign = 'I'.

gr_parvw-low = 'ZM'.

gr_parvw-high = 'ZM'.

append gr_parvw.

And use this range in your select statement as below :

SELECT vbpavbeln vbpaparvw vbpapernr vbpakunnr adrc~country

FROM vbpa

INNER JOIN adrc

ON adrcaddrnumber = vbpaadrnr

INTO TABLE i_vbpa

FOR ALL ENTRIES IN i_vbak

WHERE vbpa~vbeln = i_vbak-vbeln

AND vbpa~kunnr IN s_kunnr

AND vbpa~pernr IN s_pernr

AND adrc~country IN s_cntry

AND vbpa~parvw in gr_parvw.

Thanks,

Sri.

Read only

Former Member
0 Likes
1,907

I would put this into a range table that excludes both these values. It would be easier than trying to apply NOT logic here.

Since you are testing for equality on the document number, your SELECT will probably be able to use the index, but I'm not sure about that. You might want to keep this in mind during testing.

Rob

Read only

ferry_lianto
Active Contributor
0 Likes
1,907

Hi,

Your code looks fine assuming meet the condition check.

Please try this.


RANGES: r_parvw for vbpa-parw.

r_parvw-sign = 'I'.
r_parvw-option = 'EQ'.
r_parvw-low = 'WE'.
append r_parvw.

r_parvw-sign = 'I'.
r_parvw-option = 'EQ'.
r_parvw-low = 'ZM'.
append r_parvw.


SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
      FROM vbpa
      INNER JOIN adrc
      ON adrc~addrnumber = vbpa~adrnr
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   vbpa~kunnr IN s_kunnr
      AND   vbpa~pernr IN s_pernr
      AND   adrc~country IN s_cntry
      AND   vbpa~parvw IN r_parvw.

Regards,

Ferry Lianto

Read only

Former Member
0 Likes
1,907

I tried this which is the same as range tbl. I only get values for WE and not ZM

    SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
      FROM vbpa
      INNER JOIN adrc
      ON adrc~addrnumber = vbpa~adrnr
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   vbpa~kunnr IN s_kunnr
      AND   vbpa~pernr IN s_pernr
      AND   adrc~country IN s_cntry
      AND   vbpa~parvw IN ('WE','ZM').

Read only

0 Likes
1,907

Hi,

Try using range as above code by me. I faced this problem once.

thanks,

Sriram Ponna.

Read only

former_member194669
Active Contributor
0 Likes
1,907

Hi,

There is conversion exit behind domain PARVW please check the value you are passing in the select statement.

CONVERSION_EXIT_PARVW_INPUT

CONVERSION_EXIT_PARVW_OUTPUT

a®

Read only

Former Member
0 Likes
1,908
SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
      FROM vbpa
      INNER JOIN adrc
      ON adrc~addrnumber = vbpa~adrnr
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   adrc~country IN s_cntry
      AND   vbpa~parvw IN r_parvw.

The inner join on ADRC is causing me the grief. I am looking for partner function employee responsbile (ZM) and ship to (WE). For ZM it does not have a adrnr. How to resolve this. I tried OUTER JOIN but then I cant include the adrc~country condition

i need to reduce access to VBPA to minimum as it already has over 16 ml records. So I would prefer to execute the query in one SELECT rather than two.

Message was edited by:

Megan Flores

Read only

0 Likes
1,907

Hi,

Make it this way. due to you don't have proper key to join.


SELECT vbeln parvw pernr kunnr 
      FROM vbpa
      INTO TABLE i_vbpa
      FOR ALL ENTRIES IN i_vbak
      WHERE vbpa~vbeln = i_vbak-vbeln
      AND   vbpa~parvw IN r_parvw.

i_vbpa_1[] = i_vbpa[].
sort i_vbpa_1 by adrnr.
delete adjacent duplicates comparing adrnr.
if not i_vbpa_1[] is initial.
  SELECT addrnumber country
      FROM adrc
      INTO TABLE i_adrc
      FOR ALL ENTRIES IN i_vbpa-1
      WHERE addrnumber eq i_vbpa_1-adrnr
      AND   adrc~country IN s_cntry.
endif.

loop at i_vbpa.
  read i_adrc  ..........
  modify country <<<<<<<
endloop.


a®

Read only

Former Member
0 Likes
1,907

Megan - maybe I'm missing something, but is this what you are looking for:

tables vbpa.

ranges: r_parvw for vbpa-parvw.

MOVE 'EQ' TO r_parvw-option.
MOVE 'E'  TO r_parvw-sign.         "<================== note

MOVE 'WE' TO r_parvw-low.
append r_parvw.

MOVE 'ZM' TO r_parvw-low.
append r_parvw.

SELECT vbpa~vbeln vbpa~parvw vbpa~pernr vbpa~kunnr adrc~country
  FROM vbpa
  INNER JOIN adrc
  ON adrc~addrnumber = vbpa~adrnr
  INTO TABLE i_vbpa
  FOR ALL ENTRIES IN i_vbak
  WHERE vbpa~vbeln = i_vbak-vbeln
  AND   vbpa~kunnr IN s_kunnr
  AND   vbpa~pernr IN s_pernr
  AND   adrc~country IN s_cntry
  AND   vbpa~parvw in r_parv.             "<=========== note

Rob