PDA

Ver la Versión Completa : Problema con Consulta


schrizophrenia
13/11/09, 18:22:18
Hola que tal.
Les comento q yo hago la siguiente consyulta, y me trae los datos correctos pero tarda demasiado alguien sabe como podria agilizarla?
gracias!!!

LOOP AT it_aux_bkpf INTO wa_aux_bkpf.

SELECT belnr bukrs gjahr buzei lifnr dmbtr shkzg budat bldat
FROM bsik
APPENDING CORRESPONDING FIELDS OF TABLE it_bsik
WHERE belnr = wa_aux_bkpf-belnr AND
bukrs = p_bukrs AND
gjahr = p_gjahr AND
buzei = '1' AND
lifnr IN s_lifnr AND
hkont IN s_cuenta.

IF sy-subrc <> 0.

SELECT belnr bukrs gjahr buzei lifnr dmbtr shkzg budat bldat
FROM bsak
APPENDING CORRESPONDING FIELDS OF TABLE it_bsak
WHERE belnr = wa_aux_bkpf-belnr AND
bukrs = p_bukrs AND
gjahr = p_gjahr AND
buzei = '1' AND
lifnr IN s_lifnr AND
hkont IN s_cuenta.


ENDIF.

stormshadow
13/11/09, 18:40:38
claro, por cada iteración estas haciendo una llamada a la base de datos por eso tarda bastante, bueno lo que a mi se me ocurre es que primero saques todos tus datos de la base de datos y los metas a otra ti, ya despues ahora si loopeas y con un field symbol puedes ir metiendo tus datos de una ti a la otra a la que en realidad quieres, o también podrías utilizar un for all entries que creo que sería el más viable, bueno esa es una solución tal vez halla otra más óptima :rolleyes:

schrizophrenia
13/11/09, 18:59:16
Si lo pense con un For all entries, pero tengo dudas...

Xq yo lo q tengo q hacer es: Preguntar por cada Belnr q saco de BKPF si aparece en la BSIK y si no esta buscarlo en la BSAK



Gracias por responder!

Gatini28
13/11/09, 20:59:02
Hola Schrizophrenia,
de hecho que tu consulta demora por la cantidad de conexiones que tienes a la BD, yo te recomiento lo siguiente:

1. Realiza un SELECT..FOR ALL ENTRIES a la tabla BSIK con los datos de la tabla it_aux_bkpf.

2.Realiza un SELECT..FOR ALL ENTRIES a la tabla BSAK con los datos de la tabla it_aux_bkpf.

3. Loopea la tabla it_aux_bkpf y por cada vuelta realiza READ TABLE a las tablas que obtuviste del punto 1 y punto 2.

Con ello habras realizado solo 2 conexion a la BD en lugar de realizar una por cada registro dentro de la TI.

Espero haberte ayudado.

Saludos,
Erick Oré.

ivan888
16/11/09, 11:07:00
Hola,

¿accedes a la BSIK, BSAK con el select-option "s_lifnr" relleno?

En caso de que esté vacio o que tenga un rango de valores muy grande quizá deberías plantearte ir a la tabla BSEG

Saludos.

schrizophrenia
16/11/09, 13:02:24
1ero gracias por responder,
2do, pense hacerlo con la Bseg pero el funcional me dijo q no, Yo solo obedezco! jajajaj
Gracias!