Как исправить ошибку «Конфигурация узла распределенной ИБ не соответствует ожидаемой» в 1С?

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

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

Разберем природу возникновения этой ошибки и детально рассмотрим несколько надежных способов восстановления работоспособности распределенной базы данных.

Почему возникает данная ошибка

Проанализируем внутренний механизм контроля версий платформы «1С:Предприятие» в РИБ. При формировании пакета обмена платформа записывает в заголовок XML-файла контрольные суммы структуры метаданных конфигурации (хеши Digest1 и Digest2). Когда принимающий узел считывает сообщение, он сравнивает эти контрольные суммы со своей текущей конфигурацией базы данных.

Если в центральном узле (ЦУ) применяется динамическое обновление, монопольная реструктуризация таблиц не выполняется, а фиксация версий в служебных таблицах (таких как Config и Params) может произойти некорректно. В итоге цепочка хешей метаданных нарушается: периферийный узел (ПУ) может успешно применить изменения из центра, но при обратной выгрузке центральный узел отказывается принимать данные от подчиненного, считая его конфигурацию несоответствующей.

Способ 1. Загрузка файла конфигурации (CF) из периферийного узла в центральный

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

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

Способ 2. Принудительный пересчет контрольной суммы метаданных в главном узле

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

  1. Откроем центральную базу в режиме «Конфигуратор».
  2. Внесем любое незначительное изменение в структуру метаданных, например, добавим временную константу или изменим комментарий у любого существующего реквизита.
  3. Выполним полное обновление конфигурации базы данных по клавише F7.
  4. Выгрузим сообщение обмена из центрального узла.
  5. Примем сообщение в подчиненном узле, после чего сформируем ответную выгрузку из ПУ в ЦУ. Пересчитанный хеш метаданных восстановит согласованность цепочки обмена.

Способ 3. Временное отключение признака подчиненного узла (отвязка от РИБ)

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

  1. В периферийной базе в режиме «1С:Предприятие» выполним программное отключение главного узла через внешнюю обработку:

ПланыОбмена.УстановитьГлавныйУзел(Неопределено);

  1. Откроем периферийную базу в режиме «Конфигуратор». Теперь база стала полностью автономной, и меню загрузки конфигурации разблокировано.
  2. Выгрузим актуальный .cf файл из центрального узла и загрузим его в периферийную базу через меню Конфигурация → Загрузить конфигурацию из файла....
  3. Нажмем F7 для применения изменений в структуре базы данных.
  4. Снова запустим периферийную базу в режиме «1С:Предприятие» и восстановим привязку к главному узлу:

УзелЦУ = ПланыОбмена.ПолнотекстовыйПоиск.НайтиПоКоду("ЦУ"); // Укажите имя вашего плана обмена и код главного узла
Если ЗначениеЗаполнено(УзелЦУ) Тогда
    ПланыОбмена.УстановитьГлавныйУзел(УзелЦУ);
КонецЕсли;
  1. Выполним сеанс обмена данными.

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

Если в плане обмена зависла незавершенная регистрация изменений метаданных для конкретного узла, ее можно сбросить или перерегистрировать программно.

Для удаления зависшей регистрации изменений конфигурации выполним следующий код:


УзелОбмена = ПланыОбмена.РИБ_Розница.НайтиПоКоду("ПУ1");
ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, Метаданные.Конфигурация);

Если требуется, наоборот, принудительно отправить конфигурацию в узел при следующем сеансе, используем вызов регистрации:


УзелОбмена = ПланыОбмена.РИБ_Розница.НайтиПоКоду("ПУ1");
ПланыОбмена.ЗарегистрироватьИзменения(УзелОбмена, Метаданные.Конфигурация);

Способ 5. Ручная правка заголовка файла обмена (для экстренных случаев)

Когда требуется срочно загрузить накопившиеся документы и продажи из магазина, а времени на выгрузку и загрузку .cf нет, можно временно скорректировать XML-файл сообщения:

  1. Откроем полученный от ПУ XML-файл обмена в текстовом редакторе.
  2. Найдем блок <v8de:Config>, содержащий параметры <v8de:Digest1> и <v8de:Digest2>.
  3. Заменим значения этих тегов на те, которые выгружаются из центрального узла в его исходящих сообщениях.
  4. Сохраним файл и выполним чтение сообщения в ЦУ. Данные будут успешно загружены в базу, после чего можно планово синхронизировать конфигурации баз данных.

Рекомендации по предотвращению проблемы

Чтобы исключить появление подобных коллизий в распределенной инфраструктуре, придерживайтесь следующих правил:

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