Декларация внутренних таблиц ABAP

Рассмотрим каждый из способов определения внутренних таблиц в языке ABAP. Также рассматривается новый вариант определения, инлайновая декларация, появившуюся в версии 7.4.

Определение на основе структуры, таблицы БД или элемента из словаря

Определив заранее структуру или элемент нужного типа в словаре, на основе создаём внутреннюю таблицу следующим образом:

DATA: lt_text TYPE STANDARD TABLE OF tline.
" tline - это структура abap словаря

DATA: lt_vbak TYPE STANDARD TABLE OF vbak.
" vbak - это таблица БД abap словаря

DATA: lt_vkorg TYPE STANDARD TABLE OF vkorg.
" vkorg - это элемент abap словаря 

В этом примере используются стандартные типы данных, но аналогична конструкция и для пользовательских. Стоит отметить, что при обращении к столбцу внутренней таблицы, с элементом в качестве строки элемент, имя этого столбца будет не vkorg, а table_line(стандартное имя) для таблиц, которые определены таким образом.

Декларация на основе локальной структуры

С помощью этого способа, локально, в программе, методе или подпрограмме определяется локальная структура, после чего таблица определяется аналогично.

TYPES:
  BEGIN OF ts_data,
    vkorg TYPE vkorg,
	werks TYPE werks_d,
	matnr TYPE matnr,
  END OF ts_data.

DATA: lt_text TYPE STANDARD TABLE OF ts_data.
" ts_data - это локальная структура

Определение на основе типа таблицы из словаря

Определяя тип таблицы в словаре, задаём дополнительные свойства таблицы, которые определены с помощью этого типа, например, ключ и др. Тип таблицы упрощает декларацию внутренней таблицы.

DATA: lt_text TYPE tline_tab.
" tline_tab - это тип таблицы из словаря 

Инлайновая декларация внутренних таблиц

Этот способ определения доступен начиная с версии 7.4. С помощью нового синтаксиса определяется внутреннюю таблицу без определения заранее типа. То есть программа на основе данных анализирует какой тип нужен и формирует таблицу согласно данному типу. Подробнее про инлайн декларацию, в том числе, и внутренних таблиц можно почитать в статье Инлайновая декларация.
Примеры определения:

" Определим таблицу заполнив одной строкой
DATA(lt_ekpo) = VALUE ekpo( ( ebeln = '1000000091' ebelp = '00010' ) ).	

" Декларация таблицы инлайн, с нужными столбцами
SELECT ebeln, ebelp
  INTO TABLE @DATA(lt_ekpo)
  FROM ekpo
  UP TO 5 ROWS.	
  
" На вход передаём таблицу инлайн и на выход тоже получаем
zcl_proc_table=>factory( 
  EXPORTING t_table = VALUE #( ( day = '22' year = 2020 ) )
  IMPORTING t_res_table = DATA(lt_result) ).

Определение таблицы со строкой заголовка(устарело)

Эта конструкция устаревшая, но знать её нужно, поскольку иногда эта конструкция используется, например, на старых версиях или в стандартном коде.

DATA: lt_text TYPE STANDARD TABLE OF tline WITH HEADER LINE.
" tline - это структура словаря (возможны др. варианты)

В ближайшее время выйдет статья с подробным описанием работы с внутренними таблицами, запись и чтение данных из них.