При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с особенностями расчета итогов. Типичный пример — отчет типа «Ведомость по денежным средствам» или «Ведомость по товарам на складах», где приход и расход должны суммироваться нарастающим итогом, а конечный остаток в сводной колонке должен показывать актуальное сальдо на конец периода, а не сумму всех промежуточных остатков. Разберем подробно, как управлять этими механизмами и как настраивать видимость общих итогов.
Первый вопрос, который часто возникает: как добавить или убрать общую колонку «Итого» в горизонтальной плоскости отчета. Если ваш отчет построен с использованием группировок колонок (например, по дням или складам), СКД по умолчанию добавляет справа сводную колонку.
Проанализируем шаги для изменения этой настройки:
Важно помнить, что аналогичная настройка существует и для вертикальных итогов (по строкам) — параметр Расположение общих итогов по вертикали. Если вам нужно скрыть итоги только для определенных ресурсов, это можно сделать через настройки выбранных полей в конкретной группировке, однако глобальное управление осуществляется именно здесь.
Рассмотрим ситуацию: почему в колонке «Итого. Приход» суммы складываются, а в «Итого. Конечный остаток» отображается значение на последнюю дату. Это поведение определяется не формулой на вкладке «Ресурсы» (там обычно стоит просто Сумма(Поле)), а настройкой Роли на уровне набора данных.
Разберем, как это работает «под капотом» системы:
Когда мы указываем для поля роль Начальный остаток или Конечный остаток, СКД перестает применять к нему обычное арифметическое сложение при расчете итогов по периодам. Вместо этого система анализирует временную шкалу (поля периода):
Для корректной работы этого механизма необходимо выполнить следующие действия на закладке Наборы данных:
Если вы уберете роль (установите «Без роли»), как было предложено в обсуждении на форуме, СКД начнет воспринимать это поле как обычное число и просто просуммирует все остатки за каждый день, что приведет к неверному результату с точки зрения бухгалтерского и управленческого учета.
Иногда стандартных ролей недостаточно, или требуется реализовать сложную логику расчета итогов. В этом случае на помощь приходит функция ВычислитьВыражение на закладке Ресурсы. Рассмотрим ситуацию, когда нам нужно явно указать системе, как считать итог по группировке.
Пример формулы для ресурса СуммаКонечныйОстаток:
ВычислитьВыражение("Сумма(СуммаКонечныйОстаток)", "Период", "Группировка", "Последняя")
Проанализируем параметры этой функции:
"Сумма(СуммаКонечныйОстаток)" — выражение, которое нужно рассчитать."Период" — поле, по которому определяется порядок."Группировка" — область расчета."Последняя" — ключевое слово, заставляющее СКД взять значение из последней записи.Использование ВычислитьВыражение позволяет гибко настраивать отчеты, даже если данные получены не из виртуальных таблиц остатков, а из произвольных запросов. Например, если вы хотите рассчитать нарастающий итог оборота, можно использовать следующий синтаксис:
ВычислитьВыражение("Сумма(СуммаОборот)", , "Группировка", "Первая", "Текущая")
Эта формула суммирует значения от самой первой записи до текущей строки включительно.
Выясним причину, почему в одних отчетах роли расставляются сами, а в других их нужно настраивать вручную. В 1С при использовании в запросе виртуальных таблиц (например, РегистрНакопления.ОстаткиИОбороты) и включенном флажке Автозаполнение в СКД, система автоматически назначает роли полям.
Если вы выбираете поля типа СуммаНачальныйОстаток и СуммаКонечныйОстаток, СКД сама проставит им соответствующие роли. Однако, если вы строите запрос к физической таблице или объединяете несколько таблиц, автозаполнение может сработать некорректно. В таких случаях программисту необходимо:
Таким образом, корректные итоги в СКД — это результат синергии трех настроек: правильно выбранных полей в запросе, настроенных ролей в наборе данных и корректных формул в ресурсах. Понимая эти принципы, вы сможете создавать отчеты любой сложности с гарантированно точными данными.