Performance Select-endselect

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • acontreras
    Junior Member
    • oct
    • 16

    #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.
  • zonanet
    Senior Member
    • mar
    • 195

    #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

    Comentario

    • acontreras
      Junior Member
      • oct
      • 16

      #3
      Probando

      Gracias compañero por la pronta respuesta, voy a probar y te cuento

      Comentario

      • acontreras
        Junior Member
        • oct
        • 16

        #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

        Comentario

        • acontreras
          Junior Member
          • oct
          • 16

          #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

          Comentario

          • zonanet
            Senior Member
            • mar
            • 195

            #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

            Comentario

            Trabajando...