Cuando trabajas con ALV, una de las tareas más repetitivas es definir el fieldcatalog: decirle a ALV qué columnas mostrar, con qué título, etc. Hacerlo dinámico significa que el programa no necesita saber de antemano la estructura de la tabla; la deduce automáticamente.
Hay 2 opciones:
1. Método automático: LVC_FIELDCATALOG_MERGE
Si la estructura existe en DDIC y no necesitas personalización, SAP proporciona una función que genera el fieldcatalog a partir de una estructura o tabla interna, tomando las descripciones de texto del Diccionario de Datos.
DATA: lt_fieldcat TYPE lvc_t_fcat,
ls_layout TYPE lvc_s_layo.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'T001' " Estructura de diccionario
i_client_never_del = 'X'
CHANGING
ct_fieldcat = lt_fieldcat.
2. Método manual con cl_abap_structdescr y cl_salv_data_descr
DATA: lt_fieldcat TYPE lvc_t_fcat,
lr_tabdescr TYPE REF TO cl_abap_structdescr,
lt_dfies TYPE ddfields,
lr_data TYPE REF TO data,
wa_fieldcat TYPE lvc_s_fcat.
" Asignar a lr_data la línea de la tabla (o la tabla completa)
CREATE DATA lr_data LIKE LINE OF gt_table.
" Obtener descriptor de la estructura
lr_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ).
" Leer los metadatos de los campos
lt_dfies = cl_salv_data_descr=>read_structdescr( lr_tabdescr ).
" Recorrer los metadatos y construir el fieldcatalog
LOOP AT lt_dfies ASSIGNING FIELD-SYMBOL(<fs_dfies>).
APPEND INITIAL LINE TO lt_fieldcat ASSIGNING FIELD-SYMBOL(<fs_fcat>).
MOVE-CORRESPONDING <fs_dfies> TO <fs_fcat>.
ENDLOOP.
" Personalizar columnas
LOOP AT lt_fieldcat ASSIGNING <fs_fcat>.
CASE <fs_fcat>-fieldname.
WHEN 'MANDT'.
<fs_fcat>-tech = 'X'. " Columna técnica, no se muestra
WHEN 'XMATERIAL_ID'.
<fs_fcat>-edit = 'X'.
<fs_fcat>-outputlen = 10.
<fs_fcat>-f4availabl = 'X'. " Ayuda de búsqueda
WHEN 'HOURS'.
<fs_fcat>-coltext = 'Hours'.
<fs_fcat>-edit = 'X'.
<fs_fcat>-outputlen = 8.
WHEN 'IS_VIP' OR 'IS_ACTIVE'.
<fs_fcat>-edit = 'X'.
<fs_fcat>-checkbox = 'X'.
<fs_fcat>-outputlen = 7.
ENDCASE.
ENDLOOP.
Generar un fieldcatalog dinámico con cl_abap_structdescr y cl_salv_data_descr es la técnica más profesional y versátil para ALV. Te permite construir un catálogo completo sin depender del Diccionario de Datos y personalizarlo después con reglas de negocio.



