Группировка в цикле ABAP LOOP GROUP

В версии 7.40 в ABAP появилась возможность группировать данные в цикле и обрабатывать эти группы. Группировка в цикле ABAP не только уменьшает количество строк кода, но и улучшает производительность. Здесь на примере разберу варианты использования этой новой конструкции языка ABAP.

Группировка в цикле ABAP GROUP BY

В этой статье на примере задачи по суммированию в цикле и выделению промежуточных итогов разберём использование дополнения LOOP GROUP BY. Задача состоит в группировке:

  • По сбытовым организациям и заводам
  • По материалам
  • Так же было требование выводить и подробные записи без группировки. Поэтому нельзя было организовать группировку раньше, например на уровне базы данных.

LOOP GROUP ABAP Группировка в цикле

Суммирование в цикле ABAP.

На примере подробно разберу каждую строку кода по суммированию в цикле с использованием группировки ABAP и в конце статьи приведу весь код целиком для удобства копирования.

Цикл по основной таблице где начинаем разбивать записи по группам для дальнейшей обработки в подчинённом цикле:

“1” – DATA(ls_data) – динамически определяем структуру.
“2” – Задаём поля, по которым хотим сгруппировать записи таблицы.
“3” – group_ref_werks – Динамически определяем переменную в которую по очереди будут помещаться группы записей с одинаковыми ключевыми полями.

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

“4” – Используя конструкцию LOOP GROUP пройдём по выделенной группе записей group_ref_werks.
“5” – Здесь можем обработать группу цикла и не группировать, но нам нужна дополнительная группировка ещё и по материалу.
“6” – Помещаем подгруппу уже по новому ключу состоящему не из двух полей, как на уровне выше, а из трёх.

Обрабатываем записи в цикле с двойной группировкой по трём полям, производим суммирование и другие необходимые операции:

“7” – Обрабатываем группу полученную выше и суммируем значения всех записей находящихся в ней.
“8” – Если это первая строка, из группы, то копируем значения.
“9” – Выйдя из этого цикла обработана вся первая группа с одинаковым набором трёх полей.

“10” – После этого можно произвести расчёт зависимых от суммированных полей.
“11” – Сохраняем полученную запись суммы в структуру результата для дальнейшего использование.
“12” – Далее суммируем значения уже для внешнего цикла который проходит по уникальным значениям внешней группировки.
“13” – После выхода из цикла так же обрабатываем необходимым образом поля сумм.

“14” – И сохраняем данные по этому проходу цикла в итоговую таблицу.

Закрывается головной цикл и по итогу мы получили результаты суммирования в нескольких разрезах. Полный код и текст комментариев ниже:

Итоговый код программы ABAP по группировке в цикле с комментариями

  • “1” – DATA(ls_data) – динамически определяем структуру.
  • “2” – Задаём поля, по которым хотим сгруппировать записи таблицы.
  • “3” – group_ref_werks – Динамически определяем переменную в которую по очереди будут помещаться группы записей с одинаковыми ключевыми полями.
  • “4” – Используя конструкцию LOOP GROUP пройдём по выделенной группе записей group_ref_werks.
  • “5” – Здесь можем обработать группу цикла и не группировать, но нам нужна дополнительная группировка ещё и по материалу.
  • “6” – Помещаем подгруппу уже по новому ключу состоящему не из двух полей, как на уровне выше, а из трёх.
  • “7” – Обрабатываем группу полученную выше и суммируем значения всех записей находящихся в ней.
  • “8” – Если это первая строка, из группы, то копируем значения.
  • “9” – Выйдя из этого цикла обработана вся первая группа с одинаковым набором трёх полей.
  • “10” – После этого можно произвести расчёт зависимых от суммированных полей.
  • “11” – Сохраняем полученную запись суммы в структуру результата для дальнейшего использование.
  • “12” – Далее суммируем значения уже для внешнего цикла который проходит по уникальным значениям внешней группировки.
  • “13” – После выхода из цикла так же обрабатываем необходимым образом поля сумм.
  • “14” – И сохраняем данные по этому проходу цикла в итоговую таблицу.

Пример использования группировки в цикле ABAP на реальных задачах:

  • При загрузке из Excel файла данных в SAP систему удобно группировать данные по строкам с использованием LOOP AT GROUP. Пример использования можно посмотреть в статье загрузка данных из Excel.

Добавить комментарий