При работе с внешними отчетами и обработками в среде 1С:Предприятие 8.3 разработчики часто сталкиваются с ошибкой «Поле объекта не обнаружено (Хранилище вариантов)». Эта проблема обычно возникает в момент загрузки файла в справочник «Дополнительные отчеты и обработки», поэтому важно проводить регулярный анализ конфигураций, расширений, отчетов и обработок на наличие ошибок. Ошибка сигнализирует о том, что программные механизмы системы пытаются обратиться к свойству метаданных, которое отсутствует у данного объекта или не определено в его настройках. Рассмотрим подробно причины возникновения этой ситуации и разберем по шагам способы её решения.
Проанализируем механику работы платформы 1С с внешними файлами. Существует два основных типа файлов для расширения функционала: .erf (внешний отчет) и .epf (внешняя обработка), разработку которых удобнее вести через плагин для VS Code. Главное техническое различие между ними заключается в том, что у отчета (ERF) на уровне метаданных существует стандартное свойство Хранилище вариантов, предназначенное для работы с настройками компоновки данных (СКД). У обработки (EPF) такого свойства нет.
Выясним причину ошибки: если вы пытаетесь зарегистрировать файл как «Дополнительный отчет», но при этом сам файл является обработкой (EPF), или в коде регистрации допущена логическая ошибка, система выдаст искомое исключение. Рассмотрим пример кода в модуле объекта, который часто становится источником проблемы:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
// Ошибка может быть здесь:
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет;
...
Возврат ПараметрыРегистрации;
КонецФункции
Если ваш файл физически является обработкой, а в коде указан вид ДополнительныйОтчет, система БСП попытается прочитать свойство ХранилищеВариантов из метаданных файла и, не найдя его, прервет работу. Для исправления ситуации необходимо привести в соответствие вид обработки:
// Для внешней обработки (.epf) правильно использовать:
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка;
Бывают ситуации, когда файл имеет расширение .erf и регистрируется как отчет, но ошибка все равно сохраняется. Рассмотрим подробнее структуру самого отчета в Конфигураторе. Откройте ваш внешний отчет, перейдите в его свойства (корень дерева метаданных отчета) и найдите строку Хранилище вариантов.
В типовых конфигурациях (таких как БП 3.0, УТ 11, ERP) это поле должно быть заполнено значением ХранилищеВариантовОтчетов. Если это поле пустое, программный код БСП при регистрации может споткнуться на проверке:
Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено Тогда
РегистрационныеДанные.ХранилищеВариантов = ВнешнийОбъектМетаданные.ХранилищеВариантов.Имя;
КонецЕсли;
Что нужно сделать:
ХранилищеВариантовОтчетов (или аналогичное, принятое в вашей конфигурации).Проанализируем ситуацию, когда отчет переносится из старой базы в новую. В сообщениях форума упоминается проблема, когда система ругается на отсутствие полей типа Руководителю82. Это происходит потому, что в модуле внешнего отчета могут быть жестко прописаны обращения к подсистемам, которые были удалены или переименованы в новых релизах конфигураций.
Если в процессе регистрации или выполнения отчета возникает ошибка «Поле объекта не обнаружено», связанная с именем подсистемы, выполните следующие действия:
СведенияОВнешнейОбработке.Назначение и настройки команд.Метаданные.Подсистемы.Руководителю82), их следует закомментировать или заменить на актуальные.Рассмотрим пример корректировки назначения отчета:
// Вместо обращения к конкретным подсистемам, которые могут отсутствовать:
// ПараметрыРегистрации.Назначение.Добавить(Метаданные.Подсистемы.СтараяПодсистема);
// Используйте строковые идентификаторы объектов, к которым привязан отчет:
ПараметрыРегистрации.Назначение.Добавить("Справочник.Контрагенты");
ПараметрыРегистрации.Назначение.Добавить("Документ.РеализацияТоваровУслуг");
Если вы работаете в полностью самописной конфигурации, где БСП внедрена частично или отсутствует вовсе, добавление «Хранилища вариантов» в свойства отчета может не помочь, если само хранилище не определено в корне всей конфигурации. Посмотрим на настройки всей базы:
Без этой глобальной настройки платформа может игнорировать локальные настройки внешних файлов отчетов.
Иногда после внесения всех исправлений ошибка продолжает появляться. Рассмотрим нюанс с кэшированием метаданных. Платформа 1С может кэшировать структуру внешней обработки при неудачной попытке регистрации. Чтобы гарантированно применить изменения, выполните следующие шаги:
ПараметрыРегистрации.Версия.ДополнительныеОтчетыИОбработки (процедура загрузки/регистрации) и посмотрите, на каком именно объекте спотыкается система. Часто это помогает увидеть, что программа обращается вовсе не к тому «Хранилищу», о котором вы думали.Важный момент для разработчиков: Если ваш отчет не использует сложную систему вариантов СКД и строится на простой форме, попробуйте изменить его вид на ДополнительнаяОбработка. Это самый быстрый способ обойти проверки БСП, связанные с ХранилищемВариантов, при этом функциональность отчета для пользователя никак не изменится.