Динамические таблицы в ABAP

Существует как минимум 3 способа создания динамических таблиц:

  1. Используется в старых системах, через генерацию программы (GENERATE SUBROUTINE POOL).
  2. Используя класс CL_ALV_TABLE_CREATE.
  3. Используя RTTS (Run Time Type Services).

В данной статье будут рассмотрены все три, примеры максимально упрощены для понимания.

GENERATE SUBROUTINE POOL

В старых системах (до версии ABAP 6.40) для генерации динамической таблицы (или структуры) использовался метод динамического создания подпрограммы с использованием оператора GENERATESUBROUTINEPOOL. Пример реализации:

CL_ALV_TABLE_CREATE

Второй способ подразумевает использование класса CL_ALV_TABLE_CREATE и его статического метода create_dynamic_table. На вход мы должны передать каталог полей (внутреняя таблица определенной структуры, описывающая из каких полей будет состоять таблица), на выходе получим  ссылочную переменную на созданный тип данных. Данный способ является по сути ООП обёрткой над предыдущим. Пример реализации:

RTTS

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