es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

bucle ABAP para varias tablas en sincronización

He encontrado algunos problemas al crear programas de carga masiva utilizando ABAP. He recopilado todos los datos en una tabla desde la web hasta la tabla SAP, pero luego, tengo que mover el contenido de estas tablas a 3 tablas diferentes para poder utilizar otras funciones. El problema es que, si hago un bucle en una tabla, las otras no se recorren de forma sincronizada.

TABLES
T_HEADER STRUCTURE  ZCST5000
T_DETAIL STRUCTURE  ZCSS5001
T_TIME STRUCTURE  ZCSS5002

LOOP AT T_HEADER

PERFORM XTY TABLES T_DETAIL
            USING LS_HEADER_TMP

PERFORM ZCC TABLES T_TIME
            USING LS_HEADER_TMP

ENDLOOP

Este es un ejemplo de código. Así que, si hago un bucle en THEADER, solo recorre THEADER y no recorre TDEAIL y TTIME en sincronía. Todos tienen la misma cantidad de filas ya que estas estructuras provienen originalmente de una tabla. Entonces, cuando la fila 1 de THEADER está ejecutando este programa, se debe recoger la fila 1 de TDETAIL y TTIME y THEADER se mueve a la fila 2, entonces se debe recoger la fila 2 de TDETAIL y TTIME. ¿Cómo puedo solucionar esto? 🙁

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una posible manera de manejar este problema es usar un bucle anidado. En este caso, deberías recorrer cada fila de T_HEADER y luego, dentro de cada iteración del bucle, recorrer las filas correspondientes de T_DETAIL y T_TIME utilizando una variable de índice.

    Aquí tienes un ejemplo de código:

    LOOP AT T_HEADER INTO LS_HEADER.
    
      DATA LV_INDEX TYPE SY-TABIX.
    
      READ TABLE T_DETAIL INTO LS_DETAIL INDEX SY-TABIX.
      READ TABLE T_TIME INTO LS_TIME INDEX SY-TABIX.
    
      IF SY-SUBRC = 0.
    
        PERFORM XTY TABLES T_DETAIL
                USING LS_DETAIL.
    
        PERFORM ZCC TABLES T_TIME
                USING LS_TIME.
    
      ENDIF.
    
    ENDLOOP.
    

    En este ejemplo, LV_INDEX se utiliza para llevar el seguimiento del índice actual de T_DETAIL y T_TIME. Dentro del bucle, se utilizan las instrucciones READ TABLE para obtener las filas de las tablas correspondientes en base al índice actual (SY-TABIX). La comprobación SY-SUBRC se utiliza para asegurarse de que se encontró una fila coincidente en la tabla. Si se encuentra una coincidencia, las filas se pasan a las declaraciones de ejecución XTY y ZCC para su procesamiento.

    Al utilizar este enfoque de bucle anidado, deberías ser capaz de recorrer las tres tablas al mismo tiempo y procesar los datos según sea necesario.

Comments are closed.