PDA

Ver la Versión Completa : Performance Select-endselect


acontreras
29/01/09, 16:39:13
Miren les cuento que me han solicitado realizar un par de optimizaciones a algunos programas, en una de las partes del documento solicitan lo siguiente:

Se recorre la tabla interna TI_OT (LOOP…..ENDLOOP) y dentro del LOOP…..ENDLOOP hay varios SELECT…..ENDSELECT : Se recomienda seleccionar los registros que se necesitan y almacenarlos en tablas internas. Luego hacer búsquedas sobre la tabla interna, si no existen realizar búsquedas en la Base de Datos.

**-- Recorre la tabla de las OT para recuperar los datos
**-- faltantes.
LOOP AT TI_OT.

**-- Obtiene Puesto de trabajo.
DATA ARBPL LIKE CRHD-arbpl.
Clear ARBPL.

SELECT ARBPL
INTO ARBPL
FROM CRHD INNER JOIN AFVC
ON CRHD~OBJID = AFVC~ARBID
INNER JOIN CAUFV
ON CAUFV~AUFPL = AFVC~AUFPL

WHERE CAUFV~AUFNR = TI_OT-AUFNR AND
AFVC~VORNR = TI_OT-VORNR AND
CRHD~ARBPL IN parbpl1.
.
ENDSELECT.
....
....
....
MOVE ARBPL TO TI_ALV-ARBPL1. "Puesto trabajo
....
....
....

**-- Elimina los registros que no corresponden al
**-- puesto de trabajo seleccionado.
IF NOT PARBPL1 IS INITIAL.
IF ARBPL IS INITIAL.
DELETE TI_ALV Index Sy-tabix.
ENDIF.
ENDIF.

yo realicé lo siguiente, pero al desplegar el report no muestra la columna del del puesto de trabajo(arbpl)

DATA: BEGIN OF TI_ARBPL OCCURS 0,
ARBPL LIKE CRHD-ARBPL.
DATA: END OF TI_ARBPL.

SELECT ARBPL
FROM CRHD INNER JOIN AFVC
ON CRHD~OBJID = AFVC~ARBID
INNER JOIN CAUFV
ON CAUFV~AUFPL = AFVC~AUFPL
APPENDING CORRESPONDING FIELDS OF TABLE TI_ARBPL
WHERE CAUFV~AUFNR = TI_OT-AUFNR AND
AFVC~VORNR = TI_OT-VORNR AND
CRHD~ARBPL IN parbpl1.
...
..
.
MOVE TI_ARBPL-ARBPL TO TI_ALV-ARBPL1. "Puesto trabajo
...
..
.
**-- Elimina los registros que no corresponden al
**-- puesto de trabajo seleccionado.
IF NOT PARBPL1 IS INITIAL.
IF TI_ARBPL-ARBPL IS INITIAL.
DELETE TI_ALV Index Sy-tabix.
ENDIF.
ENDIF.

Bueno eso es parte del código donde creo yo puede estar uno de los problemas. Hay otros SELECT/END-SELECT pero resolviendo este yo creo me ayudarían mucho.

zonanet
29/01/09, 17:32:39
Creo que no te muestra el campo ARBPL porque no lo asignas a tu tabla interna, intenta de esta manera:

SELECT
ARBPL AS ARBPL1
INTO CORRESPONDING FIELDS OF TABLE TI_ALV
FROM CRHD AS A
JOIN AFVC AS B
ON A~OBJID = B~ARBID
JOIN CAUFV AS C
ON C~AUFPL = B~AUFPL
WHERE C~AUFNR = TI_OT-AUFNR
AND B~VORNR = TI_OT-VORNR
AND A~ARBPL IN parbpl1.

Saludos

acontreras
29/01/09, 17:37:05
Gracias compañero por la pronta respuesta, voy a probar y te cuento

acontreras
29/01/09, 18:06:11
Probé lo que me indicaste pero no me resultó, mira otra cosa, al hacer un debug y pararme en esta linea que es donde se supone asigna arbpl a arbpl1(de la tabla de despliegue TI_ALV), llega aqui y no asigna nada:
....
MOVE ARBPL TO TI_ALV-ARBPL1.
....

puede ser esto o en realidad es la select??

gracias compañero por la ayuda

acontreras
29/01/09, 18:22:28
Compañero muchas gracias por la ayuda probandolo con calma me corrió ahora me muestra esa columna habia que cambiar la tabla ti_alv por ti_arbpl de tu código

Muchas gracias de nuevo

zonanet
29/01/09, 18:53:05
Que bien que si funciona, cómo me basé en el código original no me di cuenta que tenías una tabla interna diferente.


Saludos