Оператор DATA используется для объявления внутренней таблицы. В программе нужно указать, где начинается и заканчивается таблица. Так что используйте оператор BEGIN OF, а затем объявите имя таблицы. После этого используется добавление OCCURS, за которым следует число, здесь 0. OCCURS сообщает SAP, что создается внутренняя таблица, а 0 указывает, что изначально она не будет содержать никаких записей. Затем он будет расширяться по мере заполнения данными.
Ниже приводится синтаксис —
DATA: BEGIN OF <internal_tab> Occurs 0,
Давайте создадим поля на новой строке. Например, создайте ‘name’, которое объявлено как LIKE ZCUSTOMERS1-name. Создайте другое поле с именем ‘dob’, LIKE ZCUSTOMERS1-dob. Первоначально полезно давать имена полей во внутренних таблицах тем же именам, что и другим полям, которые были созданы в других местах. Наконец, объявите конец внутренней таблицы с «END OF <internal_tab>.», Как показано в следующем коде —
DATA: BEGIN OF itab01 Occurs 0, name LIKE ZCUSTOMERS1-name, dob LIKE ZCUSTOMERS1-dob, END OF itab01.
Здесь ‘itab01’ обычно используется как сокращение при создании временных таблиц в SAP. Предложение OCCURS используется для определения тела внутренней таблицы путем объявления полей для таблицы. Когда используется предложение OCCURS, вы можете указать числовую константу ‘n’, чтобы определить дополнительную память по умолчанию, если это необходимо. Размер памяти по умолчанию, который используется предложением OCCUR 0, составляет 8 КБ. Структура внутренней таблицы теперь создана, и можно написать код, чтобы заполнить ее записями.
Внутренняя таблица может быть создана с использованием или без использования строки заголовка. Чтобы создать внутреннюю таблицу со строкой заголовка, используйте предложение BEGIN OF перед предложением OCCURS или предложение WITH HEADER LINE после предложения OCCURS в определении внутренней таблицы. Чтобы создать внутреннюю таблицу без строки заголовка, используйте предложение OCCURS без предложения BEGIN OF.
Вы также можете создать внутреннюю таблицу как локальный тип данных (тип данных, используемый только в контексте текущей программы) с помощью оператора TYPES. Этот оператор использует предложение TYPE или LIKE для ссылки на существующую таблицу.
Синтаксис для создания внутренней таблицы как локального типа данных:
TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF <line_type_itab> WITH <key> INITIAL SIZE <size_number>.
Здесь <internal_tab_type> указывает тип таблицы для внутренней таблицы <internal_tab>, а <line_type_itab> указывает тип для строки внутренней таблицы. В операторе TYPES вы можете использовать предложение TYPE, чтобы указать тип строки внутренней таблицы как тип данных, и предложение LIKE, чтобы указать тип строки как объект данных. Указывать ключ для внутренней таблицы необязательно, и если пользователь не указывает ключ, система SAP определяет тип таблицы с произвольным ключом.
INITIAL SIZE <size_number> создает объект внутренней таблицы, выделяя ему начальный объем памяти. В предыдущем синтаксисе предложение INITIAL SIZE резервирует пространство памяти для строк таблицы size_number. Всякий раз, когда объявляется объект внутренней таблицы, размер таблицы не относится к типу данных таблицы.
Примечание. При первом заполнении внутренней таблицы используется гораздо меньше памяти.
пример
Шаг 1 — Откройте редактор ABAP, выполнив код транзакции SE38. Появится начальный экран ABAP Editor.
Шаг 2 — На начальном экране введите имя программы, установите переключатель «Исходный код» и нажмите кнопку «Создать», чтобы создать новую программу.
Шаг 3 — В диалоговом окне «ABAP: Атрибуты программы» введите краткое описание программы в поле «Заголовок», выберите параметр «Исполняемая программа» в раскрывающемся меню «Тип» в групповом поле «Атрибуты». Нажмите кнопку Сохранить.
Шаг 4 — Напишите следующий код в редакторе ABAP.
REPORT ZINTERNAL_DEMO. TYPES: BEGIN OF CustomerLine, Cust_ID TYPE C, Cust_Name(20) TYPE C, END OF CustomerLine. TYPES mytable TYPE SORTED TABLE OF CustomerLine WITH UNIQUE KEY Cust_ID. WRITE:/'The mytable is an Internal Table'.
Шаг 5 — Сохраните, активируйте и запустите программу как обычно.
В этом примере mytable является внутренней таблицей, а уникальный ключ определяется в поле Cust_ID.
Приведенный выше код производит следующий вывод —