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

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

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

Причина 1: Кэширование пользовательских настроек

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

Как это исправить:

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

  1. Откроем отчет в режиме «1С:Предприятие».
  2. Перейдем в меню «Настройки».
  3. Нажмем кнопку «Установить стандартные настройки» (в некоторых интерфейсах это команда «Еще» — «Установить стандартные настройки»).

После этого платформа перечитает схему из Конфигуратора, и ваше вычисляемое поле должно появиться в списке доступных и выбранных.

Причина 2: Ошибки в сложных выражениях с ВычислитьВыражение

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

Посмотрим на пример сложной формулы, которую пытался использовать автор темы:


Выбор Когда ОплатаНаличные = 0 ИЛИ Выручка = 0
    Тогда 0
Иначе
    выбор когда ОплатаНаличные = СуммаДокумента 
        тогда Выручка 
    Иначе 
        выбор когда Выручка < СуммаДокумента - ВычислитьВыражение("Сумма(Выручка)", , "Группировка", "Первая", "Текущая") 
        Тогда Выручка 
        Иначе  СуммаДокумента - ВычислитьВыражение("Сумма(Выручка)", , "Группировка", "Первая", "Текущая") 
        конец 
    конец 
Конец

В данном коде используется функция ВычислитьВыражение. Проанализируем важный нюанс: параметр "Группировка" должен точно соответствовать имени группировки, заданной в настройках отчета. Если вы переименовали группировку или структура отчета изменилась, функция вернет ошибку, и все поле «исчезнет» из вывода.

Для повышения стабильности работы такое выражение можно оптимизировать, сократив избыточные вложенные условия Выбор:


Выбор Когда ОплатаНаличные = 0 ИЛИ Выручка = 0
    Тогда 0
Иначе
    выбор когда ОплатаНаличные = СуммаДокумента ИЛИ Выручка < СуммаДокумента - ВычислитьВыражение("Сумма(Выручка)", , "Группировка", "Первая", "Текущая") 
        Тогда Выручка 
        Иначе  СуммаДокумента - ВычислитьВыражение("Сумма(Выручка)", , "Группировка", "Первая", "Текущая") 
    конец 
Конец

Причина 3: Конфликт вычисляемого поля и ресурсов

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

Что нужно проверить:

  1. Перейдем на вкладку «Ресурсы».
  2. Убедимся, что для нашего поля задана формула (например, Сумма(ИмяПоля)).
  3. Проверим колонку «Рассчитывать по...». Если там выбраны конкретные группировки, а в отчете вы используете другие, то в «чужих» группировках поле выводиться не будет.

Причина 4: Обработка значений NULL

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

Рекомендуется всегда оборачивать числовые поля в функцию ЕстьNULL. Рассмотрим пример:


// Вместо этого:
Поле1 + Поле2

// Используем это:
ЕстьNULL(Поле1, 0) + ЕстьNULL(Поле2, 0)

Причина 5: Ограничения прав доступа (RLS) и функциональные опции

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

Причина 6: Настройки доступности поля

Проверим вкладку «Вычисляемые поля» в СКД. У каждого поля есть набор свойств в правой колонке. Обратите внимание на флажки в группе «Ограничения»:

Убедитесь, что флаг «Ограничение поля» снят, иначе оно не попадет в отчет, даже если вы его туда принудительно добавили ранее.

Заключение

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

← На главную