Согласно документации если мы выполняем цикл по таблице возвращаемой из функционального метода, конструкторных выражений, или табличных выражений, с последующим присвоением к символьным переменным (ASSIGNING) или ссылочным переменным REFERENCE INTO, среда создаёт временную таблицу для данного цикла.

If the internal table is specified as the return value or result of a functional method, a constructor expression, or a table expression, the value is persisted for the duration of the loop. Afterwards, it is no longer possible to access the internal table.

Пример:

Далее рассмотрим как это выглядит при анализе используемой памяти в отладке.

Читать далее

Виртуальная сортировка внутренних таблиц, добавленная в ABAP 7.52, описана всего одним методом — virtual_sort, класса CL_ABAP_ITAB_UTILITIES

Основная особенность виртуальной сортировки заключается в том, что вы получаете массив индексов относительно сортировки, без необходимости формирования копии таблицы (или её изменения).

Далее разберём особенности работы метода на простых примерах.

Читать далее

Оконная функция в SQL

Начиная с версии ABAP 7.54 в ABAP SQL появились так называемые оконные выражения. Оконные выражения — SQL выражения определяемые с помощью дополнения OVER в запросе, позволяют определить окна, как подмножества итогового результата запроса и выполнять над ним оконные функции.

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

Оконные функции являются частью стандарта SQL и даже если версия языка не позволит вам использовать их непосредственно в ABAP, всегда можно воспользоваться Native SQL (Так, по одной из задач, применение оконной функции внутри AMDP позволило ускорить работу запроса в десятки раз).

Далее на небольших примерах рассмотрим основные оконные функции и то, как с ними работать.

Читать далее

На OpenSAP анонсировали интересный курс посвящённый эффективному DevOps в решениях SAP, темы курса:

  • Week 1: Introduction to DevOps
  • Week 2: CI/CD with ABAP (On-Premise)
  • Week 3: Delivery of Cloud Applications
  • Week 4: Hybrid Change and Test Management
  • Week 5: Operation of Your Solution and Summary

До версии языка 7.51 чтобы предоставить фиксированный набор значений, например, для передачи в методы нашего API, приходилось использовать именованные константы и вручную реализовывать контроль ввода значений этих констант. Типичный пример стандартного API по работе с SALV:

Значением по умолчанию мы могли дать представление разработчикам использующим наше API, откуда они могут взять значения констант. Однако никакого контроля со стороны языка на этапе активации система не производит, что позволяет передавать в целом любые значения из диапазона типа I. Контроль на этапе выполнения уже оставался на совести разработчика API.

Начиная с версии языка 7.51 у нас появилась возможность объявлять так называемые перечисляемые типы. Причём контроль за вводом осуществляется уже на уровне языка. Далее разберём как именно их можно использовать.

Читать далее

Развитие языка ABAP в последнее время тесно связано с таким понятием как Code-To-Data, когда все расчёты принято выполнять на СУБД, а результатами пользоваться уже на сервере приложений. Основная причина такого перехода — развитие собственной СУБД HANA и более глубокая интеграция с её возможностями непосредственно в языке. Соответственно OpenSQL (или как сейчас принято называть ABAP SQL) постоянно расширяется новыми конструкциями языка, давая разработчикам все больше возможностей для переноса вычислений на СУБД.

Начиная с релиза ABAP 7.51 в языке стала доступна конструкция WITH позволяющая создавать подзапросы объединённые в рамках одного SQL выражения и использовать табличные результаты этих подзапросов для формирования общего результата. В какой-то степени конструкция WITH является более удобной альтернативой использованию глобальных временных таблиц и более быстрым вариантом нежели использование FOR ALL ENTRIES или нескольких последовательных запросов.

Далее на простом примере разберём как это работает.

Читать далее