При сопровождении распределенных информационных баз (РИБ) в 1С одной из самых неприятных ситуаций является блокировка обмена с сообщением: «Конфигурация узла распределенной ИБ не соответствует ожидаемой». Ошибка может возникать как при загрузке данных в периферийный узел, так и при возврате пакета в центральную базу, даже если структуры метаданных визуально кажутся полностью идентичными.
Разберем причины возникновения этой коллизии и детально рассмотрим рабочие способы восстановления синхронизации узлов.
Платформа 1С:Предприятие строго контролирует версии метаданных между узлами распределенной базы. Для каждого узла вычисляется специальная контрольная сумма (хеш-код или Digest конфигурации). Если вычисленный хеш в файле обмена не совпадает с внутренним состоянием принимающей базы, обмен аварийно прерывается.
Выделим ключевые причины сбоя:
Config и ConfigSave могут зафиксировать промежуточное или некорректное состояние хешей, из-за чего в пакет обмена выгружаются поврежденные метаданные.Проанализируем базовый сценарий, который помогает устранить ошибку в большинстве типовых ситуаций без грубого вмешательства в структуру данных:
AppData\Local\1C\1cv8 и AppData\Roaming\1C\1cv8).Если конфигурации в узлах уже полностью идентичны (например, были синхронизированы вручную через загрузку файла CF), но центральная или периферийная база продолжает требовать старый пакет метаданных, рассмотрим сброс или принудительную регистрацию изменений через встроенный язык 1С.
Для полного сброса зависшей регистрации изменений конфигурации по проблемному узлу выполним следующий код во внешней обработке:
УзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("ПБ");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.Конфигурация);
Сообщить("Регистрация изменений конфигурации успешно очищена.");
КонецЕсли;
Если же периферийная база отказывается принимать данные и требует принудительной доставки новой конфигурации из центра, зарегистрируем изменения метаданных вручную:
УзелОбмена = ПланыОбмена.Полный.НайтиПоКоду("ПБ");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.Конфигурация);
Сообщить("Конфигурация успешно зарегистрирована к отправке.");
КонецЕсли;
Если в базе наблюдаются скрытые повреждения после аварийных завершений, запустим периферийный узел через командную строку с явным запретом динамического обновления. Это гарантирует корректную перестройку таблиц и хешей:
Выполним в командной строке команду обновления конфигурации базы данных:
1cv8.exe DESIGNER /IBConnectionString "..." /UpdateDBCfg -Dynamic-
Параметр -Dynamic- отключает возможность частичного применения изменений и принудительно запускает полную проверку целостности метаданных.
Рассмотрим ситуацию, когда в узлах базы уже выровнены с помощью единого файла конфигурации (через операцию отвязки узла, загрузки CF и обратной привязки), но подготовленный файл обмена содержит накопленные учетные документы и блокируется из-за расхождения заголовка метаданных.
В таком случае разберем ручную корректировку XML-пакета:
<Config>, содержащую дельту метаданных и контрольные суммы.<Config>...</Config> вместе с содержимым, оставив только блок данных <Body>.Если ошибка повторяется регулярно при любых попытках синхронизации, проанализируем состояние системных таблиц базы данных. В Конфигураторе обеих баз поочередно выполним операцию «Администрирование -> Тестирование и исправление» со следующими обязательными флагами:
Данная процедура устраняет битые записи в таблицах Config и PARAMS, восстанавливая корректный расчет Digest метаданных для механизмов РИБ.