data: lr_any_t type ref to data, lr_any_s type ref to data. data: lr_dref type ref to data, lr_stru type ref to cl_abap_structdescr, lr_table type ref to cl_abap_tabledescr, lr_elem type ref to cl_abap_elemdescr, lt_para type cl_abap_structdescr=>component_table, lt_comp type cl_abap_structdescr=>component_table. field-symbols: <fs_tab> type any, <ft_tab> type standard table. try. lr_stru ?= cl_abap_tabledescr=>describe_by_data( it_any ). loop at lr_stru->components[] into data(ls_comps). if ls_comps-type_kind = 'P' or ls_comps-type_kind = 'X'. else. ls_comps-length = ls_comps-length / 2. endif. append initial line to lt_comp assigning field-symbol(<fs_comp>). <fs_comp>-name = ls_comps-name. <fs_comp>-type ?= cl_abap_elemdescr=>get_by_kind( p_type_kind = ls_comps-type_kind p_length = ls_comps-length p_decimals = ls_comps-decimals ). unassign <fs_comp>. endloop. if lt_comp[] is not initial. clear:lr_stru,lr_table. lr_stru = cl_abap_structdescr=>create( lt_comp ). lr_table = cl_abap_tabledescr=>create( lr_stru ). create data lr_any_s type handle lr_stru. assign lr_any_s->* to <fs_tab>. create data lr_any_t type handle lr_table. assign lr_any_t->* to <ft_tab>. endif. move-corresponding it_any to <ft_tab>[]. catch cx_root into data(lr_rt). data(lv_txt) = lr_rt->get_text( ). raise exception type zcx_root exporting textid = value #( msgid = '00' msgno = '001' attr1 = lv_txt ). endtry.