Почему новые объекты не выгружаются в узлы РИБ 1С и возникает цикличный обмен?

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

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

Проанализируем эту ситуацию и разберем по шагам, выясним причину такого поведения платформы 1С и найдем правильное решение.

В чем кроется причина проблемы?

Суть проблемы заключается в механике работы объектов типа ПланыОбмена в системе 1С:Предприятие.

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

Но когда мы создаем абсолютно новый объект метаданных, платформа 1С не добавляет его в обмен автоматически. Если новый объект не включен в Состав плана обмена, таблица регистрации изменений для него просто не создается платформой. База не знает, что этот объект должен мигрировать между узлами.

Почему возникает цикличный обмен (зацикливание)?

Давайте посмотрим на процесс обмена изнутри. Зацикливание (или рассинхронизация) происходит из-за конфликта номеров сообщений и версий конфигурации:

  1. Главный узел фиксирует изменение конфигурации базы данных и формирует сообщение для периферийного узла.
  2. Периферийный узел принимает файл, видит флаг изменения конфигурации и пытается его применить.
  3. Поскольку новый объект не описан в правилах обмена и не включен в состав плана обмена для этого узла, полноценного принятия данных не происходит, и корректная квитанция (подтверждение) о приеме не формируется.
  4. Главный узел не получает квитанцию с подтверждением обновления конфигурации периферии.
  5. При следующем сеансе обмена главный узел снова отправляет тот же самый пакет изменений. Цикл замыкается.

Многие разработчики пытаются решить эту проблему временными мерами: снимают подчиненность узла, накатывают файл конфигурации (CF) вручную и возвращают подчиненность. Это устраняет симптомы и лечит сломанный узел, но не устраняет причину. При следующем обновлении конфигурации цикл возобновится.

Как правильно решить проблему: добавляем объект в План обмена

Разберем по шагам, как настроить систему, чтобы новые объекты корректно передавались в узлы РИБ.

  1. Откройте конфигуратор центральной базы данных.
  2. В дереве метаданных найдите ветку ПланыОбмена и выберите тот план обмена, который используется для вашей РИБ (например, «Полный» или специализированный план вашей конфигурации).
  3. Откройте свойства этого плана обмена (двойным кликом или через контекстное меню).
  4. Перейдите к свойству Состав и нажмите на кнопку с лупой, чтобы открыть окно настройки состава.
  5. В открывшемся окне найдите ваш новый объект (созданный справочник, документ, регистр или обработку) и установите галочку напротив него.
  6. Обратите внимание на колонку Авторегистрация. Если установить значение Разрешить, система будет автоматически регистрировать создание и изменение элементов этого объекта для обмена. Если выбрать Запретить, структура перенесется, но данные придется регистрировать программно средствами встроенного языка.
  7. Сохраните изменения, обновите конфигурацию базы данных (клавиша F7) и выполните сеанс обмена с периферийным узлом.

После выполнения этих действий новый объект метаданных будет корректно передан на подчиненный узел, а главный узел получит подтверждение об успешном применении изменений. Зацикливание прекратится.

Особенности работы с расширениями

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

Внимательно контролируйте состав планов обмена при каждом добавлении новых метаданных, и вы навсегда избавитесь от проблемы «бесконечных пустых кубышек» при синхронизации баз!

← На главную