Как настроить расчет и видимость итогов по строкам в отчетах на СКД

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке отчетов в Системе компоновки данных (СКД) программисты часто сталкиваются с особенностями расчета итогов. Типичный пример — отчет типа «Ведомость по денежным средствам» или «Ведомость по товарам на складах», где приход и расход должны суммироваться нарастающим итогом, а конечный остаток в сводной колонке должен показывать актуальное сальдо на конец периода, а не сумму всех промежуточных остатков. Разберем подробно, как управлять этими механизмами и как настраивать видимость общих итогов.

Настройка видимости сводной колонки «Итого»

Первый вопрос, который часто возникает: как добавить или убрать общую колонку «Итого» в горизонтальной плоскости отчета. Если ваш отчет построен с использованием группировок колонок (например, по дням или складам), СКД по умолчанию добавляет справа сводную колонку.

Проанализируем шаги для изменения этой настройки:

  1. Перейдем на закладку Настройки в схеме компоновки данных.
  2. Выберем нужный вариант отчета или конкретную группировку в дереве настроек.
  3. Перейдем на вкладку Другие настройки (обычно находится в нижней части окна).
  4. Найдем параметр Расположение общих итогов по горизонтали.
  5. Доступны следующие значения:
    • Нет — колонка «Итого» будет полностью скрыта.
    • Начало — сводная колонка появится перед детальными колонками.
    • Конец — классический вариант, колонка в конце таблицы.
    • Начало и конец — итоги будут дублироваться с обеих сторон.

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

Почему остатки считаются не так, как обороты: магия ролей полей

Рассмотрим ситуацию: почему в колонке «Итого. Приход» суммы складываются, а в «Итого. Конечный остаток» отображается значение на последнюю дату. Это поведение определяется не формулой на вкладке «Ресурсы» (там обычно стоит просто Сумма(Поле)), а настройкой Роли на уровне набора данных.

Разберем, как это работает «под капотом» системы:

Когда мы указываем для поля роль Начальный остаток или Конечный остаток, СКД перестает применять к нему обычное арифметическое сложение при расчете итогов по периодам. Вместо этого система анализирует временную шкалу (поля периода):

Для корректной работы этого механизма необходимо выполнить следующие действия на закладке Наборы данных:

  1. В колонке Роль нажать на кнопку редактирования.
  2. Указать тип остатка (Начальный, Конечный или Оборот).
  3. Обязательно указать Имя (идентификатор группы), которое должно быть одинаковым для связанной пары начального и конечного остатка.
  4. Указать поле Период, по которому СКД будет определять хронологию записей.

Если вы уберете роль (установите «Без роли»), как было предложено в обсуждении на форуме, СКД начнет воспринимать это поле как обычное число и просто просуммирует все остатки за каждый день, что приведет к неверному результату с точки зрения бухгалтерского и управленческого учета.

Использование функции ВычислитьВыражение в ресурсах

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

Пример формулы для ресурса СуммаКонечныйОстаток:


ВычислитьВыражение("Сумма(СуммаКонечныйОстаток)", "Период", "Группировка", "Последняя")

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

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

ВычислитьВыражение("Сумма(СуммаОборот)", , "Группировка", "Первая", "Текущая")

Эта формула суммирует значения от самой первой записи до текущей строки включительно.

Влияние виртуальных таблиц и автозаполнения

Выясним причину, почему в одних отчетах роли расставляются сами, а в других их нужно настраивать вручную. В 1С при использовании в запросе виртуальных таблиц (например, РегистрНакопления.ОстаткиИОбороты) и включенном флажке Автозаполнение в СКД, система автоматически назначает роли полям.

Если вы выбираете поля типа СуммаНачальныйОстаток и СуммаКонечныйОстаток, СКД сама проставит им соответствующие роли. Однако, если вы строите запрос к физической таблице или объединяете несколько таблиц, автозаполнение может сработать некорректно. В таких случаях программисту необходимо:

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

← На главную