REPORT zzz.
TYPE-POOLS : slis.
DATA : gw_dyn_fcat TYPE lvc_s_fcat,
gt_dyn_fcat TYPE lvc_t_fcat.
DATA : gt_dyn_table TYPE REF TO data,
gs_line TYPE REF TO data.
TYPES: BEGIN OF ts_cols,
name TYPE char16,
caption TYPE char16,
END OF ts_cols.
DATA: gt_cols TYPE TABLE OF ts_cols.
FIELD-SYMBOLS: <gfs_line>,
<gfs_dyn_table> TYPE STANDARD TABLE.
START-OF-SELECTION.
"фиктивное заполнение данных
PERFORM sel_data.
"Определение перечня столбцов динамической таблицы
PERFORM build_fc.
"Создание динамической таблицы
PERFORM create_table.
"Заполнение динамической таблицы
PERFORM fill_table.
"Вывод динамической таблицы в ALV
PERFORM alv.
*&---------------------------------------------------------------------*
*& Form sel_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM sel_data.
DATA: ls_cols TYPE ts_cols.
ls_cols-name = 'COL1'.
ls_cols-caption = 'Столбец 1'.
APPEND ls_cols TO gt_cols.
ls_cols-name = 'COL2'.
ls_cols-caption = 'Столбец 2'.
APPEND ls_cols TO gt_cols.
ENDFORM. "sel_data
*&---------------------------------------------------------------------*
*& Form build_fc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_fc.
DATA: ls_fcat LIKE LINE OF gt_dyn_fcat,
ls_cols LIKE LINE OF gt_cols,
lv_pos TYPE i VALUE 0.
REFRESH gt_dyn_fcat.
lv_pos = lv_pos + 1.
ls_fcat-fieldname = 'LINE'.
ls_fcat-outputlen = 3.
ls_fcat-coltext = 'N'.
ls_fcat-col_pos = lv_pos.
ls_fcat-key = 'X'.
" ls_fcat-no_out = 'X'.
APPEND ls_fcat TO gt_dyn_fcat.
CLEAR ls_fcat.
LOOP AT gt_cols INTO ls_cols.
lv_pos = lv_pos + 1.
ls_fcat-fieldname = ls_cols-name.
ls_fcat-outputlen = 16.
ls_fcat-coltext = ls_cols-caption.
ls_fcat-col_pos = lv_pos.
ls_fcat-scrtext_s = ls_cols-caption.
ls_fcat-scrtext_l = ls_cols-caption.
APPEND ls_fcat TO gt_dyn_fcat.
CLEAR ls_fcat.
ENDLOOP.
ENDFORM. "build_fc
*&---------------------------------------------------------------------*
*& Form fill_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_table.
DATA: ls_cols LIKE LINE OF gt_cols,
lv_line TYPE char3.
FIELD-SYMBOLS: <fs1>.
lv_line = '010'.
ASSIGN COMPONENT 'LINE' OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = lv_line.
LOOP AT gt_cols INTO ls_cols.
ASSIGN COMPONENT ls_cols-name OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = lv_line && ':' && ls_cols-caption.
ENDLOOP.
APPEND <gfs_line> TO <gfs_dyn_table>.
lv_line = '020'.
ASSIGN COMPONENT 'LINE' OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = lv_line.
LOOP AT gt_cols INTO ls_cols.
ASSIGN COMPONENT ls_cols-name OF STRUCTURE <gfs_line> TO <fs1>.
<fs1> = lv_line && ':' && ls_cols-caption.
ENDLOOP.
APPEND <gfs_line> TO <gfs_dyn_table>.
* UNASSIGN <fs1>.
ENDFORM. "fill_table
*&---------------------------------------------------------------------*
*& Form create_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM create_table.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
i_style_table = 'X'
it_fieldcatalog = gt_dyn_fcat
IMPORTING
ep_table = gt_dyn_table
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc EQ 0.
ASSIGN gt_dyn_table->* TO <gfs_dyn_table>.
CREATE DATA gs_line LIKE LINE OF <gfs_dyn_table>.
ASSIGN gs_line->* TO <gfs_line>.
ENDIF.
ENDFORM. "create_table
*&---------------------------------------------------------------------*
*& Form alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv.
DATA: ls_layout TYPE lvc_s_layo.
ls_layout-zebra = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
is_layout_lvc = ls_layout
it_fieldcat_lvc = gt_dyn_fcat
i_save = 'X'
TABLES
t_outtab = <gfs_dyn_table>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "alv