#1
|
|||
|
|||
Performance Select-endselect
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. |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
Probando
Gracias compañero por la pronta respuesta, voy a probar y te cuento
|
#4
|
|||
|
|||
sigue el problema
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 |
#5
|
|||
|
|||
Gracias
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 |
#6
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|