It’s easy to develop an editable popup using ALV classic style. Just instead of function module REUSE_ALV_POPUP_TO_SELECT use REUSE_ALV_GRID_DISPLAY. It can be a nice extension, when the main table is based on CL_SALV_TABLE class, which is not editable. After a double click on the selected row in the main table, you can display such popup with corresponding fields and refresh the main table after user’s edition.
Don’t forget to press ENTER to transfer the changed data from ALV to internal table.
REPORT zkm_test.
TYPE-POOLS:
slis.
DATA:
BEGIN OF ls_popup,
bname TYPE uname,
pass(20) TYPE c,
END OF ls_popup,
lt_popup LIKE TABLE OF ls_popup,
lt_fcat TYPE slis_t_fieldcat_alv,
ls_fcat TYPE slis_fieldcat_alv,
ls_exit TYPE slis_exit_by_user.
SELECT bname
UP TO 10 ROWS
APPENDING CORRESPONDING FIELDS OF TABLE lt_popup
FROM usr02.
CLEAR ls_fcat.
ls_fcat-col_pos = 1.
ls_fcat-fieldname = 'BNAME'.
ls_fcat-ref_fieldname = 'BNAME'.
ls_fcat-ref_tabname = 'USR02'.
APPEND ls_fcat TO lt_fcat.
CLEAR ls_fcat.
ls_fcat-col_pos = 2.
ls_fcat-fieldname = 'PASS'.
ls_fcat-lowercase = 'X'.
ls_fcat-edit = 'X'.
APPEND ls_fcat TO lt_fcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = lt_fcat
i_screen_start_column = 1
i_screen_start_line = 1
i_screen_end_column = 42
i_screen_end_line = 10
IMPORTING
es_exit_caused_by_user = ls_exit
TABLES
t_outtab = lt_popup.
IF ls_exit-back = 'X'
OR ls_exit-exit = 'X'
OR ls_exit-cancel = 'X'.
WRITE: / 'cancel'.
ELSE.
LOOP AT lt_popup INTO ls_popup.
WRITE: / ls_popup.
ENDLOOP.
ENDIF.
See other related notes on my website: