Con la llegada de ABAP 7.40 aparecieron muchas mejoras de sintaxis que cambiaron completamente la forma de escribir código ABAP. Una de las más útiles y utilizadas es el operador VALUE.
Gracias a VALUE, puedes crear estructuras, tablas internas, rangos e incluso obtener valores de tablas internas en una sola expresión, evitando muchísimo código repetitivo.
¿Qué es VALUE?
VALUE es un operador de construcción de datos que te permite crear cualquier tipo de dato (un número, un texto, una estructura, una tabla interna, un rango) en el mismo lugar donde lo vas a usar, sin necesidad de:
En otras palabras VALUE permite construir datos de forma declarativa y mucho más legible.
La sintaxis básica de VALUE es:
DATA(resultado) = VALUE tipo( ... ).
También puedes usar # para que ABAP infiera automáticamente el tipo:
DATA(resultado) = VALUE #( ... ).
| Pieza | ¿Qué significa? |
|---|---|
DATA(resultado) | Declaro una variable para guardar el resultado |
VALUE tipo | Operador VALUE que construye un dato del tipo indicado |
( ... ) | Dentro va lo que quieres construir (valores, filas, componentes) |
¿Qué puedes construir con VALUE?
Con VALUE puedes crear prácticamente cualquier tipo de dato:
Ejemplos prácticos
Crear tablas internas
Antes:
DATA: lt_users TYPE TABLE OF ty_user,
ls_user TYPE ty_user.
ls_user-id = 1.
ls_user-name = 'Andrea'.
APPEND ls_user TO lt_users.
ls_user-id = 2.
ls_user-name = 'Laura'.
APPEND ls_user TO lt_users.
Con VALUE:
DATA(lt_users) = VALUE ty_t_users(
( id = 1 name = 'Andrea' )
( id = 2 name = 'Laura' )
).
Leer datos de tablas internas
Antes:
READ TABLE t_material_type INTO DATA(ls_mat) WITH KEY matnr = iv_matnr.
IF sy-subrc = 0.
lv_matnr_type = ls_mat-matnr_type.
ENDIF.
Con VALUE:
DATA(lv_matnr_type) = VALUE #( t_materials[ matnr = iv_matnr ]-matnr_type OPTIONAL ).
Crear estructuras
Antes (clásico):
TYPES: BEGIN OF ty_persona,
nombre TYPE string,
edad TYPE i,
END OF ty_persona.
DATA: ls_persona TYPE ty_persona.
ls_persona-nombre = 'Juan'.
ls_persona-edad = 30.
Con VALUE:
TYPES: BEGIN OF ty_persona,
nombre TYPE string,
edad TYPE i,
END OF ty_persona.
DATA(ls_persona) = VALUE ty_persona( nombre = 'Juan' edad = 30 ).
Incluso más compacto con #:
DATA(ls_persona) = VALUE #( nombre = 'Juan' edad = 30 ).
El operador VALUE es una de las herramientas más versátiles del ABAP moderno. Te permite construir prácticamente cualquier tipo de dato de forma declarativa y en una sola expresión.




