En los desarrollos ABAP, muchas veces necesitamos que una columna del ALV Grid (clásico con CL_GUI_ALV_GRID) permita seleccionar un valor de una lista desplegable en lugar de introducir texto libre. Esto es posible gracias a la técnica de field catalog + dropdown handle y se logra de forma sencilla si conoces los pasos.
En este artículo te muestro cómo hacerlo paso a paso, con ejemplos de código.
Tabla de Contenidos
✅ Paso 1: Crear la tabla interna de datos
Primero, definimos la tabla interna que usaremos en el ALV. Por ejemplo, una lista de empleados con un campo “Rol” que tendrá el dropdown:
TYPES: BEGIN OF ty_empleado,
id TYPE i,
nombre TYPE string,
rol TYPE string,
END OF ty_empleado.
DATA: gt_empleados TYPE TABLE OF ty_empleado,
gs_empleado TYPE ty_empleado.
gs_empleado-id = 1.
gs_empleado-nombre = ‘Andrea’.
gs_empleado-rol = ‘FI’.
APPEND gs_empleado TO gt_empleados.
gs_empleado-id = 2.
gs_empleado-nombre = ‘Carlos’.
gs_empleado-rol = ‘CONS’.
APPEND gs_empleado TO gt_empleados.
✅ Paso 2: Definir el catálogo de campos (field catalog)
Creamos el catálogo de campos del ALV y configuramos la columna “ROL” para que use un dropdown.
DATA: gt_fieldcat TYPE lvc_t_fcat,
gs_fieldcat TYPE lvc_s_fcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = ‘ID’.
gs_fieldcat-coltext = ‘ID’.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = ‘NOMBRE’.
gs_fieldcat-coltext = ‘Nombre’.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = ‘ROL’.
gs_fieldcat-coltext = ‘Rol’.
gs_fieldcat-drdn_hndl = ‘1’. » Asignamos el identificador del dropdown
APPEND gs_fieldcat TO gt_fieldcat.
✅ Paso 3: Definir la tabla de valores para el dropdown
Aquí definimos los valores disponibles en el desplegable (pueden ser códigos de rol, estados, etc.):
DATA: gt_dropdown TYPE lvc_t_drop,
gs_dropdown TYPE lvc_s_drop.
gs_dropdown-handle = ‘1’.
gs_dropdown-value = ‘FI’.
APPEND gs_dropdown TO gt_dropdown.
gs_dropdown-handle = ‘1’.
gs_dropdown-value = ‘CONS’.
APPEND gs_dropdown TO gt_dropdown.
gs_dropdown-handle = ‘1’.
gs_dropdown-value = ‘PM’.
APPEND gs_dropdown TO gt_dropdown.
Otra opción es rellenar la tabla con los datos de una tabla de base de datos:
DATA: lt_roles TYPE TABLE OF zroles,
ls_role TYPE zroles.
SELECT * FROM zroles INTO TABLE lt_roles.
LOOP AT lt_roles INTO ls_role.
gs_dropdown-handle = ‘1’.
gs_dropdown-value = ls_role-rol.
APPEND gs_dropdown TO gt_dropdown.
ENDLOOP.
O podemos rellenar la tabla con los valores (value range) de un dominio:
DATA: lt_domvalues TYPE TABLE OF dd07v,
ls_domvalue TYPE dd07v.
CALL FUNCTION ‘DD_DOMVALUES_GET’
EXPORTING
domname = ‘ZDOM_ROLES’
TABLES
dd07v_tab = lt_domvalues
EXCEPTIONS
wrong_textflag = 1
OTHERS = 2.
LOOP AT lt_domvalues INTO ls_domvalue WHERE domvalue_l IS NOT INITIAL.
gs_dropdown-handle = ‘1’.
gs_dropdown-value = ls_domvalue-domvalue_l.
A PPEND gs_dropdown TO gt_dropdown.
ENDLOOP.
✅ Paso 4: Crear el ALV Grid y asignar el dropdown
Finalmente, mostramos el ALV y asociamos la tabla de dropdown al handle definido en el field catalog.
DATA: gr_alv TYPE REF TO cl_gui_alv_grid,
gr_cont TYPE REF TO cl_gui_custom_container.
CREATE OBJECT gr_cont
EXPORTING
container_name = ‘CONTAINER’.
CREATE OBJECT gr_cont
EXPORTING
container_name = ‘CONTAINER’.
CREATE OBJECT gr_alv
EXPORTING
i_parent = gr_cont.
CALL METHOD gr_alv->set_table_for_first_display
EXPORTING
is_layout = gs_layout
CHANGING
it_fieldcatalog = gt_fieldcat
it_outtab = gt_empleados.
» Asignamos el dropdown al ALV
CALL METHOD gr_alv->set_drop_down_table
EXPORTING
it_drop_down = gt_dropdown.
🎯 Resultado esperado
Cuando ejecutes este código, el campo “ROL” aparecerá como una columna con un menú desplegable en cada fila. El usuario podrá seleccionar entre los valores DEV, CONS y PM.
❌ Problemas comunes y qué revisar
Aquí podemos añadir un apartado tipo checklist de errores típicos:
- El dropdown no aparece:
- Revisa que el campo en el field catalog tenga el atributo
DRDN_HNDLcon el mismo número que usas en la tabla de dropdown.
- Revisa que el campo en el field catalog tenga el atributo
- La columna no es editable:
- El ALV solo permite el dropdown en columnas editables. Asegúrate de que el
EDITesté activado en el field catalog.
- El ALV solo permite el dropdown en columnas editables. Asegúrate de que el
- No carga los valores:
- Verifica que el método
SET_DROP_DOWN_TABLEse haya llamado después de inicializar el ALV.
- Verifica que el método
- Error de tipo de datos:
- El campo que recibe el valor del dropdown debe ser del mismo tipo que los valores de la tabla de dropdown (ejemplo:
CHAR,STRING,NUMC).
- El campo que recibe el valor del dropdown debe ser del mismo tipo que los valores de la tabla de dropdown (ejemplo:
- El ALV no responde a cambios:
- En algunos casos, tendrás que manejar el evento
DATA_CHANGEDpara actualizar la lógica del programa.
- En algunos casos, tendrás que manejar el evento

