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.
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.