Работа с распределенными информационными базами (РИБ) в 1С — это процесс, требующий строгого соответствия метаданных и последовательности пакетов данных. Даже незначительное изменение в главной базе, такое как добавление реквизита или случайный пробел в программном коде, может полностью остановить обмен. В этой статье мы разберем сложную ситуацию, когда после обновления конфигурации обмен перестал работать, выдавая каскад ошибок: от «Конфигурация узла не соответствует ожидаемой» до «Ошибки формата представления изменений».
Рассмотрим пошагово, как проанализировать ситуацию, восстановить работоспособность обмена и правильно настроить регистрацию объектов.
Разберем ситуацию, когда в главной базе были внесены изменения. В штатном режиме изменения конфигурации передаются в периферийную базу (ПБ) вместе с данными. При попытке синхронизации в ПБ система сообщает, что конфигурация базы данных не соответствует ожидаемой. Это происходит потому, что изменения метаданных уже «прилетели» в сообщении обмена, но еще не были применены к самой структуре таблиц периферийной базы.
Если стандартный способ (обновление через «Конфигуратор» после нажатия кнопки синхронизации) не помогает, применим радикальный, но эффективный метод — временное «отвязывание» базы от главного узла.
Алгоритм действий:
// Программный код для отвязки базы от главного узла
ПланыОбмена.УстановитьГлавныйУзел(Неопределено);
.cf), выгруженный из главной базы. Это гарантирует 100% идентичность метаданных.F7).
// Устанавливаем ссылку на главный узел (нужно выбрать соответствующий элемент плана обмена)
УзелОбъекта = ПланыОбмена.Пользователи.НайтиПоКоду("ГБ"); // Где ГБ - код главного узла
ПланыОбмена.УстановитьГлавныйУзел(УзелОбъекта.Ссылка);
Проанализируем ситуацию: этот метод позволяет «протолкнуть» обновление, если стандартные механизмы блокируются из-за критических расхождений.
После синхронизации конфигураций может возникнуть следующая ошибка: Ошибка формата представления изменений. Она часто локализуется в модуле Обработка.КонвертацияОбъектовРаспределенныхИнформационныхБаз. Выясним причину этой проблемы.
Как правило, это связано с тем, что в файле сообщения обмена XML присутствуют узлы, которые текущая версия платформы или конфигурации не может корректно десериализовать. Проверим следующие моменты:
Рассмотрим ошибку: Номер сообщения меньше или равен номеру ранее принятого сообщения. Система 1С жестко следит за последовательностью пакетов. Если главная база ждет пакет №50, а ей присылают №48, она отклонит его, считая данные устаревшими.
Выясним, как программно или вручную скорректировать счетчики обмена:
Номер принятого сообщения в значение, которое на 1 меньше, чем номер в имени файла обмена (или просто в 0 для принудительного принятия любого следующего пакета).Посмотрим на пример того, как это сделать с помощью встроенной обработки «Регистрация изменений для обмена»:
В этой обработке можно нажать на иконку «Карандаш» рядом с номером сообщения и вручную вписать нужное число. Это гораздо безопаснее, чем писать прямой код по обновлению реквизитов узла. Также для этих целей подойдет универсальная регистрация объектов для обмена.
Проанализируем вопрос автора о том, почему в регистрации обмена «висят» объекты (например, контрагент «Восток»). В РИБ объекты попадают в таблицу регистрации автоматически при любом изменении. Если обмен не шел с 05.05, там накопилось огромное количество данных.
Рекомендации по управлению регистрацией:
// Пример удаления регистрации изменений для конкретного узла
ПланыОбмена.УдалитьРегистрациюИзменений(УзелСсылка, Тип("СправочникСсылка.Контрагенты"));
Если вышеописанные шаги не помогают, и ошибка Ошибка чтения файла сообщения обмена сохраняется, велика вероятность логического повреждения таблиц DBChanges. Проведем профилактику:
.1CD на физическом уровне.Подводя итог, можно сказать, что решение проблем обмена всегда требует комплексного подхода: приведения конфигураций к идентичности, выравнивания номеров сообщений и контроля объема зарегистрированных изменений. Совместными усилиями и последовательным выполнением этих шагов мы добьемся стабильной работы синхронизации.