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