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

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

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

Проверка прав доступа и ролей в расширении

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

Выполним следующие шаги для настройки прав:

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

Сброс кэша пользовательских настроек

Часто проблема кроется не в программном коде, а в механизме сохранения настроек отчета. Система компоновки данных сохраняет «вариант отчета», который выбрал пользователь. Если отчет ранее открывался, 1С запомнила старую структуру схемы, где вашего нового поля еще не существовало.

Разберем, как принудительно обновить структуру:

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

Отключение безопасного режима расширения

Проанализируем свойства расширения. По умолчанию при подключении расширения может быть установлен флаг «Безопасный режим». В этом режиме работа с метаданными и выполнение запросов к новым объектам могут быть ограничены профилями безопасности.

Попробуем следующее решение: зайдем в список расширений (Администрирование — Обслуживание — Расширения) и снимем галочку «Безопасный режим». Также убедимся, что снят флаг «Защита от опасных действий». После этого перезапустим сеанс и проверим доступность полей.

Программное формирование отчета в типовых решениях

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

Выясним причину ошибки через анализ кода:

Если в процедуре ПриКомпоновкеРезультата используется программная модификация текста запроса или инициализация компоновщика через специальные общие модули (например, ОтчетыОбщегоНазначения.ПриКомпоновкеРезультата), то макет, который вы правили в расширении, может быть перекрыт программным кодом. Система может брать текст запроса из программного кода основной конфигурации, который ничего не знает о ваших полях в расширении.

Для решения этой проблемы в расширении необходимо применить метод &Вместо или &После для процедуры формирования отчета и убедиться, что ваши изменения в СхемаКомпоновкиДанных учитываются перед выводом результата.

Использование вычисляемых полей для доступа к данным

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

Разберем алгоритм действий:

  1. В схеме СКД перейдем на закладку «Вычисляемые поля».
  2. Добавим новое поле. В колонке Выражение мы можем вызвать экспортную функцию общего модуля, передав туда ссылку на объект, у которого есть нужный нам реквизит в расширении.

Пример выражения для вычисляемого поля:

МойОбщийМодульСервер.ПолучитьРеквизитИзРасширения(Номенклатура)

В самом модуле код будет выглядеть следующим образом:


Функция ПолучитьРеквизитИзРасширения(СсылкаНаОбъект) Экспорт
    Возврат СсылкаНаОбъект.МойНовыйРеквизитИзРасширения;
КонецФункции

Таким образом, СКД получит значение через программный интерфейс, что часто помогает избежать ошибки «Поле не найдено» при работе с метаданными расширения.

Автозаполнение и вкладка «Компоновка данных»

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

Если вы добавили поле в ВЫБРАТЬ основного запроса, но не добавили его в настройки компоновки при выключенном автозаполнении, СКД увидит это поле в наборе данных, но не позволит использовать его в пользовательских настройках или структуре отчета, выдавая ошибку при попытке обращения к нему.

Итоги

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

← На главную