Как исправить ошибку «В главном узле не обновлен справочник "Идентификаторы объектов метаданных"» при создании базы РИБ?

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

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

Система аварийно завершает работу и выдает следующее сообщение:

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

Давайте подробно разберем, почему возникает этот сбой, почему крайне опасно решать его «глушением» обработчика исключений (как поступил автор темы на форуме) и какие существуют легальные, безопасные и надежные способы устранения этой проблемы.

Почему возникает эта ошибка и чем опасен «костыль» с отключением проверки?

Справочник ИдентификаторыОбъектовМетаданных (ИОМ) — это фундамент БСП. В нем хранится список всех объектов конфигурации (справочников, документов, регистров, реквизитов) в виде элементов справочника. Это необходимо для настройки прав доступа, версионирования, дополнительных реквизитов, отчетов и, самое главное, для механизмов регистрации изменений при обмене данными.

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

Важное предупреждение: Попытка обойти ошибку путем комментирования кода проверки (глушение исключения в конфигураторе) — это мина замедленного действия. В дальнейшем это неизбежно приведет к:

  1. Появлению битых ссылок со значением «Объект не найден...» в полях, завязанных на идентификаторы метаданных.
  2. Сбоям при регистрации изменений для обмена данными РИБ (объекты просто перестанут передаваться между базами).
  3. Неработоспособности ролей и ограничений на уровне записей (RLS) в периферийной базе.
  4. Ошибкам при последующих обновлениях конфигурации.

Рассмотрим правильные пошаговые методики решения проблемы непосредственно в главном (центральном) узле.

Способ 1. Принудительное программное обновление ИОМ и регистрация изменений

Если запуск центральной базы с параметром командной строки ЗапуститьОбновлениеИнформационнойБазы не приносит результата, мы можем обновить справочник принудительно с помощью небольшого фрагмента кода. Для этого создадим внешнюю обработку в центральной базе и выполним следующий код:


&НаСервере
Процедура ОбновитьИОМНаСервере()
    // Запускаем штатную процедуру БСП для полного обновления справочника идентификаторов
    Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина); 
    
    // Принудительно регистрируем изменения справочника для отправки во все подчиненные узлы РИБ
    Справочники.ИдентификаторыОбъектовМетаданных.ЗарегистрироватьПолноеИзменениеДляПодчиненныхУзловРИБ(); 
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИОМ(Команда)
    ОбновитьИОМНаСервере();
    ПоказатьПредупреждение(,"Обновление идентификаторов метаданных успешно завершено!");
КонецПроцедуры

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

Способ 2. Использование штатной обработки «Обновление вспомогательных данных»

В составе БСП поставляется специализированный инструмент для исправления подобных проблем без написания кода. Нам понадобится внешняя обработка ОбновлениеВспомогательныхДанных.epf (ее можно найти в дистрибутиве БСП на сайте ИТС или в папке шаблонов конфигурации).

  1. Запустим центральную базу в режиме «1С:Предприятие» под пользователем с полными правами.
  2. Через меню «Файл» — «Открыть» запустим обработку ОбновлениеВспомогательныхДанных.epf.
  3. В интерфейсе обработки найдем раздел, отвечающий за идентификаторы объектов метаданных.
  4. Нажмем кнопку запуска обновления вспомогательных данных. Программа выполнит перезаполнение справочников ИОМ.
  5. После завершения процедуры перейдем в меню Администрирование — Синхронизация данных, откроем состав отправляемых данных для нужного узла РИБ и убедимся, что справочники ИдентификаторыОбъектовМетаданных и ИдентификаторыОбъектовРасширений зарегистрированы к выгрузке.

Способ 3. Искусственное изменение номера версии конфигурации

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

Разберем этот процесс по шагам:

  1. Откроем центральную базу в режиме «Конфигуратор».
  2. Откроем свойства конфигурации (правый клик по верхнему элементу дерева метаданных — «Свойства»).
  3. Найдем поле Версия (например, там указано 2.3.15.40).
  4. Незначительно изменим последнюю цифру (например, на 2.3.15.41) и сохраним изменения.
  5. Обновим конфигурацию базы данных, нажав клавишу F7.
  6. Запустим базу в режиме «Предприятие». Система зафиксирует изменение версии и автоматически запустит фоновое обновление всех вспомогательных данных БСП, включая перезаполнение идентификаторов метаданных.
  7. После успешного окончания процедуры обновления заново создадим начальный образ периферийной базы.

Способ 4. Борьба с последствиями «динамического обновления»

Динамическое обновление конфигурации центральной базы (так называемое «горячее обновление» без выгона пользователей) — главная причина разрушения целостности метаданных в 1С. В результате динамического обновления физическая структура таблиц в SQL или файловой базе может разойтись с тем, что записано в справочнике идентификаторов.

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

  1. Выполним резервное копирование центральной базы.
  2. Запустим конфигуратор центральной базы монопольно.
  3. Перейдем в меню Администрирование — Тестирование и исправление...
  4. Установим флажки на пунктах «Реиндексация таблиц информационной базы» и «Проверка логической целостности». В окне настроек при обнаружении ошибок выберем пункт «Очищать объекты» или «Создавать объекты» (в зависимости от политики обслуживания базы). Нажмем «Выполнить».
  5. Очистим кэш сервера 1С:Предприятия (если база клиент-серверная) и локальный кэш пользователя, под которым создается начальный образ РИБ.

Способ 5. Инициализация через режим «Отвязанного» узла (без повторного создания образа)

Если периферийная база находится на удаленном объекте (например, в магазине с медленным интернетом), повторно создавать и передавать гигабайты начального образа крайне неудобно. Мы можем запустить и обновить периферийную базу на месте, временно «отвязав» ее от главного узла.

Сделаем это по следующему алгоритму:

  1. Запустим конфигуратор периферийной базы.
  2. В настройках запуска (или через командную строку) укажем параметр /ResetMasterNode. Это действие разорвет связь с главным узлом, превратив базу в автономную.
  3. Запустим базу в режиме «1С:Предприятие». Теперь система не будет требовать соответствия идентификаторов главному узлу и успешно запустит все локальные процедуры обновления БСП. База откроется в рабочем режиме.
  4. После завершения всех процедур обновления и формирования справочника ИОМ нам необходимо восстановить статус подчиненного узла РИБ. Для этого в режиме «Предприятие» выполним в консоли кода (или через специальную обработку настройки РИБ) следующий код, где укажем код главного узла:

ПланыОбмена.УстановитьГлавныйУзел(ПланыОбмена.ПолнотекстовыйПоиск.НайтиПоКоду("ЦБ"));

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

← На главную