Работа с распределенными информационными базами (РИБ) в среде 1С — это удобный инструмент для объединения филиалов, складов и центрального офиса в единую информационную систему. Однако администраторы РИБ регулярно сталкиваются со специфическими платформенными ошибками. Одна из самых неприятных и частых проблем — сообщение «Конфигурация узла распределенной ИБ не соответствует ожидаемой».
Эта ошибка полностью блокирует обмен данными между центральной базой (ЦБ) и периферийной базой (ПБ). В этой статье мы подробно разберем, почему возникает этот сбой, как устроена логика платформы 1С при проверке версий метаданных и рассмотрим проверенные практические методы решения проблемы — от простых штатных действий до продвинутых администраторских «хаков».
Чтобы эффективно бороться с ошибкой, проанализируем физический механизм обмена конфигурациями в РИБ. При изменении метаданных в центральной базе платформа генерирует файл обмена, содержащий не только новые документы и элементы справочников, но и саму конфигурацию (в виде внутренних файлов метаданных). Принимающая сторона (периферийный узел) перед загрузкой данных обязана обновить свою структуру конфигурации.
Безопасность этого процесса контролируется механизмом сравнения хэш-сумм (уникальных сигнатур) конфигураций. В платформе 1С заложен жесткий алгоритм: хэш-код конфигурации, отправленной из центра, должен строго соответствовать хэш-коду, который ожидает получить периферийная база на основе своей текущей конфигурации базы данных. Если эти хэши расходятся хотя бы на один символ, платформа выдает ошибку несоответствия и прерывает чтение файла сообщения.
Рассмотрим основные триггеры, которые приводят к рассинхронизации хэш-сумм:
8.3.15, а в периферийном узле — 8.3.14, то при генерации хэш-функции конфигурации они используют разные алгоритмы или по-разному обрабатывают структуру метаданных СУБД. В результате хэш-строки не совпадают, даже если конфигурации визуально идентичны.Перейдем к пошаговым методам исправления этой проблемы, начиная от классических и безопасных и заканчивая экстренными.
Перед тем как приступать к сложным манипуляциям с базой данных, выполним простейшую, но самую важную проверку. Выясним версии платформы 1С, запущенные на сервере (или компьютерах пользователей) в центральном офисе и на периферийном узле.
Правило РИБ простое: версия технологической платформы 1С в центральной базе и во всех подчиненных узлах должна совпадать вплоть до последнего релиза (например, везде должна строго стоять 8.3.15.1501).
Если версии отличаются, выполним следующие шаги:
Если выравнивание версий платформы не помогло или ошибка вызвана внутренним сбоем хэша после динамического обновления, воспользуемся классическим административным методом. Мы заставим периферийную базу временно «забыть» о том, что она подчинена центру, обновим ее вручную файлом конфигурации .cf и вернем связь обратно.
Разберем этот процесс по шагам:
1c_central.cf.
// Отключаем признак подчиненности базы в РИБ
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
ВызватьИсключение "Главный узел успешно отключен! Перезапустите конфигуратор.";
Альтернативный вариант для системных администраторов: запустить конфигуратор периферийной базы через командную строку Windows со специальным ключом:
"C:\Program Files\1cv8\8.3.15.1501\bin\1cv8.exe" DESIGNER /F "ПутьКВашейБазе" /ResetMasterNode
1c_central.cf. На предупреждения системы о полной замене конфигурации отвечаем согласием.F7 (или синюю бочку на панели инструментов), чтобы обновить конфигурацию базы данных. Начнется процесс реструктуризации таблиц. Дождемся его окончания."ЦБ" или "001"):
// Укажите имя вашего плана обмена РИБ (посмотрите его в конфигураторе)
ИмяПланаОбмена = "НашПланОбменаСФилиалами";
КодГлавногоУзла = "ЦБ"; // Код центрального узла в плане обмена
УзелЦентр = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодГлавногоУзла);
Если ЗначениеЗаполнено(УзелЦентр) Тогда
ПланыОбмена.УстановитьГлавныйУзел(УзелЦентр);
Сообщить("Связь с главным узлом успешно восстановлена! Можно запускать обмен.");
Иначе
Сообщить("Ошибка: Узел с кодом '" + КодГлавногоУзла + "' не найден в плане обмена " + ИмяПланаОбмена);
КонецЕсли;
Что делать, если база данных периферийного узла весит несколько сотен гигабайт, находится на медленном канале связи, и выполнять процедуру полной загрузки конфигурации .cf и реструктуризации крайне долго и накладно? Существует системный «лайфхак» — подменить ожидаемый хэш непосредственно в XML-файле сообщения обмена.
Давайте разберем по шагам, как устроен этот трюк:
Message_ПБ_ЦБ.xml) и файл обмена в центральной базе (Message_ЦБ_ПБ.xml).v8de:Config и вложенные в них параметры хэша. Они выглядят примерно так:
<v8de:Config xmlns:v8de="http://v8.1c.ru/8.1/data/enterprise/current-config">
<v8de:Version>2.0.14.3</v8de:Version>
<v8de:Digest1>00000000000000000000000000000000</v8de:Digest1>
<v8de:Digest2>a8f2e6b9c8d1e2f3a4b5c6d7e8f9a0b1</v8de:Digest2>
</v8de:Config>
Version, Digest1 и Digest2 из сообщения периферийной базы. Это те параметры, которые периферийная база считает «родными» и правильными на данный момент.v8de:Config.Платформа увидит знакомый хэш, успешно пройдет валидацию заголовка файла и загрузит все скопившиеся документы и справочники. После этого базы «подружатся», хотя при следующем реальном изменении конфигурации в центре вам все же может потребоваться обновить базу штатным файлом .cf.
Если вы точно знаете, что проблема вызвана тем, что в центральной базе обновили конфигурацию «динамически» и у РИБ сбился внутренний ориентир версий, можно заставить платформу 1С принудительно пересчитать хэш-сумму всей конфигурации без отключения узлов.
Для этого выполним следующие действия в центральной базе:
// Вспомогательный комментарий для принудительного изменения хэша конфигурации
F7 и обновим конфигурацию базы данных. Это должно быть полноценное, жесткое обновление (не динамическое!).Начиная с версии платформы 8.3.12, механизмы РИБ научились передавать между узлами не только основную конфигурацию, но и активные расширения. Это привело к появлению новой модификации нашей ошибки: «Расширение конфигурации узла распределенной ИБ не соответствует ожидаемому».
Если вы используете расширения конфигурации и столкнулись с подобным поведением системы, проанализируем план действий по устранению этой проблемы:
%AppData%\Local\1C\1Cv8\ и %AppData%\Roaming\1C\1Cv8\.Мы подробно разобрали природу ошибки несоответствия конфигурации в РИБ и рассмотрели несколько вариантов ее лечения. Чтобы минимизировать вероятность повторения подобных проблем в будущем, рекомендуем придерживаться простых правил администрирования распределенных баз данных: