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

Декларация внутренних таблиц ABAP используется почти в каждой SAP программе. Рассмотрим каждый из способов декларация внутренних таблиц в языке ABAP. Также рассматривается новый вариант определения, инлайновая декларация, появившуюся в версии ABAP 7.4. Внутренние таблицы используются практически в каждой SAP программе. Поэтому знать варианты определения внутренних таблиц ABAP очень важно для программиста ABAP.

 

Определение внутренних таблиц ABAP

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

Определяем структуру или элемент ABAP словаря. На основе создаём внутреннюю таблицу следующим образом:

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. Этот способ используется в программах, методах, подпрограммах. Он используется когда данный тип не где в другом месте не понадобится.

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

Есть возможность создать тип таблицы в ABAP словаре и создавать внутреннюю таблицу на его основе. Плюсы этого варианта в том что этот тип таблицы можно использовать и в других программах. А так же в типе таблицы ABAP можно указать дополнительные свойства, например, ключ и др. Тип таблицы упрощает декларацию внутренней таблицы.

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

Этот способ определения доступен начиная с версии 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) ).
 

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

Конструкция WITH HEADER LINE для определения внутренних таблиц является устаревшей. Но эту конструкцию нужно знать, поскольку она используется в старых программах или в стандартном коде. Использовать её не нужно, но знать эту конструкцию нужно.

Добавить комментарий