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