Декларация внутренних таблиц ABAP используется почти в каждой SAP программе. Рассмотрим каждый из способов декларация внутренних таблиц в языке ABAP. Также рассматривается новый вариант определения, инлайновая декларация, появившуюся в версии ABAP 7.4. Внутренние таблицы используются практически в каждой SAP программе. Поэтому знать варианты определения внутренних таблиц ABAP очень важно для программиста ABAP.
Определение внутренних таблиц ABAP
Определение на основе структуры, таблицы БД или элемента из словаря
Определяем структуру или элемент ABAP словаря. На основе создаём внутреннюю таблицу следующим образом:
1 2 3 4 5 6 7 8 |
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(стандартное имя) вне зависимости от типа.
Декларация на основе локальной структуры
Есть возможность определить локальный тип и с помощью него создать внутреннюю таблицу ABAP. Этот способ используется в программах, методах, подпрограммах. Он используется когда данный тип не где в другом месте не понадобится.
1 2 3 4 5 6 7 8 9 |
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 - это локальная структура |
Определение на основе типа таблицы из словаря
Есть возможность создать тип таблицы в ABAP словаре и создавать внутреннюю таблицу на его основе. Плюсы этого варианта в том что этот тип таблицы можно использовать и в других программах. А так же в типе таблицы ABAP можно указать дополнительные свойства, например, ключ и др. Тип таблицы упрощает декларацию внутренней таблицы.
1 2 |
DATA: lt_text TYPE tline_tab. " tline_tab - это тип таблицы из словаря |
Инлайновая декларация внутренних таблиц
Этот способ определения доступен начиная с версии 7.4. С помощью нового синтаксиса определяется внутреннюю таблицу без определения заранее типа. То есть программа на основе данных анализирует какой тип нужен и формирует таблицу согласно данному типу. Подробнее про инлайн декларацию, в том числе, и внутренних таблиц можно почитать в статье Инлайновая декларация.
Примеры определения:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
" Определим таблицу заполнив одной строкой 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) ). |
Определение таблицы со строкой заголовка(устарело)
Конструкция WITH HEADER LINE для определения внутренних таблиц является устаревшей. Но эту конструкцию нужно знать, поскольку она используется в старых программах или в стандартном коде. Использовать её не нужно, но знать эту конструкцию нужно.
1 2 |
DATA: lt_text TYPE STANDARD TABLE OF tline WITH HEADER LINE. " tline - это структура словаря (возможны др. варианты) |