PDA

Ver la Versión Completa : Duda con select for all entrie


pancho6102
14/04/15, 18:18:38
Hola buen día amigos del foro.


tengo una duda espero y me puedan ayudar, no se si sea posible hacer un select for all entries pero de la siguiente forma

tengo una tabla de datos que tiene la siguiente informacion

itab-BUKRS
itab-BELNR
itab-GJAHR
itab-ebeln (numero de orden de compra).

con estos datos quiero hacer un for All entries para traerme datos de la BKPF

algo asi:

select
BUKRS
BELNR
GJAHR
BLART
BLDAT
BUDAT
awkey
into Corresponding fields of TABLE it_bkpf
from bkpf
FOR ALL ENTRIES IN itab
where bukrs = itab-bukrs and
belnr = itab-belnr and
GJAHR = itab-GJAHR.

con ello no hay problema, pero si por alguna extraña razon extraña quisiera que el resultado ademas de los campos de la BKPF apareciera tambien el numero de la orden de compras algo asi:

select
BUKRS
BELNR
GJAHR
BLART
BLDAT
BUDAT
awkey
itab-ebeln
into TABLE it_bkpf
from bkpf
FOR ALL ENTRIES IN itab
where bukrs = itab-bukrs and
belnr = itab-belnr and
GJAHR = itab-GJAHR.

no se si se pueda por que me imagino que por cada select que se haga internamente para la tabla del for all entries se puede rescatar el campo ebeln con el que se haga la consulta.

Alguien ha tratado de hacer algo parecido o uso un camino largo y menos extraño :confused:


Saludos.

ballan
15/04/15, 09:36:38
Buenos dias,

No puedes hacer eso.

En tu IT_BKPF tendras que tener un campo para el EBELN y despues del select hacer un:



FIELD-SYMBOLS: <LINEA> LIKE LINE OF IT_BKPF.
DATA: LS_LINEA LIKE LINE OF ITAB.

LOOP AT IT_BKPF ASSIGNING <LINEA>.

READ TABLE ITAB INTO LS_LINEA WITH KEY BUKRS = <LINEA>-BUKRS
BELNR = <LINEA>-BELNR
GJAHR = <LINEA>-GJAHR.

IF SY-SUBRC IS INITIAL.
<LINEA>-EBELN = LS_LINEA-EBELN.
ENDIF.

ENDLOOP.

pancho6102
15/04/15, 20:56:07
Gracias Ballan.
pero son esas dudas que de pronto te surgue el respectivo: ¿ se podra?

si efectivamente lo realice asi usando un loop y el modify aunque me hubiese ahorrado el modify si usara el field symbol como lo muestras en el ejemplo.


Saludos.

ballan
16/04/15, 09:31:46
Desconozco como esta implementado en detalle el FOR ALL ENTRIES, pero me imagino que internamente hara algo asi.

Tu tienes:

SELECT..
FOR ALL ENTRIES IN TABLA
WHERE CAMPO1 = TABLA1-CAMPO1

El compilador coge tu TABLA1 y genera un rango con todos los valores distintos de CAMPO1

Despues coge tu SELECT.. FOR ALL ENTRIES y lo convierte en

SELECT
WHERE CAMPO1 IN RANGO_CAMPO1

Es por eso que no puedes hacer referencia a campos de tu tabla interna, porque el select "real" que se hace no "ve" tu tabla interna.