Найти в Дзене
Блог 1С программиста

Пример использования функции ВычислитьВыражениеСГруппировкойМассив в отчете на СКД

Оглавление

Появилась задача в которой в отчете на СКД на разных уровнях Группировки необходимо использовать разные агрегатные функции. А именно, на нижнем уровне Группировки рассчитать Ресурс как Максимум(), а на последующих группировках как Сумма().

Данная задача была решена с помощью внутренней функции СКД ВычислитьВыражениеСГруппировкойМассив.

Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.
Синтаксис:
ВычислитьВыражениеСГруппировкойМассив (Выражение, ВыраженияПолейГруппировки, ОтборЗаписей, ОтборГруппировок)
● Выражение – тип Строка. Выражение, которое нужно вычислить. Например, Сумма(СуммаОборот);
● ВыраженияПолейГруппировки – выражения полей группировки, перечисленные через запятую. Например, «Контрагент, Партия»;
● ОтборЗаписей – выражение, применяемое к детальным записям. Например, ПометкаУдаления = Ложь. Если в данном параметре используется агрегатная функция, то при выполнении компоновки данных возникнет ошибка;
● ОтборГруппировок – отбор, применяемый к групповым записям. Например: Сумма(СуммаОборот) > &Параметр1.

Внутренние функции можно использовать в любых выражениях СКД: Ресурсах, Вычисляемых полях, Пользовательских полях, Параметрах, Параметров предопределенных макетов, Связях набора данных, Полях набора данных.

Более подробно о функциях языка выражений СКД можно почитать на ИТС.

Постановка задачи

Предположим у нас есть две таблицы с разным уровнем детализации данных, которые мы свели в одну:

Нам нужно на основании этих данных сформировать такой отчет на СКД:

-2

т.е. «Рабочие дни» по группировке «Месяц» рассчитать, как Максимум(), а по группировкам «Сотрудник» и «Общие итоги» Сумма().

Реализация

Получим сводные данные запросом и настроим отчет следующим образом:

1. На вкладке «Настройки» создадим отчет нужной структуры:

-3

2. На владке «Ресурсы» для «Рабочих дней» установим следующее выражение:

-4

Сумма(ВычислитьВыражениеСГруппировкойМассив(«Максимум(РабочихДней)», «Сотрудник, Месяц»))

Т.е. мы на каждом уровне группировки нашу сводную таблицу СГРУППИРОВАЛИ ПО Сотрудник, Месяц вычислив Максимум(РабочихДней) и далее Суммируем получившийся массив в рамках своих группировок.

3. Для группировки «ВидРасчета» на вкладке «Выбранные поля» удаляем «авто» и набираем нужные поля. Чтобы избежать повторного вывода ресурса «Рабочие дни», исключаем его из списка.

-5

И получаем нужный нам результат. Пример с отчетом можно скачать по ссылке в конце статьи.