Contenido
Por lo general, las tablas internas de gran tamaño necesitan un operador de iteración para manejar los volúmenes de datos y reducir las líneas de código.
La expresión de iteración “FOR” está disponible en el lenguaje de programación ABAP, desde la versión ABAP 7.4, con él es posible rellenar una tabla interna a partir de otra, de manera más fácil, dichas tablas pueden tener columnas diferentes y se puede filtrar o limitar lo que se va a transferir mediante la lógica condicional del “FOR” y “VALUE”.
Se utiliza también para crear tablas internas introduciéndolo en operadores como “REDUCE”, “NEW” y “VALUE”. Se crea un bucle en la tabla interna y en cada iteración la fila leída se asigna a una estructura o Field-symbol.
Dentro del iterador “FOR” podemos usar las siguientes expresiones:
- “UNTIL” o “WHILE”: Se utiliza en iteraciones condicionales, con ellas se crean iterativamente los resultados de cualquier tipo de datos usando REDUCE o para crear filas de tablas internas con “NEW” o “VALUE”. Se definen los pasos de cada iteración según sea necesario.
- “IN”: Se utiliza para iteraciones de tabla. Con esta expresión se evalúa una tabla interna existente, para rellenar el contenido de otra, bien sea realizando reducciones de tabla usando “REDUCE”, en donde se crea el contenido de un objeto de datos, evaluando una o más tablas internas, esto generalmente reduce el contenido de una tabla interna a un objeto de datos menos complejo; o creando el contenido de una tabla interna evaluando una o más tablas mediante iteraciones, dentro de operadores como “NEW” o “VALUE”.
Veamos un ejemplo,
Desde un programa ejecutable en Eclipse, creamos un tipo local llamado “LTY_FLIGHTS” en este asignaremos los campos que se muestran a continuación, cada campo con su respectivo elemento de datos:
LTY_FLIGHTS:
IDUSER | AIRCODE | FLIGHTNUM | KEY | SEAT | FLIGHTDATE | PRICE |
Ahora declaramos dos tablas internas del tipo local que hemo creado, una tipo estándar y otra ordenada, esta última con clave única por el campo “IDUSER”.
Usamos el iterador “FOR” para rellenar todos los campos de la primer la tabla interna de tipo estándar, en este caso usamos la expresión “UNTIL” y definimos un contador.
De nuevo usamos VALUE junto con FOR, para llenar de registros la segunda tabla interna tipo SORTED/Ordenada, en base a la tabla estándar.
También añadimos un filtro mediante “WHERE” para tomar los registros con el campo “FLIGHTNUM” mayor al valor 0012. Adicional, duplicamos el campo “PRICE” para esta tabla interna.
Añadimos a nuestro código los métodos “WRITE” y “DISPLAY” de la clase “CL_DEMO_OUTPUT=>” para ver los resultados en la salida.
Activamos y ejecutamos para ver el contenido de las tablas internas.
Una expresión con el operador de reducción “REDUCE” crea un resultado de un tipo de datos especificado usando el tipo de una o más expresiones de condición.
Con “REDUCE” es posible hacer una operación matemática agrupando por los elementos de una determinada tabla, por ejemplo. Es decir, en lugar de hacer un “LOOP” dentro de “LOOP” entre dos tablas, puede usar “REDUCE” para acceder directamente a los elementos que necesita leer.
Al indicar el tipo, se pueden especificar los siguientes casos:
- Un tipo de datos no genérico
- El carácter #, con este se realiza una inferencia de tipo para el parámetro. Se utiliza cuando el tipo de datos requerido en una posición es único y completamente conocido.
Y si el tipo de operando no se conoce por completo, se toma el tipo de la primera declaración después de INIT.
Dentro de la expresión REDUCE, se deben especificar algunos parámetros y argumentos:
- Con “INIT” podemos asignar n declaraciones, esto crea variables locales o símbolos de campo. Estos solo se pueden usar después de “NEXT”
- A continuación, debe especificarse al menos un iterador FOR, es posibles incluir varias expresiones de iteración consecutivas. Dentro de esta iteración podemos incluir todas las expresiones para condicionar cada bucle, como “UNTIL”, “WHILE”, “THEN” e “IN”.
- Posterior se incluyen las asignaciones después de la palabra clave “NEXT”, estas se ejecutan para cada iteración de la última expresión FOR.
Para ver la implementación del “REDUCE”, continuamos trabajando sobre el programa anterior.
Declaramos en línea una variable que almacenará el valor del resultado de operar el “REDUCE”.
Usamos el campo “PRICE” para sumar todos los valores que contiene la tabla interna y guardarlos en una sola variable.
Agregamos la variable para que se imprima en la salida. Activamos y ejecutamos.
Ahora veamos un ejemplo realizando una lectura a una tabla de base de datos, en este caso a “SFLIGHT”- Tabla estándar de SAP, que almacena datos de vuelos.
Filtramos todos los campos que tengan el valor “EUR” en el campo “CURRENCY”.
Aplicamos el operador “REDUCE” para sumar todos los valores del campo “PRICE” e imprimimos el valor de la variable.
Activamos y ejecutamos en consola.
O podemos imprimir mediante “CL_DEMO_OUTPUT=>”.
Excelente Publicación y explicacion