Как в 1С СКД получить итоги по произвольным группам подразделений?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При разработке сложных отчетов в Системе компоновки данных (СКД) часто возникает задача, когда стандартные итоги по группировкам не удовлетворяют требованиям заказчика. Например, необходимо вывести количество продукции по кварталам, но при этом сгруппировать итоги по подразделениям особым образом: объединить показатели "Цеха 1" и "Цеха 2" в одну общую сумму, а показатели "Цеха 3" вывести отдельно. Рассмотрим подробнее, какими способами можно решить эту задачу, избегая "лютых извращений" и лишнего программного кода.

Метод 1. Использование вспомогательного идентификатора группировки в запросе

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

В тексте запроса набора данных добавим новое поле, используя конструкцию ВЫБОР. Это позволит нам явно указать системе, какие подразделения должны принадлежать к одной группе итогов, а какие — к другой:


ВЫБРАТЬ
    Продажи.Подразделение КАК Подразделение,
    Продажи.Количество КАК Количество,
    ВЫБОР
        КОГДА Продажи.Подразделение.Наименование В ("Цех1", "Цех2")
            ТОГДА "Итог по основным цехам (1 и 2)"
        КОГДА Продажи.Подразделение.Наименование = "Цех3"
            ТОГДА "Итог по вспомогательному цеху (3)"
        ИНАЧЕ "Прочие подразделения"
    КОНЕЦ КАК ГруппаДляИтогов
ИЗ
    РегистрНакопления.Продажи КАК Продажи

После изменения запроса выполним следующие действия в настройках СКД:

  1. Перейдем на вкладку Настройки.
  2. Добавим новую группировку по полю ГруппаДляИтогов.
  3. Внутри этой группировки добавим детальные записи или группировку по полю Подразделение.

В результате СКД автоматически рассчитает промежуточные итоги для "Цеха 1" и "Цеха 2", так как они имеют одинаковое значение в поле ГруппаДляИтогов. Это решение является наиболее стабильным и понятным для системы компоновки.

Метод 2. Условные выражения в ресурсах

Выясним, как можно добиться аналогичного результата без изменения структуры группировок. Если нам нужно вывести общие итоги, но при этом отфильтровать значения внутри самого ресурса, мы можем использовать условия прямо на закладке Ресурсы.

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

Для ресурса КоличествоЦех1_2 используем выражение:

Сумма(Выбор Когда Подразделение.Наименование В ("Цех1", "Цех2") Тогда Количество Иначе 0 Конец)

Для ресурса КоличествоЦех3 используем:

Сумма(Выбор Когда Подразделение.Наименование = "Цех3" Тогда Количество Иначе 0 Конец)

Этот метод позволяет выводить разные итоги в одной строке отчета, что удобно для сравнительного анализа в кросс-таблицах или таблицах с фиксированными колонками.

Метод 3. Использование функции ВычислитьВыражение с отбором

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

Допустим, нам нужно в каждой строке отчета видеть общую сумму по "Цеху 3", независимо от того, какое подразделение выводится в текущей строке. Создадим вычисляемое поле и пропишем в нем следующее выражение:


ВычислитьВыражение("Сумма(Количество)", , "Общая", "Первая", "Последняя", "Подразделение.Наименование = 'Цех3'")

Проанализируем параметры функции:

Метод 4. Пользовательские поля выбора

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

Пошаговый алгоритм настройки:

  1. В настройках отчета переходим на вкладку Пользовательские поля.
  2. Добавляем новое Поле выбор.
  3. В таблице вариантов указываем условие: Подразделение В ("Цех1", "Цех2") и задаем заголовок "Группа А".
  4. Добавляем второе условие: Подразделение = "Цех3" и заголовок "Группа Б".
  5. В настройках структуры отчета заменяем обычную группировку Подразделение на наше новое пользовательское поле.

Важный нюанс: при использовании искусственных группировок (Метод 1 и Метод 4) важно следить за ролями полей. Если вы используете периодические показатели (например, обороты по кварталам), убедитесь, что поле подразделения имеет роль "Обязательное" на закладке Наборы данных, иначе система может некорректно агрегировать данные по периодам при сворачивании групп.

Заключение

Мы разобрали четыре различных подхода к получению итогов по произвольным группам в СКД. Выбор конкретного метода зависит от требований к визуализации: если нужно изменить иерархию строк — используем Метод 1 или Метод 4; если нужно вывести дополнительные колонки с итогами — Метод 2; а для сложных расчетов "вне контекста" идеально подойдет Метод 3. Помните, что использование механизмов СКД всегда эффективнее и предпочтительнее, чем ручной расчет итогов в коде перед выводом отчета.

← На главную