Способ №1, используя класс CL_ABAP_TYPEDESCR.
types: begin of typ_itab,
a type c,
b type i,
c type p length 5 decimals 2,
end of typ_itab.
data: lt_out_n type table of typ_itab,"таблица структуру которой нужно будет получить
l_tabledescr_ref type ref to cl_abap_tabledescr,
l_descr_ref type ref to cl_abap_structdescr,
wa_table type abap_compdescr.
l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( lt_out_n ).
l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ).
write: / 'CL_ABAP_TYPEDESCR' color col_positive.
loop at l_descr_ref->components into wa_table .
write: / wa_table-name,
wa_table-type_kind,
wa_table-length,
wa_table-decimals.
endloop.
a type c,
b type i,
c type p length 5 decimals 2,
end of typ_itab.
data: lt_out_n type table of typ_itab,"таблица структуру которой нужно будет получить
l_tabledescr_ref type ref to cl_abap_tabledescr,
l_descr_ref type ref to cl_abap_structdescr,
wa_table type abap_compdescr.
l_tabledescr_ref ?= cl_abap_typedescr=>describe_by_data( lt_out_n ).
l_descr_ref ?= l_tabledescr_ref->get_table_line_type( ).
write: / 'CL_ABAP_TYPEDESCR' color col_positive.
loop at l_descr_ref->components into wa_table .
write: / wa_table-name,
wa_table-type_kind,
wa_table-length,
wa_table-decimals.
endloop.
Это собственно все. Быстро, удобно, красиво, но работает только с внутренними таблицами без заголовка, для таблиц с заголовком смотрим способ №2.
Способ №2, используя ФМ GET_COMPONENT_LIST.
data: begin of lt_out_h occurs 0, "таблица структуру которой нужно будет получить
s1 type c,
s2 type c,
s3 type p length 5 decimals 2,
end of lt_out_h,
lt_components like standard table of rstrucinfo,
wa_components like line of lt_components.
call function 'GET_COMPONENT_LIST'
exporting
program = sy-cprog
fieldname = 'LT_OUT_H'
tables
components = lt_components.
write: / 'GET_COMPONENT_LIST' color col_positive.
loop at lt_components into wa_components.
write: / wa_components-compname,
wa_components-level,
wa_components-leng,
wa_components-type,
wa_components-olen,
wa_components-decs.
endloop.
s1 type c,
s2 type c,
s3 type p length 5 decimals 2,
end of lt_out_h,
lt_components like standard table of rstrucinfo,
wa_components like line of lt_components.
call function 'GET_COMPONENT_LIST'
exporting
program = sy-cprog
fieldname = 'LT_OUT_H'
tables
components = lt_components.
write: / 'GET_COMPONENT_LIST' color col_positive.
loop at lt_components into wa_components.
write: / wa_components-compname,
wa_components-level,
wa_components-leng,
wa_components-type,
wa_components-olen,
wa_components-decs.
endloop.
Достоинство этого способа это то, что мы может получить структуру внутренней таблицы находящейся не только в нашей программе, но и в любой другой. Для этого нужно в параметр program передать название программы, в которой находится интересующая нас таблица.
Минус данного способа, он работает только с таблицами с заголовками. Для работы с таблицами без заголовка смотрим способ №1.