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

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

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

Неочевидная причина: перехват открытия внешнего отчета механизмами БСП

Начнем с самой частой, но наименее очевидной проблемы, с которой столкнулся автор исходного вопроса. Вы внесли все необходимые изменения, настроили ресурсы, открываете внешний отчет через меню «Файл – Открыть», но изменения упорно не применяются. Итоги не появляются, а колонка ведет себя странно.

Выясним причину. Если ваша конфигурация построена на базе Библиотеки Стандартных Подсистем (БСП) (например, 1С:Зарплата и Управление Персоналом, 1С:Бухгалтерия, 1С:ERP), то платформа перехватывает стандартное действие открытия внешнего файла. Если отчет с таким же внутренним именем уже зарегистрирован в справочнике ДополнительныеОтчетыИОбработки, БСП подменяет ваш измененный локальный файл на старую версию, сохраненную в виде двоичных данных в базе.

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

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

Технические причины отсутствия итогов в СКД

Если вы убедились, что запускается именно ваша измененная версия отчета, но итогов по добавленной колонке все равно нет, проанализируем настройки самой схемы компоновки данных. Рассмотрим основные ошибки и способы их исправления.

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

Почему сохраненные варианты отчета работают медленно после оптимизации запроса?

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

Ответ: Нет, текст запроса в вариантах отчета не сохраняется. Запрос всегда берется из актуальной схемы компоновки данных (из макета вашего отчета). Вариант отчета сохраняет только настройки компоновщика:

Почему же тогда оптимизированный отчет работает медленно при старых настройках? Проанализируем ситуацию:

Скорее всего, пользователь в своем варианте добавил какое-то поле в отбор или группировку через точку. Например, обратился к реквизиту ФизЛицо.Подразделение.Родитель.Наименование. В этом случае интеллектуальный механизм СКД динамически достраивает скрытые левые соединения к таблицам справочников, чтобы получить это поле. Ваша оптимизация запроса может полностью нивелироваться этими неоптимальными автосоединениями СКД.

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

← На главную