Как исправить ошибку «Значение не является значением объектного типа (Метаданные)» при создании РИБ на базе БСП

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

При внедрении Библиотеки Стандартных Подсистем (БСП) в «чистую» конфигурацию программисты часто сталкиваются с трудностями при настройке распределенных информационных баз (РИБ). Типичная ситуация: в главном узле всё настроено корректно, начальный образ создан, но при первом запуске подчиненного узла на этапе первоначального заполнения (обычно на 5-10%) система выдает ошибку: «Значение не является значением объектного типа (Метаданные)». Рассмотрим подробнее, почему это происходит и как правильно подготовить конфигурацию для работы с механизмами обмена БСП.

Выясняем причину ошибки

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

Когда подчиненный узел запускается впервые, он пытается выполнить процедуры обновления. Если в коде конфигурации отсутствуют обязательные привязки к подсистемам БСП, библиотека не может определить версию программы и состав объектов, что приводит к возврату значения Неопределено вместо ожидаемого объекта метаданных. Именно это и вызывает фатальный сбой.

Шаг 1. Регистрация конфигурации как подсистемы БСП

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

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


#Область ПрограммныйИнтерфейс

// Заполняет основные сведения о конфигурации для БСП.
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
	
	// Укажите имя вашей конфигурации, как оно задано в корне метаданных
	Описание.Имя = "УправлениеОтделомИТ";
	
	// Укажите текущую версию вашей конфигурации
	Описание.Версия = "1.0.0.1";
	
	// Указываем, что наша конфигурация зависит от БСП
	Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");
	
КонецПроцедуры

// Обработчик, который вызывается после завершения обновления ИБ
Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт
	
	// Вызываем стандартную интеграцию подсистем БСП
	ИнтеграцияПодсистемБСП.ПослеОбновленияИнформационнойБазы(ПредыдущаяВерсия, ТекущаяВерсия, ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим);
	
КонецПроцедуры

// Остальные обязательные процедуры-заглушки для подсистемы обновления
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
КонецПроцедуры

Процедура ПередОбновлениемИнформационнойБазы Экспорт
КонецПроцедуры

Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт
КонецПроцедуры

Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт
КонецПроцедуры

Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт
КонецПроцедуры

Процедура ПриЗавершенииПереходаСДругойПрограммы(ПредыдущееИмяКонфигурации, ПредыдущаяВерсияКонфигурации, Параметры) Экспорт
КонецПроцедуры

#КонецОбласти

Важно: в строке Описание.Имя = "УправлениеОтделомИТ"; необходимо указать именно то имя, которое вы присвоили своей конфигурации в конфигураторе. Это позволит БСП сопоставить код модуля с метаданными базы.

Шаг 2. Подключение модуля в переопределяемый модуль БСП

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

Выполним следующую правку:


#Область ПрограммныйИнтерфейс

Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт
	
	// Добавляем имя нашего созданного модуля в массив подсистем
	МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыИТ");
	
КонецПроцедуры

#КонецОбласти

После этих манипуляций при запуске подчиненного узла БСП поймет, что перед ней не просто набор объектов, а полноценная конфигурация с определенной версией, и запустит стандартные механизмы инициализации кэша метаданных.

Шаг 3. Проверка состава плана обмена

Рассмотрим ситуацию глубже. Ошибка «объектного типа (Метаданные)» часто связана с тем, что в подчиненный узел не попали критически важные данные из главного узла. Для корректной работы РИБ в БСП в состав плана обмена обязательно должны быть включены следующие объекты:

  1. Справочник ИдентификаторыОбъектовМетаданных. Это сердце БСП. Если он будет пуст в подчиненной базе, никакие функции программного интерфейса библиотеки работать не будут.
  2. Константы настройки. В частности: ПараметрыАдминистрированияИБ, СведенияОбОбновленииИнформационнойБазы, ПрефиксУзлаОбъекта.
  3. Регистры сведений. Обязательно включите ВерсииПодсистем (именно там хранится информация о том, что база обновлена) и ПараметрыРаботыПрограммы.

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

Шаг 4. Особенности платформы и первый запуск

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

Рекомендация по первому запуску:
Иногда автоматическое обновление не подхватывается корректно из-за блокировок или особенностей сеанса. Попробуйте запустить подчиненный узел с параметром командной строки:
/С ЗапуститьОбновлениеИнформационнойБазы
Это принудительно инициирует процедуры БСП по заполнению справочника идентификаторов объектов метаданных и регистрации версии вашей конфигурации еще до того, как основной интерфейс обмена попытается что-то прочитать.

Шаг 5. Использование отладки для локализации

Если ошибка сохраняется, воспользуемся советом опытных разработчиков: установим точку останова в модуле ОбменДаннымиПовтИсп на строке, указанной в сообщении об ошибке (в БСП 3.0 это часто район 793 строки).

При остановке системы посмотрите в табло значения переменных. Скорее всего, вы увидите, что какая-то переменная, описывающая узел обмена или тип объекта, имеет значение Неопределено. Это укажет на конкретный объект метаданных, который вы забыли включить в план обмена или который не был проинициализирован в справочнике ИдентификаторыОбъектовМетаданных.

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

← На главную