При разработке сложных отчетов в Системе компоновки данных (СКД) часто возникает задача, когда стандартные итоги по группировкам не удовлетворяют требованиям заказчика. Например, необходимо вывести количество продукции по кварталам, но при этом сгруппировать итоги по подразделениям особым образом: объединить показатели "Цеха 1" и "Цеха 2" в одну общую сумму, а показатели "Цеха 3" вывести отдельно. Рассмотрим подробнее, какими способами можно решить эту задачу, избегая "лютых извращений" и лишнего программного кода.
Проанализируем самый надежный способ, который заключается в модификации текста запроса. Идея состоит в том, чтобы создать виртуальное поле, которое будет служить "ключом" для объединения нужных нам элементов. Разберем этот процесс по шагам.
В тексте запроса набора данных добавим новое поле, используя конструкцию ВЫБОР. Это позволит нам явно указать системе, какие подразделения должны принадлежать к одной группе итогов, а какие — к другой:
ВЫБРАТЬ
Продажи.Подразделение КАК Подразделение,
Продажи.Количество КАК Количество,
ВЫБОР
КОГДА Продажи.Подразделение.Наименование В ("Цех1", "Цех2")
ТОГДА "Итог по основным цехам (1 и 2)"
КОГДА Продажи.Подразделение.Наименование = "Цех3"
ТОГДА "Итог по вспомогательному цеху (3)"
ИНАЧЕ "Прочие подразделения"
КОНЕЦ КАК ГруппаДляИтогов
ИЗ
РегистрНакопления.Продажи КАК Продажи
После изменения запроса выполним следующие действия в настройках СКД:
ГруппаДляИтогов.Подразделение.В результате СКД автоматически рассчитает промежуточные итоги для "Цеха 1" и "Цеха 2", так как они имеют одинаковое значение в поле ГруппаДляИтогов. Это решение является наиболее стабильным и понятным для системы компоновки.
Выясним, как можно добиться аналогичного результата без изменения структуры группировок. Если нам нужно вывести общие итоги, но при этом отфильтровать значения внутри самого ресурса, мы можем использовать условия прямо на закладке Ресурсы.
В поле Выражение для ресурса Количество можно прописать логику, которая будет суммировать данные только по определенным критериям. Рассмотрим пример, когда нам нужно создать два отдельных ресурса для разных групп цехов:
Для ресурса КоличествоЦех1_2 используем выражение:
Сумма(Выбор Когда Подразделение.Наименование В ("Цех1", "Цех2") Тогда Количество Иначе 0 Конец)
Для ресурса КоличествоЦех3 используем:
Сумма(Выбор Когда Подразделение.Наименование = "Цех3" Тогда Количество Иначе 0 Конец)
Этот метод позволяет выводить разные итоги в одной строке отчета, что удобно для сравнительного анализа в кросс-таблицах или таблицах с фиксированными колонками.
Посмотрим на более продвинутый вариант с использованием мощной функции языка выражений СКД — ВычислитьВыражение. Многие ошибочно полагают, что она работает только в контексте текущей строки, но это не так. Четвертый параметр этой функции позволяет задать область анализа, а шестой — установить произвольный фильтр.
Допустим, нам нужно в каждой строке отчета видеть общую сумму по "Цеху 3", независимо от того, какое подразделение выводится в текущей строке. Создадим вычисляемое поле и пропишем в нем следующее выражение:
ВычислитьВыражение("Сумма(Количество)", , "Общая", "Первая", "Последняя", "Подразделение.Наименование = 'Цех3'")
Проанализируем параметры функции:
Рассмотрим ситуацию, когда отчет уже готов, и мы не хотим менять конфигурацию или запрос. В этом случае на помощь приходят Пользовательские поля, которые настраиваются прямо в режиме "1С:Предприятие".
Пошаговый алгоритм настройки:
Подразделение В ("Цех1", "Цех2") и задаем заголовок "Группа А".Подразделение = "Цех3" и заголовок "Группа Б".Подразделение на наше новое пользовательское поле.Важный нюанс: при использовании искусственных группировок (Метод 1 и Метод 4) важно следить за ролями полей. Если вы используете периодические показатели (например, обороты по кварталам), убедитесь, что поле подразделения имеет роль "Обязательное" на закладке Наборы данных, иначе система может некорректно агрегировать данные по периодам при сворачивании групп.
Мы разобрали четыре различных подхода к получению итогов по произвольным группам в СКД. Выбор конкретного метода зависит от требований к визуализации: если нужно изменить иерархию строк — используем Метод 1 или Метод 4; если нужно вывести дополнительные колонки с итогами — Метод 2; а для сложных расчетов "вне контекста" идеально подойдет Метод 3. Помните, что использование механизмов СКД всегда эффективнее и предпочтительнее, чем ручной расчет итогов в коде перед выводом отчета.