РАЗРАБОТКА ABAPP1L2

ABAP: выражения, текст, время и динамические данные

Как читать выражения и поток выполнения ABAP, обрабатывать текст и время, безопасно работать со ссылками, field symbols и динамическими типами.

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

ABAP: выражения, текст, время и динамические данные#

Эта статья связывает пять языковых тем: управление выполнением и выражения (ABAP-03), текстовую обработку (ABAP-06), даты и время (ABAP-07), ссылки и field symbols (ABAP-08), динамические типы и introspection (ABAP-09). Примеры синтаксиса зависят от версии ABAP и языковой версии репозитория. Сверяйте их в документации целевого релиза; статья не утверждает, что код компилировался или запускался в SAP.

Выражение или последовательность операторов#

Операторы IF, CASE, циклы и вызовы процедур задают поток выполнения. Выражения COND, SWITCH, VALUE, NEW, CONV, CORRESPONDING и REDUCE вычисляют значение и могут уменьшать число временных переменных. Итерационное выражение FOR используется в конструкторах и редукциях внутренних таблиц. Выбирайте форму по читаемости контракта, а не по краткости: многоуровневое вложение может скрывать порядок вычисления, преобразования и обработку пустого набора.

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

Текст, шаблоны и локализация#

Строковые шаблоны удобны для сборки текста и форматирования значения, но текстовое представление не заменяет типизированный контракт. Перед объединением форматированных чисел или дат с текстом определите формат, язык и часовой пояс. Не используйте локализованную строку как машинный ключ или значение для обратного преобразования без явно заданного формата.

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

Даты, время и временные зоны#

Дата календарного события (DATS) не является моментом времени. Время суток (TIMS) не содержит дату и временную зону. Метка времени UTC описывает момент и пригодна для упорядочивания событий, но для пользовательского отображения требуется явная временная зона. Системные поля даты и времени могут отражать системную или пользовательскую зону; само их имя не означает, что это UTC.

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

Ссылки и field symbols#

Ссылка на данные (REF TO data) хранит доступ к объекту данных; IS BOUND проверяет, назначена ли ссылка. Статический тип задаёт операции, разрешённые при компиляции, а динамический тип описывает фактический объект во время выполнения. Разыменование и изменение по ссылке меняют исходный объект, поэтому передавайте такие ссылки только с понятным контрактом владения и времени жизни.

Field symbol похож на типизированный псевдоним уже существующего объекта: он не является отдельной копией значения. Присваивание делает его связанным с объектом, а запись через field symbol меняет этот объект. Перед доступом проверяйте, что назначение выполнено (IS ASSIGNED); динамическое присваивание отдельно обрабатывает неудачу. После завершения области или смены объекта не сохраняйте предположение, что псевдоним всё ещё связан с прежней строкой.

Динамические типы и introspection#

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

Проверьте динамическое имя до передачи его в динамический оператор. Не принимайте имена компонентов, типов или фрагменты синтаксиса напрямую от внешнего пользователя: проверяйте их по allowlist и ограничивайте допустимые операции. Обрабатывайте отсутствие компонента, несовместимый тип, не назначенную ссылку и исключение создания типа. Документация SAP NetWeaver AS ABAP 7.52 о dynamic programming не доказывает доступность тех же API в ABAP Cloud или современном S/4HANA; для облачной модели отдельно проверяйте released API и языковую версию.

Диагностика и проверка#

  1. Найдите место, где значение впервые становится динамическим или преобразуется в текст.
  2. Запишите тип, формат, временную зону, локаль и возможные пустые/некорректные значения.
  3. Проверьте назначение ссылки или field symbol непосредственно перед доступом и изменением.
  4. Для динамических имён используйте allowlist и проверяйте реальный тип до операции.
  5. Добавьте тесты на пустой набор, неверную дату, границы периода, Unicode, отсутствующий компонент и несовместимый тип.
  6. Проверьте синтаксис, released API и поведение на целевом релизе. Локальный текстовый просмотр ABAP-кода не заменяет компиляцию, ABAP Unit или runtime.

Область применимости и источники#

Материал является частичным языковым справочником. Источники по ABAP Cloud и Standard ABAP относятся к разным документированным контекстам; раздел о динамическом программировании ссылается на SAP NetWeaver AS ABAP 7.52 и не переносится на облачную среду. В этой рабочей среде нет подтверждённой SAP-компиляции или runtime-проверки; источники зарегистрированы как метаданные без сохранённых локальных снимков.

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

  1. Character String and Byte String Processing ↗
  2. Validity of Date Fields and Time Fields ↗
  3. System Fields for Date and Time ↗
  4. Field Symbols ↗
  5. Dynamic Programming (SAP NetWeaver AS ABAP 7.52) ↗
  6. Data References ↗
  7. FOR, Iteration Expressions ↗

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