Почему возникает ошибка «Поле не найдено» в СКД и как её исправить?

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

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

Причина ошибки: порядок расчета полей и ресурсов в СКД

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

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

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

Способ 1. Перенос выражения на вкладку «Вычисляемые поля»

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

  1. Перейдем на вкладку Вычисляемые поля схемы компоновки данных.
  2. Добавим поле (например, ЗачетАвансовПрошлогоГода) и укажем его формулу в колонке Выражение.
  3. Перейдем на вкладку Ресурсы.
  4. Для зависимого ресурса (например, ПогашениеВсего) укажем стандартное выражение агрегации:

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

Способ 2. Суммирование исходных полей без вложенных агрегаций

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

Посмотрим на пример правильного оформления выражения на вкладке Ресурсы для поля ПогашениеВсего:

Сумма(ЕстьNull(Поле1, 0)) + Сумма(ЕстьNull(Поле2, 0))

Или через единую агрегатную функцию:

Сумма(ЕстьNull(Поле1, 0) + ЕстьNull(Поле2, 0))

Способ 3. Использование специализированных функций СКД для итогов

Если показатель формируется только на уровне группировок (например, с помощью условий по иерархии) и перенести его в детальные записи невозможно, воспользуемся встроенными функциями языка выражений СКД:

  1. Функция ВычислитьВыражение(): позволяет рассчитать значение в контексте нужной группировки или общего итога без прямого суммирования ресурса.
  2. Функция ВычислитьВыражениеСГруппировкойМассив(): собирает массив значений ресурса по подчиненным группировкам, к которому затем применяется агрегатная функция:

Сумма(ВычислитьВыражениеСГруппировкойМассив("ЗачетАвансовПрошлогоГода", "Контрагент"))

Другие неочевидные причины ошибки «Поле не найдено»

Если в формулах ресурсов все настроено корректно, но ошибка сохраняется, проанализируем следующие моменты:

  1. Настройки пользовательского макета: если в отчете используется индивидуальный макет оформления (вкладка Макеты), а в ячейке макета указан параметр с именем поля, это поле обязательно должно быть добавлено в список Выбранные поля соответствующей группировки. Если поле исключено из выбранных, макет не сможет получить его значение.
  2. Ограничения полей в наборе данных: проверим вкладку Наборы данных. Если для поля установлены флаги ограничения (запрет выбора или запрет использования в группировках), обращение к нему в вычислениях вызовет исключение.
  3. Кэш пользовательских настроек: при переименовании или перемещении полей сохраненные пользовательские варианты отчета могут хранить ссылки на старую структуру схемы. Сбросим настройки отчета («Еще» — «Установить стандартные настройки») для проверки работы в чистом варианте.
← На главную