Cuando trabajamos con screens (dynpros) en ABAP, es muy común necesitar que un campo tipo dropdown muestre una lista concreta de valores: estados, tipos, opciones fijas, etc.
Aunque en el Diccionario de Datos podemos definir valores fijos en dominios, en muchos casos necesitamos controlar dinámicamente qué valores aparecen en el desplegable. Para eso existe la función estándar VRM_SET_VALUES.
VRM_SET_VALUES es un módulo de función estándar de SAP que permite asignar, en tiempo de ejecución, los valores que aparecerán en un campo tipo dropdown (listbox) dentro de una screen.
Requisitos previos en la screen
Antes de usar VRM_SET_VALUES, el campo de la screen debe cumplir esto:
- El campo debe ser un Listbox (Dropdown)
- En el Screen Painter, en las propiedades del campo
- Campo type Dropdown = Listbox
- El campo debe tener un nombre técnico, por ejemplo:
P_STATUSGV_TYPESCREEN_FIELD
Ese nombre será el ID que usaremos en la función.
Estructura básica de VRM_SET_VALUES
La función recibe dos parámetros importantes:
- ID → nombre del campo de la screen (entre comillas)
- VALUES → tabla interna con los valores del desplegable
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'FIELD_NAME'
values = lt_values_tab.
La tabla interna debe ser de tipo VRM_VALUES, que contiene:
KEY→ valor técnicoTEXT→ texto que ve el usuario
Ejemplo completo paso a paso
1️⃣ Declarar la tabla de valores
DATA: lt_values TYPE vrm_values,
ls_value TYPE vrm_value.
2️⃣ Rellenar los valores del dropdown
ls_value-key = 'A'.
ls_value-text = 'Activo'.
APPEND ls_value TO lt_values.
ls_value-key = 'I'.
ls_value-text = 'Inactivo'.
APPEND ls_value TO lt_values.
3️⃣ Llamar a VRM_SET_VALUES
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
id = 'P_STATUS'
values = lt_values.
¿Dónde se suele llamar a esta función?
Normalmente se llama en:
PBO(Process Before Output)MODULE status_XXXX OUTPUT
Ejemplo típico:
MODULE set_dropdown OUTPUT.
PERFORM fill_dropdown.
ENDMODULE.
Y dentro del FORM llamas a VRM_SET_VALUES.
👉 Esto asegura que el dropdown se cargue antes de que la screen se muestre.

