ABAP 7.40: Rangos

Administrador mayo 28, 2022


Dentro de las posibilidades que tenemos en las nuevas herramientras para programar en ABAP, existe la posibilidad de completar tablas o rangos de una manera muy eficiente.

He utilizado estas dos maneras que han servido bastante para el uso que se le ha querido dar.

Opción 1:

Primero definimos el rango:

TYPES: lty_koart TYPE RANGE OF koart.
DATA: lr_koart TYPE lty_koart.

Luego, creamos un DEFINE en el código (que es similar a una macro):

  DEFINE range_koart.
    lr_koart = VALUE lty_koart(
                BASE lr_koart (
                  sign = ‘I’
                  option = ‘EQ’
                  low = &1
                )
              ).
  END-OF-DEFINITION.

Y para completar, llamamos a la macro y le pasamos los parámetros en &1:

range_koart: ‘S’, ‘D’.

El output es el siguiente:

Como trabaja? Primero lo que hacemos es marcar cual va a ser la tabla a ser completada (o rango), luego le definimos el VALUE (que en todos los casos, el valor es el tipo del rango a completar), y luego, el valor BASE, que no es otro que el rango mismo. Dentro de los últimos paréntesis, le decimos que campos de la estructura se van a completar y con que valores: hay dos que son una constante, y uno que es un parámetro de la macro.

Opción 2:

Para este caso, vamos a tomar, como ejemplo, la obtención de datos de una tabla de parámetros, como es la TVARVC:

Si quueremos contruir un rango deste esta tabla, podemos hacer lo siguientes:

    lr_blart = VALUE lty_blart(
            FOR <lfs_tvarvc> IN lt_tvarvc
            ( LINES OF COND #(
                  WHEN <lfs_tvarvc>-name = ‘ZFI_IIGG_BLART’
                  THEN VALUE #( ( sign = <lfs_tvarvc>-sign
                                  option = <lfs_tvarvc>-opti
                                  low = <lfs_tvarvc>-low
                                  high = <lfs_tvarvc>-high ) ) ) ) ).

Como hicimos en el paso uno, primero tenemos que definir el tipo de rango.

En este caso en particular, luego de marcar cual va a ser la tabla a llenar, le decimos que lo vamos a hacer desde otra tabla ya existente, que en este caso, es la tabla interna lt_tvarvc. La sentencia FOR crea dinámicamente un Field-Symbol (o una workarea, si así lo quisieran), se le define bajo que condición se va a completar la tabla (con la sentencia WHEN) y luego, con que valores se van a completar los campos del rango correspondiente.

El output es el siguiente:


Temas