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

Internal table in where condition

former_member188001
Active Participant
0 Likes
924

Hello friends,

I have an internal table LT_PO populated with data.

I have written the below piece of code and i am getting an error message "The IN operator with LT_PO is neither followed by an internal table nor by a value list.


SELECT ekbe~arewr ekbe~bamng ekbe~belnr ekbe~bewtp ekbe~budat ekbe~buzei
       ekbe~bwart ekbe~dmbtr ekbe~ebeln ekbe~ebelp ekbe~elikz ekbe~ernam
       ekbe~gjahr ekbe~matnr ekbe~menge ekbe~vgabe ekbe~waers ekbe~werks
       ekbe~wrbtr ekko~aedat ekko~bedat ekko~bsart ekko~bstyp ekko~bukrs
       ekko~ebeln ekko~ekgrp ekko~ekorg ekko~ernam ekko~lifnr ekko~loekz
       ekko~waers ekko~zterm ekpo~brtwr ekpo~ebeln ekpo~ebelp ekpo~inco1
       ekpo~inco2 ekpo~infnr ekpo~insmk ekpo~knttp ekpo~ktmng ekpo~lmein
       ekpo~matkl ekpo~matnr ekpo~meins ekpo~netpr ekpo~plifz ekpo~werks
INTO (ekbe-arewr , ekbe-bamng , ekbe-belnr , ekbe-bewtp , ekbe-budat ,
      ekbe-buzei , ekbe-bwart , ekbe-dmbtr , ekbe-ebeln , ekbe-ebelp ,
      ekbe-elikz , ekbe-ernam , ekbe-gjahr , ekbe-matnr , ekbe-menge ,
      ekbe-vgabe , ekbe-waers , ekbe-werks , ekbe-wrbtr , ekko-aedat ,
      ekko-bedat , ekko-bsart , ekko-bstyp , ekko-bukrs , ekko-ebeln ,
      ekko-ekgrp , ekko-ekorg , ekko-ernam , ekko-lifnr , ekko-loekz ,
      ekko-waers , ekko-zterm , ekpo-brtwr , ekpo-ebeln , ekpo-ebelp ,
      ekpo-inco1 , ekpo-inco2 , ekpo-infnr , ekpo-insmk , ekpo-knttp ,
      ekpo-ktmng , ekpo-lmein , ekpo-matkl , ekpo-matnr , ekpo-meins ,
      ekpo-netpr , ekpo-plifz , ekpo-werks )
FROM ( ekbe
       INNER JOIN ekko
       ON ekko~ebeln = ekbe~ebeln
       INNER JOIN ekpo
       ON ekpo~ebeln = ekbe~ebeln
       AND ekpo~ebelp = ekbe~ebelp )
       WHERE ekbe~bewtp IN s_bewtp
         AND ekbe~budat IN s_budat
         AND ekbe~bwart IN s_bwart
         AND ekbe~ebeln IN s_ebeln
         AND ekbe~ebelp IN s_ebelp
         AND ekbe~gjahr IN s_gjahr
         AND ekbe~matnr IN s_matnr
         AND ekbe~vgabe IN s_vgabe
         AND ekbe~werks IN s_werks
         AND ekko~lifnr IN s_lifnr
         AND ekpo~knttp IN s_knttp
         AND ekko~ekorg IN r_ekorg
         AND ekbe~vgabe IN r_vgabe
         AND  ekko~ebeln IN lt_po
         AND ( ekbe~cpudt GT lv_zdate OR
               ekbe~cpudt EQ lv_zdate AND
               ekbe~cputm GT lv_ztime ).

Thanks for your help.

Salil

1 ACCEPTED SOLUTION
Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
865

Are you trying to use FOR ALL ENTRIES, if so this will be better.

<b>check not lt_po[] is initial.

sort lt_po by ebeln.</b>

SELECT ekbearewr ekbebamng ekbebelnr ekbebewtp ekbebudat ekbebuzei

ekbebwart ekbedmbtr ekbeebeln ekbeebelp ekbeelikz ekbeernam

ekbegjahr ekbematnr ekbemenge ekbevgabe ekbewaers ekbewerks

ekbewrbtr ekkoaedat ekkobedat ekkobsart ekkobstyp ekkobukrs

ekkoebeln ekkoekgrp ekkoekorg ekkoernam ekkolifnr ekkoloekz

ekkowaers ekkozterm ekpobrtwr ekpoebeln ekpoebelp ekpoinco1

ekpoinco2 ekpoinfnr ekpoinsmk ekpoknttp ekpoktmng ekpolmein

ekpomatkl ekpomatnr ekpomeins ekponetpr ekpoplifz ekpowerks

INTO (ekbe-arewr , ekbe-bamng , ekbe-belnr , ekbe-bewtp , ekbe-budat ,

ekbe-buzei , ekbe-bwart , ekbe-dmbtr , ekbe-ebeln , ekbe-ebelp ,

ekbe-elikz , ekbe-ernam , ekbe-gjahr , ekbe-matnr , ekbe-menge ,

ekbe-vgabe , ekbe-waers , ekbe-werks , ekbe-wrbtr , ekko-aedat ,

ekko-bedat , ekko-bsart , ekko-bstyp , ekko-bukrs , ekko-ebeln ,

ekko-ekgrp , ekko-ekorg , ekko-ernam , ekko-lifnr , ekko-loekz ,

ekko-waers , ekko-zterm , ekpo-brtwr , ekpo-ebeln , ekpo-ebelp ,

ekpo-inco1 , ekpo-inco2 , ekpo-infnr , ekpo-insmk , ekpo-knttp ,

ekpo-ktmng , ekpo-lmein , ekpo-matkl , ekpo-matnr , ekpo-meins ,

ekpo-netpr , ekpo-plifz , ekpo-werks )

FROM ( ekbe

INNER JOIN ekko

ON ekkoebeln = ekbeebeln

INNER JOIN ekpo

ON ekpoebeln = ekbeebeln

AND ekpoebelp = ekbeebelp )

<b> FOR ALL ENTRIES IN LT_PO

WHERE ekko~ebeln = lt_po-EBELN</b>

and ekbe~bewtp IN s_bewtp

AND ekbe~budat IN s_budat

AND ekbe~bwart IN s_bwart

AND ekbe~ebeln IN s_ebeln

AND ekbe~ebelp IN s_ebelp

AND ekbe~gjahr IN s_gjahr

AND ekbe~matnr IN s_matnr

AND ekbe~vgabe IN s_vgabe

AND ekbe~werks IN s_werks

AND ekko~lifnr IN s_lifnr

AND ekpo~knttp IN s_knttp

AND ekko~ekorg IN r_ekorg

AND ekbe~vgabe IN r_vgabe

<b> AND ( ekbe~cpudt GT lv_zdate OR

( ekbe~cpudt EQ lv_zdate AND

ekbe~cputm GT lv_ztime ) ).</b>

Regards,

RIch Heilman

4 REPLIES 4
Read only

Former Member
0 Likes
865

Hi Salil,

you are comparing a field with internal table.

The correct should be.

ekko~ebeln IN lt_po-ebeln.

Regards

Venkat.

Award me, if helpful.

Read only

Former Member
0 Likes
865

Well, you should be using FOR ALL ENTRIES, not IN, but it might be more efficient to try to add another join to get your PO numbers.

Rob

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
866

Are you trying to use FOR ALL ENTRIES, if so this will be better.

<b>check not lt_po[] is initial.

sort lt_po by ebeln.</b>

SELECT ekbearewr ekbebamng ekbebelnr ekbebewtp ekbebudat ekbebuzei

ekbebwart ekbedmbtr ekbeebeln ekbeebelp ekbeelikz ekbeernam

ekbegjahr ekbematnr ekbemenge ekbevgabe ekbewaers ekbewerks

ekbewrbtr ekkoaedat ekkobedat ekkobsart ekkobstyp ekkobukrs

ekkoebeln ekkoekgrp ekkoekorg ekkoernam ekkolifnr ekkoloekz

ekkowaers ekkozterm ekpobrtwr ekpoebeln ekpoebelp ekpoinco1

ekpoinco2 ekpoinfnr ekpoinsmk ekpoknttp ekpoktmng ekpolmein

ekpomatkl ekpomatnr ekpomeins ekponetpr ekpoplifz ekpowerks

INTO (ekbe-arewr , ekbe-bamng , ekbe-belnr , ekbe-bewtp , ekbe-budat ,

ekbe-buzei , ekbe-bwart , ekbe-dmbtr , ekbe-ebeln , ekbe-ebelp ,

ekbe-elikz , ekbe-ernam , ekbe-gjahr , ekbe-matnr , ekbe-menge ,

ekbe-vgabe , ekbe-waers , ekbe-werks , ekbe-wrbtr , ekko-aedat ,

ekko-bedat , ekko-bsart , ekko-bstyp , ekko-bukrs , ekko-ebeln ,

ekko-ekgrp , ekko-ekorg , ekko-ernam , ekko-lifnr , ekko-loekz ,

ekko-waers , ekko-zterm , ekpo-brtwr , ekpo-ebeln , ekpo-ebelp ,

ekpo-inco1 , ekpo-inco2 , ekpo-infnr , ekpo-insmk , ekpo-knttp ,

ekpo-ktmng , ekpo-lmein , ekpo-matkl , ekpo-matnr , ekpo-meins ,

ekpo-netpr , ekpo-plifz , ekpo-werks )

FROM ( ekbe

INNER JOIN ekko

ON ekkoebeln = ekbeebeln

INNER JOIN ekpo

ON ekpoebeln = ekbeebeln

AND ekpoebelp = ekbeebelp )

<b> FOR ALL ENTRIES IN LT_PO

WHERE ekko~ebeln = lt_po-EBELN</b>

and ekbe~bewtp IN s_bewtp

AND ekbe~budat IN s_budat

AND ekbe~bwart IN s_bwart

AND ekbe~ebeln IN s_ebeln

AND ekbe~ebelp IN s_ebelp

AND ekbe~gjahr IN s_gjahr

AND ekbe~matnr IN s_matnr

AND ekbe~vgabe IN s_vgabe

AND ekbe~werks IN s_werks

AND ekko~lifnr IN s_lifnr

AND ekpo~knttp IN s_knttp

AND ekko~ekorg IN r_ekorg

AND ekbe~vgabe IN r_vgabe

<b> AND ( ekbe~cpudt GT lv_zdate OR

( ekbe~cpudt EQ lv_zdate AND

ekbe~cputm GT lv_ztime ) ).</b>

Regards,

RIch Heilman

Read only

former_member188001
Active Participant
0 Likes
865

Hi Rob / Rich,

Thanks for all the help. The problem got solved.

Regards,

Salil