TYPES: BEGIN OF ty_output,
matnr TYPE matnr,
werks TYPE werks,
button TYPE c LENGTH 1,
END OF ty_output.
DATA: it_output TYPE STANDARD TABLE OF ty_output.
* Define el catálogo de campos para el ALV
DATA: it_fieldcat TYPE lvc_t_fcat,
wa_fieldcat TYPE lvc_s_fcat.
* Configurar el campo para el botón
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'BUTTON'.
wa_fieldcat-icon = icon_upload.
wa_fieldcat-emphasize = abap_true.
APPEND wa_fieldcat TO it_fieldcat.
* Recupera los datos que se mostrarán en el ALV
SELECT matnr werks
FROM mara
INTO CORRESPONDING FIELDS OF TABLE it_output.
* Agrega el botón a cada fila
LOOP AT it_output ASSIGNING FIELD-SYMBOL(<fs_output>).
<fs_output>-button = 'X'.
ENDLOOP.
* Muestra el ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
TABLES
t_outtab = it_output
t_fieldcat = it_fieldcat
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Captura el evento AT USER COMMAND para manejar el clic del botón
CALL FUNCTION 'REUSE_ALV_EVENT_GET'
EXPORTING
i_list_type = 0
IMPORTING
e_exit = l_exit
TABLES
t_events = it_events.
LOOP AT it_events WHERE name = 'AT_USER_COMMAND'.
ASSIGN it_events TO <fs_events>.
CASE <fs_events>-ucomm.
WHEN 'BUTTON'.
PERFORM generate_form.
ENDCASE.
ENDLOOP.