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