Я пользуюсь собственным классом для создания динамических таблиц.
Code:
*&---------------------------------------------------------------------*
*& Include ZAVV_LCL_CRTFIELDCATALOG
*&---------------------------------------------------------------------*
CLASS zavv_lcl_dyn DEFINITION .
PUBLIC SECTION.
CLASS-METHODS:
get_fldcat IMPORTING im_table TYPE STANDARD TABLE
EXPORTING ex_fldcat TYPE lvc_t_fcat,
get_dyntab IMPORTING im_table TYPE STANDARD TABLE
EXPORTING ex_dyntab TYPE REF TO data.
ENDCLASS. "zavv_lcl_crtfieldcatalog DEFINITION
*----------------------------------------------------------------------*
* CLASS zavv_lcl_crtfieldcatalog IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS zavv_lcl_dyn IMPLEMENTATION.
METHOD get_fldcat.
DATA: lcl_table_descr TYPE REF TO cl_abap_tabledescr,
lcl_struc_descr TYPE REF TO cl_abap_structdescr,
ret_components TYPE abap_compdescr_tab,
wa_ret_components TYPE LINE OF abap_compdescr_tab,
wa_ct_fieldcat TYPE lvc_s_fcat.
CLEAR: lcl_table_descr ,
lcl_struc_descr ,
ret_components ,
wa_ret_components ,
wa_ct_fieldcat .
lcl_table_descr ?= cl_abap_typedescr=>describe_by_data( im_table ).
lcl_struc_descr ?= lcl_table_descr->get_table_line_type( ).
ret_components = lcl_struc_descr->components.
LOOP AT ret_components INTO wa_ret_components .
wa_ct_fieldcat-fieldname = wa_ret_components-name.
wa_ct_fieldcat-col_pos = sy-tabix.
wa_ct_fieldcat-inttype = wa_ret_components-type_kind.
wa_ct_fieldcat-intlen = wa_ret_components-length.
APPEND wa_ct_fieldcat TO ex_fldcat.
CLEAR wa_ct_fieldcat.
ENDLOOP.
ENDMETHOD. "get_fldcat
METHOD get_dyntab.
DATA: lcl_table_descr TYPE REF TO cl_abap_tabledescr,
lcl_struc_descr TYPE REF TO cl_abap_structdescr,
ret_components TYPE abap_compdescr_tab,
wa_ret_components TYPE LINE OF abap_compdescr_tab,
wa_ct_fieldcat TYPE lvc_s_fcat,
lt_fldcat TYPE lvc_t_fcat.
CLEAR: lcl_table_descr ,
lcl_struc_descr ,
ret_components ,
wa_ret_components ,
wa_ct_fieldcat ,
lt_fldcat .
lcl_table_descr ?= cl_abap_typedescr=>describe_by_data( im_table ).
lcl_struc_descr ?= lcl_table_descr->get_table_line_type( ).
ret_components = lcl_struc_descr->components.
LOOP AT ret_components INTO wa_ret_components .
wa_ct_fieldcat-fieldname = wa_ret_components-name.
wa_ct_fieldcat-col_pos = sy-tabix.
wa_ct_fieldcat-inttype = wa_ret_components-type_kind.
wa_ct_fieldcat-intlen = wa_ret_components-length.
APPEND wa_ct_fieldcat TO lt_fldcat.
CLEAR wa_ct_fieldcat.
ENDLOOP.
DATA: im_table1 TYPE REF TO data.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fldcat
IMPORTING
ep_table = ex_dyntab
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
ENDMETHOD. "get_fldcat
ENDCLASS. "zavv_lcl_crtfieldcatalog IMPLEMENTATION
Пример использования
Code:
REPORT zavv_test.
INCLUDE zavv_lcl_crtfieldcatalog.
DATA : it_file LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA file_path LIKE rlgrap-filename.
TYPES : BEGIN OF sbu_upload ,
bu TYPE c,
bu_desc TYPE c,
delete TYPE c,
END OF sbu_upload .
DATA tbu_upload TYPE STANDARD TABLE OF sbu_upload WITH HEADER LINE.
DATA: lt_fieldcat TYPE lvc_t_fcat.
INITIALIZATION.
START-OF-SELECTION.
zavv_lcl_dyn=>get_fldcat( EXPORTING im_table = tbu_upload[]
IMPORTING ex_fldcat = lt_fieldcat ).
DATA: lt_tab1 TYPE REF TO data.
zavv_lcl_dyn=>get_dyntab( EXPORTING im_table = tbu_upload[]
IMPORTING ex_dyntab = lt_tab1 ).
Просто обернул. Ношу с собой =)