РАЗРАБОТКА ABAPP1L2

ABAP: типы, внутренние таблицы и контракты данных

ABAP: типы, внутренние таблицы и контракты данных: область применимости, ограничения и проверяемые выводы.

Ревизия 3 Общие понятия Частичное покрытие Контекст: CTX-GENERALКонтекст: CTX-BTP-ABAP документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

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

В документации SAP ABAP Cloud о ключах внутренних таблиц у каждой внутренней таблицы есть первичный ключ. У STANDARD TABLE он неуникальный и может быть пустым. SORTED TABLE поддерживает уникальный или неуникальный ключ и хранит строки в порядке ключа. HASHED TABLE требует уникальный хеш-ключ. Вторичные ключи дают дополнительные способы доступа, но требуют памяти и добавляют затраты при изменениях.

Как выбрать категорию#

Категория Подходит, когда Что проверить
STANDARD TABLE Нужны индекс, последовательная обработка и накопление строк; повтор ключевых значений допустим Чтение по первичному ключу при большом наборе может обходить строки линейно. Если читать нужно по ключу, предусмотрите сортировку с бинарным поиском или подходящий ключ и проверьте, что порядок и заполнение согласованы
SORTED TABLE Набор должен сохранять порядок ключа; нужны чтения по ключу и последовательная обработка по начальной части ключа Вставка поддерживает сортировку. Уникальность выбирается отдельно. Поля первичного ключа обычно нельзя менять при изменении содержимого строки
HASHED TABLE Главная операция - поиск по полному уникальному ключу Индекса строк нет, а ключ всегда уникален. Если возможны несколько строк на один выбранный ключ, такой ключ не подходит

Эти ориентиры основаны на официальном описании выбора категории таблицы. SAP описывает свойства и стоимость доступа; это не замер производительности конкретной программы.

Пример для финансового набора#

Предположим, программа получает синтетические строки документов для сверки. Один документ содержит несколько позиций, а при анализе требуется отобрать позиции по компании и финансовому году. Сначала разделите два понятия:

  • Бизнес-идентичность строки отвечает, какая позиция является той же записью в предметной модели. Например, в синтетическом примере это может быть сочетание компании, года, документа и номера позиции.
  • Ключ внутренней таблицы задаёт, как программа находит и упорядочивает строки в конкретном наборе данных. Он может повторять бизнес-идентичность, но может обслуживать другой частый доступ, например чтение по компании и году.

Если нужен исходный индексный порядок и строки только накапливаются, начните с STANDARD TABLE и не полагайтесь на неявный стандартный ключ. Если затем постоянно выбираются позиции по компании и году, сортированный ключ с этими полями в начале соответствует частичному последовательному чтению. Хешированный ключ уместен только для поиска строки по полному уникальному ключу; он не подходит для запроса, который должен вернуть несколько позиций одного документа.

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

Явно объявляйте ключи#

При объявлении через TYPES или DATA проверяйте, какой ключ задан явно и какой добавляется неявно. Для STANDARD TABLE пропуск ключа в объявлении DATA может добавить NON-UNIQUE DEFAULT KEY, который бывает пустым. В TYPES ключ DEFAULT KEY также может неожиданно оказаться пустым для стандартной таблицы. SAP советует явно указывать значимые компоненты; если первичный ключ для операций не нужен, можно осознанно задать EMPTY KEY. Для сортированных и хешированных таблиц первичный ключ должен быть указан явно.

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

Проверка контракта перед реализацией#

Перед передачей внутренней таблицы через границу метода зафиксируйте:

  1. Какой набор полей идентифицирует строку предметно, и допускаются ли дубликаты в этом наборе?
  2. Как читают данные: по индексу, по полному ключу или по начальной части ключа?
  3. Требуется ли стабильный порядок строк или только порядок при конкретном чтении?
  4. Может ли вызывающий код изменять поля первичного ключа?
  5. Какие значения должны идти вместе: сумма и валюта, количество и единица, дата и её смысл?

Эти вопросы выявляют неоднозначный контракт до того, как выбор таблицы закрепится в коде. Вторичный ключ не исправляет ошибочную бизнес-идентичность, а уникальный ключ требует, чтобы повтор действительно считался ошибкой для этого набора.

Синтаксис и доступные API зависят от версии ABAP и модели разработки. Здесь описаны правила из документации ABAP Cloud, а не результат проверки компилятором или запуска SAP runtime; синтаксис нужно сверять с целевой системой.

Синтаксис и API различаются между классическим ABAP и ABAP Cloud. Код, допустимый в одной среде, может быть запрещён или непереносим в другой. Здесь нет заявления о запуске в ABAP runtime; точную грамматику сверяйте с документацией целевой версии.

Связанные материалы#

Источники и документация

  1. ABAP Cloud FAQ ↗
  2. Ключи внутренних таблиц ABAP ↗
  3. Ключи в TYPES ↗
  4. Ключи в DATA ↗
  5. Выбор категории внутренней таблицы ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.