РАЗРАБОТКА ABAPP1L2

ABAP: финансовые алгоритмы и измерение производительности

Как строить сверку, группировку и распределение с явными инвариантами, выбирать ключи внутренних таблиц и измерять узкие места. SAP-запуск не заявляется.

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

ABAP: финансовые алгоритмы и измерение производительности#

Финансовый алгоритм должен быть объяснимым до оптимизации. Сначала определяют единицу обработки, ключи сопоставления, точность, повторную обработку и контрольные инварианты. Затем измеряют конкретный запуск и оптимизируют найденную горячую точку. Этот материал объединяет синтетические примеры финансовых алгоритмов и рекомендации по измерению. Он не является отчётом о выполнении ABAP.

Контракт финансового преобразования#

Для сверки, группировки и распределения сначала зафиксируйте:

  • что означает одна входная и одна выходная строка;
  • какие поля образуют бизнес-ключ и какие значения считаются отсутствующими;
  • как обрабатываются дубликаты, повторная загрузка и конфликтующие версии;
  • какие правила применяются к валюте, точности и округлению;
  • какие равенства должны выполняться после преобразования.

Например, строка проводки в учебной сверке может различаться по ledger, компании, финансовому году, документу, позиции и типу валюты. Это пример ключа для модели, а не универсальная SAP-таблица или готовая рекомендация по каждому отчёту. Если сравнить только итоговые суммы, противоположные ошибки могут взаимно погаситься. Поэтому проверяйте также состав по ключу, количество строк, дубликаты и необъяснённые остатки.

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

Где растёт вычислительная стоимость#

Внутренние таблицы ABAP имеют категории и ключи с разным поведением. В документации SAP указаны следующие общие свойства доступа:

Категория Доступ и ограничение Типичное применение
STANDARD Есть индекс; чтение по ключу может требовать последовательного поиска Быстрое наполнение и обработка по индексу
SORTED Строки поддерживают порядок ключа; поиск по ключу имеет логарифмическую стоимость Диапазон по начальным компонентам ключа и упорядоченный проход
HASHED Только доступ по уникальному ключу; индексного доступа нет Частые точечные обращения по составному уникальному ключу

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

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

Если результат зависит от порядка обработки, порядок должен быть явным. Документация SAP отмечает, что SORT не сохраняет относительный порядок равных ключей по умолчанию; добавление STABLE сохраняет его для выбранной сортировки. Ещё надёжнее включить в ключ бизнес-правило разрешения равенств, чтобы итог не зависел от случайного порядка загрузки.

План измерения#

  1. Сформулируйте вопрос: время CPU, число чтений, повторяющийся SQL, переносимый объём строк или память.
  2. Зафиксируйте входной набор и его размер, систему, версию, параметры и исходный результат.
  3. Повторите одинаковый запуск в сопоставимых условиях и сравните распределение времени, а не один случайный замер.
  4. Для кода ABAP используйте поддерживаемую в целевой системе трассировку или ABAP Profiler, чтобы найти затраты по вызовам и операторам.
  5. Если симптом связан с базой данных, используйте SQL trace и исследуйте исполненные обращения, длительность, число строк и повторяющиеся запросы.
  6. Вносите одно изменение за раз и после него повторно проверяйте финансовые инварианты и результат.

ABAP Profiler показывает, где расходуется время выполнения программы, и помогает выбирать участок для рефакторинга. SQL trace отвечает на вопрос о выполнении запросов к базе, а не заменяет анализ CPU внутри ABAP. Трассировку следует ограничивать задачей и выключать после замера, чтобы не собирать лишние данные.

Что проверяет локальная модель и чего она не доказывает#

В проекте есть синтетические модели распределения, бюджетного потребления, замены прогнозного денежного потока фактом и сверки версий строк. Их локальные тесты могут проверить арифметику, детерминированность и инварианты для заданных данных. Они не измеряют скорость ABAP internal table, не запускают SAT, ABAP Profiler или SQL trace, не компилируют ABAP и не подтверждают поведение SAP.

Для целевой реализации нужен отдельный ABAP Unit набор, а для системных границ - интеграционная проверка в соответствующей версии системы. Фактический отчёт измерения должен содержать вход, параметры трассы, версии и результат до и после изменения. Без такого отчёта нельзя утверждать, что оптимизация ускорила SAP-процесс.

Источники и границы применимости#

Ссылки SAP описывают ключи и сортировку внутренних таблиц, профилирование и анализ SQL. Одна из страниц трассировки помечена версией ABAP Platform 2025 FPS02. Возможности и инструменты следует сверять с целевым релизом и настройками. В этой среде источники сохранены как метаданные; исходные страницы не архивировались, а SAP-система не подключена.

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

  1. Distinguishing Table Keys in Internal Tables ↗
  2. Sorting Table Content ↗
  3. Profiling ABAP Code ↗
  4. Analyzing SQL Statements, ABAP Platform 2025 FPS02 ↗

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