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

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

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

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

---

Анализ причины возникновения ошибки

Для того чтобы эффективно бороться с проблемой, выясним ее внутреннее устройство. В современных конфигурациях 1С (таких как «Управление торговлей 11», «ERP Управление предприятием», «Комплексная автоматизация» и др.) за сопоставление объектов конфигурации отвечает справочник ИдентификаторыОбъектовМетаданных (ИОМ). Каждому справочнику, документу, реквизиту или регистру соответствует элемент этого справочника, хранящий его уникальный UUID.

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

Однако этот механизм часто дает сбой по следующим причинам:

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

---

Способ 1: Прямой перенос справочника ИОМ через XML (Самый быстрый и надежный способ)

Если обмен в РИБ уже заблокирован этой ошибкой, и стандартные файлы обмена не могут быть загружены, мы можем передать актуальное состояние справочника ИОМ в обход механизмов РИБ. Для этого воспользуемся стандартной обработкой переноса данных XML.

Выполним следующие шаги:

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

---

Способ 2: Временное отключение подчиненного узла для локального обновления

Если периферийная база категорически отказывается принимать файлы обмена и не дает завершить обновление из-за контроля БСП, мы можем временно отключить ее от главного узла, провести обновление локально и восстановить связь. Этот способ требует использования внешней обработки с возможностью выполнения произвольного кода.

Рассмотрим пошагово этот алгоритм:

  1. В периферийной базе откроем обработку «Групповая обработка справочников и документов» или любую консоль кода.
  2. Выполним следующий код для отключения связи с главным узлом: ПланыОбмена.УстановитьГлавныйУзел(Неопределено); После этого наша периферийная база становится временно автономной (самостоятельной) базой.
  3. Запустим базу в режиме конфигуратора и убедимся, что все изменения метаданных применились. Если конфигурация базы данных не обновлена, обновим ее (клавиша F7).
  4. Запустим ПБ в режиме «Предприятие» со специальным ключом запуска в параметрах: /C ЗапуститьОбновлениеИнформационнойБазы. Это принудительно запустит процедуры обновления БСП.
  5. Если процедуры обновления не исправили справочник ИОМ автоматически, выполним программное обновление справочника через консоль кода:
    
    Справочники.ИдентификаторыОбъектовМетаданных.ВыполнитьОбновлениеДанных(Истина, Ложь, Ложь);
    
  6. После успешного обновления вернем связь с главным узлом РИБ. Для этого найдем ссылку на наш главный узел в плане обмена и выполним код:
    
    СсылкаНаЦентр = ПланыОбмена.[ИмяВашегоПланаОбмена].НайтиПоКоду("КодЦентральногоУзла");
    ПланыОбмена.УстановитьГлавныйУзел(СсылкаНаЦентр);
    
  7. Запустим сеанс обмена. Данные успешно сопоставятся.

---

Способ 3: Настройка плана обмена для нетиповых объектов

Если вы дорабатывали конфигурацию (добавляли новые собственные справочники, документы или регистры напрямую в дерево метаданных конфигурации), велика вероятность того, что они не включены в состав вашего плана обмена.

Проанализируем структуру обмена:

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

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

---

Способ 4: Временный обход проверки в коде конфигурации

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

Выполним следующие действия:

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

---

Рекомендации по работе с расширениями в РИБ на будущее

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

← На главную