FOR Expresión: Crea tablas internas de forma fácil

¿Alguna vez has tenido que crear una tabla interna a partir de otra, pero aplicando un pequeño cambio en cada línea? ¿O necesitar generar un rango dinámico sin tener que hacer un DO y llenar una tabla paso a paso? Con la expresión FOR todo eso se vuelve mucho más sencillo.

FOR es otro de los operadores de construcción (constructor operators) introducidos en ABAP 7.40, diseñado específicamente para crear tablas internas de forma compacta, legible y eficiente, sin necesidad de usar LOOP, APPEND, INSERT o COLLECT.

¿Qué es el operador FOR?

El operador FOR es una expresión constructora que permite iterar sobre una o varias fuentes de datos (tablas internas, rangos numéricos o grupos) y, en cada iteración, producir una o varias líneas que se incorporan a una tabla interna o que forman parte de una expresión más grande. Se utiliza para leer los datos, no para modificarlos.

La gran ventaja es que FOR convierte un proceso que requería varias líneas (declarar la tabla, hacer un LOOP, ir añadiendo elementos) en una sola expresión declarativa: tú describes qué quieres construir, y el sistema se encarga de cómo iterar.

La forma más básica de usar FOR es así:

DATA(tabla_nueva) = VALUE tipo_de_tabla(
FOR variable IN tabla_vieja
( expresión )
).

Desglosemos cada parte:

Pieza¿Qué significa?
DATA(tabla_nueva)Declaro una variable nueva llamada tabla_nueva
= VALUE tipo( ... )CREA un valor (tabla) del tipo que le digas
FOR variable IN tabla_viejaRECORRE la tabla vieja, y en cada vuelta, la variable toma el valor de la fila actual
( expresión )Por cada vuelta, SE AÑADE esta expresión a la tabla nueva

Para qué sirve y cuándo usarlo

FOR sirve para crear tablas internas de forma rápida. Los casos más comunes son:

Caso de usoExplicación
Crear una tabla a partir de otraDirectamente con VALUE #( FOR wa IN itab ... ).
Generar un rango (por ejemplo, 1 a 10)Con FOR n = 1 UNTIL n > 10.
Filtrar elementos de una tablaAñadiendo WHERE o con un condicional dentro de la expresión.
Transformar cada elementoMuy sencillo: FOR wa IN itab ( wa-campo * 2 ).
Aplanar una tabla anidadaMediante FOR anidados (for dentro de for).
Agrupar y agregar elementosCon FOR GROUPS (aunque puede ser más complejo, a veces mejor usar LOOP AT GROUP).

En general, FOR es ideal para transformaciones rápidas y construcciones de tablas donde la lógica es sencilla y la legibilidad gana. Si necesitas depurar el código línea a línea, un LOOP clásico es más fácil de debuguear, porque FOR no permite puntos de interrupción internos.

Ejemplos prácticos

Construir una tabla numérica simple

Sintaxis vieja:

DATA lt_numbers TYPE TABLE OF i.
DO 10 TIMES.
  APPEND sy-index TO lt_numbers.
ENDDO.

Sintaxis nueva:

DATA(lt_numbers) = VALUE #( FOR i = 1 UNTIL i > 10 ( i ) ).

Filtrar elementos con WHERE

Podemos añadir una condición WHERE directamente en el FOR:

" Tabla original
DATA(lt_original) = VALUE i_table( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ( 6 ) ).

" Solo números pares
DATA(lt_pares) = VALUE i_table(
FOR wa IN lt_original WHERE ( wa MOD 2 = 0 )
( wa )
).
" lt_pares = [2, 4, 6]

Rellenar una tabla a partir de los datos de otra tabla

" Tabla original de productos
DATA(lt_productos) = VALUE ty_producto_table(
( nombre = 'Laptop' precio = 1000 )
( nombre = 'Ratón' precio = 25 )
).

" Tabla con precios con descuento
DATA(lt_ofertas) = VALUE ty_resumen_table(
FOR p IN lt_productos
( nombre = p-nombre
precio_oferta = p-precio * 0.9 )
).

El operador FOR es una herramienta moderna de ABAP que te permite crear tablas internas de forma rápida, limpia y fácil de leer. Para transformaciones simples (mapear, filtrar, aplanar) es perfecto.