Рассмотрим распространенную ситуацию при разработке в распределенной информационной базе (РИБ). Вы добавляете новый реквизит в существующий справочник, и он без проблем переносится на периферийные узлы. Однако, когда вы создаете совершенно новый объект (например, справочник, документ или обработку), он не появляется на узлах, а сам процесс обмена превращается в «бесконечную пустую кубышку» — зацикливается и постоянно гоняет пустые сообщения.
Проанализируем эту ситуацию и разберем по шагам, выясним причину такого поведения платформы 1С и найдем правильное решение.
Суть проблемы заключается в механике работы объектов типа ПланыОбмена в системе 1С:Предприятие.
Когда мы изменяем существующий объект метаданных (добавляем реквизит в справочник «Номенклатура»), этот справочник уже включен в состав плана обмена нашей РИБ. Система корректно регистрирует изменения структуры и отправляет их в периферийную базу.
Но когда мы создаем абсолютно новый объект метаданных, платформа 1С не добавляет его в обмен автоматически. Если новый объект не включен в Состав плана обмена, таблица регистрации изменений для него просто не создается платформой. База не знает, что этот объект должен мигрировать между узлами.
Давайте посмотрим на процесс обмена изнутри. Зацикливание (или рассинхронизация) происходит из-за конфликта номеров сообщений и версий конфигурации:
Многие разработчики пытаются решить эту проблему временными мерами: снимают подчиненность узла, накатывают файл конфигурации (CF) вручную и возвращают подчиненность. Это устраняет симптомы и лечит сломанный узел, но не устраняет причину. При следующем обновлении конфигурации цикл возобновится.
Разберем по шагам, как настроить систему, чтобы новые объекты корректно передавались в узлы РИБ.
ПланыОбмена и выберите тот план обмена, который используется для вашей РИБ (например, «Полный» или специализированный план вашей конфигурации).Разрешить, система будет автоматически регистрировать создание и изменение элементов этого объекта для обмена. Если выбрать Запретить, структура перенесется, но данные придется регистрировать программно средствами встроенного языка.После выполнения этих действий новый объект метаданных будет корректно передан на подчиненный узел, а главный узел получит подтверждение об успешном применении изменений. Зацикливание прекратится.
Если вы разрабатываете функционал не в основной конфигурации, а используете расширения, обязательно учитывайте специфику платформы. При передаче новых объектов через расширения в РИБ база иногда может уходить в исключительные блокировки. В таких ситуациях, если обмен зациклился, часто помогает ручное обновление расширения непосредственно на периферийном узле или изменение архитектуры добавления объекта (перенос в основную конфигурацию, если это критично для РИБ).
Внимательно контролируйте состав планов обмена при каждом добавлении новых метаданных, и вы навсегда избавитесь от проблемы «бесконечных пустых кубышек» при синхронизации баз!