FOR y LOOP en ABAP: tablas internas con ejemplos

FOR y LOOP para tablas internas

FOR y LOOP en ABAP resuelven necesidades parecidas, pero las expresiones modernas permiten transformar tablas internas de una forma más declarativa. Aquí verás cómo elegir entre ambos enfoques con ejemplos de iteradores, LET y bucles anidados.

Contenido

1.     Iterador FOR para tablas internas

2.     FOR con expresión LET

3.     FOR de forma anidada

1. Iterador FOR para tablas internas

Desde la versión de ABAP 7.40 se introdujo al lenguaje de programación el uso del operador de iteración “FOR”.

Comencemos trabajando con el iterador FOR para transferir datos de una tabla interna a otra.

Creamos un programa ejecutable en SAP GUI mediante la transacción “SE38” o Eclipse.

Lo primero que realizamos es la declaración de un tipo local, que contenga 4 campos y declaramos una tabla interna de tipo estándar utilizando este tipo local:

FOR y LOOP en ABAP: tablas internas con ejemplos 1

Realizamos la lectura en base de datos a dos tablas demo del estándar de SAP: “SFLIGHT” y “SCARR”.

FOR y LOOP en ABAP: tablas internas con ejemplos 2

Ya con los datos en tiempo de ejecución dentro de las tablas internas, utilizamos el operador FOR para llenar de datos la tabla interna “LT_FLIGHT2”.

La utilización de la variable “LV_INDEX” es opcional, esta la usamos para almacenar el índice en donde se encuentran los registros que cumple con las condiciones establecidas.

En el iterador “FOR” asignamos el valor de cada campo de la tabla interna.

NUM = Corresponde a la variable que almacena el índice “LV_INDEX”

CARRNAME = Realizamos un “READ TABLE” sobre la tabla interna “LT_SCARR1”.

CONNID = Corresponde al campo “CONNID” de la estructura “LS_FLIGHT1”.

FLDATE = Corresponde al campo “FLDATE” de la estructura “LS_FLIGHT1”.

FOR y LOOP en ABAP: tablas internas con ejemplos 3

Activamos y ejecutamos:

FOR y LOOP en ABAP: tablas internas con ejemplos 4

De esta manera, llenamos de datos la tabla interna “LT_FLIGHTS2”, utilizando el iterador “FOR” y el contenido de otras dos tablas internas.

De forma comparativa, este FOR, es otra forma que ha implementado ABAP desde la versión 7.4, pero podríamos realizar la misma operación utilizando el iterador “LOOP”:

FOR y LOOP en ABAP: tablas internas con ejemplos 5

Obtendríamos los mismos resultados:

FOR y LOOP en ABAP: tablas internas con ejemplos 6

La ventaja de utilizar el iterador “FOR”, para esta clase de operaciones, es que podemos utilizar adicionalmente, diferentes operadores dentro de la misma instrucción, también, aplicamos un código más limpio y claro.

1. FOR con expresión LET

Como lo mencionamos anteriormente, con el iterador “FOR”, podemos utilizar múltiples expresiones u operadores, como por ejemplo “LET”, que la utilizamos para definir variables y asignarlas a los campos de la tabla que recibirá los datos en tiempo de ejecución. Lo aplicamos de la siguiente manera:

FOR y LOOP en ABAP: tablas internas con ejemplos 7

En este ejercicio estamos filtrando los resultados por el campo “CARRID” y “CONNID”. Aplicamos también la sentencia “LET” para guardar en una variable el resultado del “READ TABLE” realizado sobre la tabla interna “LT_SCARR1”.

De esta manera, llenamos todos los campos de la tabla interna “LT_FLIGHTS2”.

En la ejecución obtendríamos los siguientes resultados:

FOR y LOOP en ABAP: tablas internas con ejemplos 8

El resultado del campo “NUM” es según la posición de donde haya encontrado el registro.

1. FOR de forma anidada

Con el iterador “FOR” también podemos realizar varias anidaciones, como con “LOOP”, en otras palabras, una iteración dentro de otra iteración.

Esto lo realizaríamos de la siguiente manera:

FOR y LOOP en ABAP: tablas internas con ejemplos 9

En esta última utilización del “FOR” de forma anidada, rellenamos la tabla interna iterando la tabla “LR_SCARR1” y luego basados en estos resultados, iteramos la segunda tabla “LT_FLIGHTS1”, filtrando por el campo “CARRID”.

Luego accedemos a cada uno de los campos y les asignamos cada valor.

Resultados:

FOR y LOOP en ABAP: tablas internas con ejemplos 10

Preguntas frecuentes

¿Cuándo usar FOR en ABAP?

FOR resulta especialmente útil para construir o transformar tablas internas mediante expresiones, con menos código auxiliar y una intención clara.

¿Cuándo conviene mantener LOOP AT?

LOOP AT es adecuado cuando necesitas lógica procedural, modificaciones paso a paso o una lectura directa para el equipo que mantiene el programa.

6 comentarios de “FOR y LOOP en ABAP: tablas internas con ejemplos

    • Laura dice:

      Hola Claudio,
      Me alegra mucho que te haya ayudado :).
      Claro que sí, puedes explorar nuestro blog https://logaligroup.com/blog/ allí encontrarás artículos de diversos temas. Si tienes algún tema del que quieres que hablemos en artículos, nos lo puedes comentar para tenerlo en cuenta.
      Un saludo.

  1. Karla dice:

    Hola, para el caso que no desee llenar una tabla si no ir sumando los valores de un campo monto en una variable si se cumple una condición, como seria?
    llevo rato buscando y no encuentro me podrías colocar un ejemplo de como seria el código?
    Gracias de antemano,

  2. Laura dice:

    Hola Karla,
    Si deseas sumar los valores de un campo MONTO en una variable mientras recorres una tabla interna y solo si se cumple una condición, puedes hacerlo tanto con el iterador FOR como con el LOOP.

    FOR:
    DATA: lt_tabla TYPE TABLE OF some_structure, » Tabla interna
    lv_total TYPE p DECIMALS 2. » Variable para acumular el monto

    » Inicializamos el acumulador
    lv_total = 0.

    » Recorrer y acumular con FOR
    lv_total = REDUCE p( INIT total = 0
    FOR wa IN lt_tabla
    WHERE ( wa-status = ‘A’ )
    NEXT total = total + wa-monto ).

    » Mostrar el total acumulado
    WRITE: / ‘Total acumulado:’, lv_total.

    LOOP:
    DATA: lt_tabla TYPE TABLE OF some_structure, » Tabla interna
    ls_tabla TYPE some_structure, » Estructura de la tabla interna
    lv_total TYPE p DECIMALS 2. » Variable para acumular el monto

    » Inicializamos el acumulador
    lv_total = 0.

    » Recorrer la tabla con LOOP
    LOOP AT lt_tabla INTO ls_tabla.
    » Verificar la condición (ejemplo: campo STATUS = ‘A’)
    IF ls_tabla-status = ‘A’.
    » Sumar el campo MONTO
    lv_total = lv_total + ls_tabla-monto.
    ENDIF.
    ENDLOOP.

    » Mostrar el total acumulado
    WRITE: / ‘Total acumulado:’, lv_total.

    Espero estos ejemplos te ayuden.

    Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *