Развертывание периферийной базы в распределенной информационной базе (РИБ) — стандартная задача для администраторов и разработчиков систем на платформе 1С. Однако в конфигурациях, созданных на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Розница», «1С:Управление торговлей» или «1С:Бухгалтерия», этот процесс может прерваться критической ошибкой при первом же запуске подчиненного узла.
Система аварийно завершает работу и выдает следующее сообщение:
«В главном узле не обновлен справочник "Идентификаторы объектов метаданных": при проверке обнаружено, что требуется выполнить критичные изменения... В главном узле выполните обновление информационной базы и повторите создание подчиненного узла».
Давайте подробно разберем, почему возникает этот сбой, почему крайне опасно решать его «глушением» обработчика исключений (как поступил автор темы на форуме) и какие существуют легальные, безопасные и надежные способы устранения этой проблемы.
Справочник ИдентификаторыОбъектовМетаданных (ИОМ) — это фундамент БСП. В нем хранится список всех объектов конфигурации (справочников, документов, регистров, реквизитов) в виде элементов справочника. Это необходимо для настройки прав доступа, версионирования, дополнительных реквизитов, отчетов и, самое главное, для механизмов регистрации изменений при обмене данными.
Если структура метаданных в конфигурации изменилась (например, после обновления программы разработчиками или добавления расширения), а справочник ИдентификаторыОбъектовМетаданных в базе данных не обновился, возникает рассинхронизация. При создании начального образа подчиненного узла некорректные или устаревшие идентификаторы передаются в периферийную базу. БСП в подчиненном узле определяет несоответствие и блокирует запуск, чтобы предотвратить повреждение данных.
Важное предупреждение: Попытка обойти ошибку путем комментирования кода проверки (глушение исключения в конфигураторе) — это мина замедленного действия. В дальнейшем это неизбежно приведет к:
«Объект не найден...» в полях, завязанных на идентификаторы метаданных.Рассмотрим правильные пошаговые методики решения проблемы непосредственно в главном (центральном) узле.
Если запуск центральной базы с параметром командной строки ЗапуститьОбновлениеИнформационнойБазы не приносит результата, мы можем обновить справочник принудительно с помощью небольшого фрагмента кода. Для этого создадим внешнюю обработку в центральной базе и выполним следующий код:
&НаСервере
Процедура ОбновитьИОМНаСервере()
// Запускаем штатную процедуру БСП для полного обновления справочника идентификаторов
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина);
// Принудительно регистрируем изменения справочника для отправки во все подчиненные узлы РИБ
Справочники.ИдентификаторыОбъектовМетаданных.ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИОМ(Команда)
ОбновитьИОМНаСервере();
ПоказатьПредупреждение(,"Обновление идентификаторов метаданных успешно завершено!");
КонецПроцедуры
Этот код заново сопоставит физическую структуру конфигурации с записями в справочнике ИдентификаторыОбъектовМетаданных и, что очень важно, автоматически зарегистрирует эти изменения на планах обмена для всех периферийных баз.
В составе БСП поставляется специализированный инструмент для исправления подобных проблем без написания кода. Нам понадобится внешняя обработка ОбновлениеВспомогательныхДанных.epf (ее можно найти в дистрибутиве БСП на сайте ИТС или в папке шаблонов конфигурации).
ОбновлениеВспомогательныхДанных.epf.ИдентификаторыОбъектовМетаданных и ИдентификаторыОбъектовРасширений зарегистрированы к выгрузке.Часто БСП пропускает процедуру обновления вспомогательных данных, поскольку «считает», что конфигурация уже обновлена и текущая версия совпадает с записанной в константах. Мы можем перехитрить систему и запустить штатное обновление конфигурации заново.
Разберем этот процесс по шагам:
2.3.15.40).2.3.15.41) и сохраним изменения.F7.Динамическое обновление конфигурации центральной базы (так называемое «горячее обновление» без выгона пользователей) — главная причина разрушения целостности метаданных в 1С. В результате динамического обновления физическая структура таблиц в SQL или файловой базе может разойтись с тем, что записано в справочнике идентификаторов.
Если предыдущие способы не помогли, выполним следующие действия по очистке кэша и исправлению базы данных:
Если периферийная база находится на удаленном объекте (например, в магазине с медленным интернетом), повторно создавать и передавать гигабайты начального образа крайне неудобно. Мы можем запустить и обновить периферийную базу на месте, временно «отвязав» ее от главного узла.
Сделаем это по следующему алгоритму:
/ResetMasterNode. Это действие разорвет связь с главным узлом, превратив базу в автономную.
ПланыОбмена.УстановитьГлавныйУзел(ПланыОбмена.ПолнотекстовыйПоиск.НайтиПоКоду("ЦБ"));
После восстановления связи выполните первый сеанс синхронизации. Базы успешно сопоставят свои идентификаторы метаданных без вызова критических исключений.