Как в СКД не выводить Общие итоги по колонке «Остаток» или настроить их корректный расчет

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

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

Метод 1. Управление расчетом итогов через вкладку «Ресурсы»

Рассмотрим самый простой и правильный с точки зрения архитектуры СКД способ. Если нам нужно, чтобы итоги считались по всем полям, кроме, например, Остаток, мы должны заглянуть в настройки ресурсов. Многие пытаются просто удалить выражение или оставить его пустым, но это приводит к синтаксической ошибке, так как ресурс обязан иметь агрегатную функцию.

Алгоритм действий:

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

Проанализируем ситуацию: теперь система будет рассчитывать сумму остатка внутри каждой группы, но, дойдя до самого нижнего уровня — общего итога по всему отчету — она не найдет инструкции для расчета и просто оставит ячейку пустой. Это элегантное решение, не требующее написания кода.

Метод 2. Визуальное скрытие через «Условное оформление»

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

Порядок настройки:

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

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

Метод 3. Настройка корректного расчета остатка (Роли полей)

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

Рассмотрим процесс детально:

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

После этой настройки СКД перестанет арифметически складывать значения 550 + 0 + 0. Вместо этого она возьмет значение из последней временной точки периода. В общих итогах отобразится актуальный остаток на дату окончания отчета.

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

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

Посмотрим на пример такого выражения:

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

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

Почему не работало «пустое выражение»?

Разберем типичную ошибку, упомянутую в обсуждениях. Когда разработчик пытается в ресурсах для поля Остаток просто удалить текст в колонке Выражение, 1С выдает «Синтаксическую ошибку». Это происходит потому, что механизм компоновки данных ожидает там обязательную агрегатную функцию (Сумма(), Максимум(), Среднее()). Если вы хотите оставить поле без итогов, используйте Метод 1 (ограничение по группировкам) или Метод 2 (условное оформление), но никогда не оставляйте поле ресурса с пустым выражением, если само поле добавлено в список ресурсов.

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

← На главную