Как решить проблему синхронизации в РИБ при использовании расширений конфигурации

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

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

Выясним причину возникновения ошибки

Для начала проанализируем ситуацию. Когда расширение добавляет новые поля или таблицы, оно фактически меняет физическую схему базы данных SQL или файловой версии. Механизм РИБ жестко контролирует идентичность структуры метаданных между центральным и периферийным узлом. Ошибка возникает из-за того, что пакет обмена содержит данные для объектов, которых в подчиненном узле еще не существует на уровне базы данных, либо структура расширений в узле не совпадает с той, что была в центре на момент выгрузки.

Важно понимать, что передача изменений структуры в РИБ — это всегда двухэтапный процесс:

  1. Сначала в периферийный узел должно «прилететь» само расширение (его обновленная структура).
  2. Только после того, как расширение будет применено в конфигураторе подчиненного узла и структура таблиц обновится, система сможет корректно загрузить данные, относящиеся к этим новым объектам.

Шаг 1: Проверка базовых настроек расширения и плана обмена

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

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

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

3. Проанализируем свойство Главный узел в расширении. В центральной базе это поле обычно пустое или не редактируется, но в периферийном узле источником изменений должен выступать центральный узел. Не пытайтесь вносить изменения в структуру расширения в периферийной базе вручную через конфигуратор — это разорвет связь с «главным» расширением, и автоматическое обновление прекратится.

Шаг 2: Правильный алгоритм синхронизации при изменении структуры

Если вы добавили в расширение новый справочник или реквизит, и стандартная кнопка «Синхронизировать» выдает ошибку, воспользуемся проверенным алгоритмом совместной работы с базой:

  1. Выполните выгрузку данных в центральном узле. В этот момент сформируется сообщение обмена, содержащее новую конфигурацию расширения.
  2. Перейдите в периферийный узел. Важно: если синхронизация запущена в фоновом режиме или через пользовательский интерфейс, она может завершиться ошибкой, так как обновление структуры требует монопольного доступа.
  3. Запустите Конфигуратор периферийного узла.
  4. Перейдите в меню Конфигурация — Расширения конфигурации.
  5. Если изменения пришли, вы увидите, что расширение требует обновления. Выполните обновление конфигурации базы данных, нажав F7. Система предложит принять изменения в структуре данных.
  6. Только после успешного обновления структуры в конфигураторе запустите режим 1С:Предприятие и повторите синхронизацию. Теперь данные будут загружены без ошибок.

Шаг 3: Проблема фоновых заданий и монопольного режима

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

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

Особенности версий платформы

Стабильность работы расширений в РИБ сильно зависит от версии используемой платформы 1С:Предприятие. Рассмотрим основные нюансы:

Можно ли использовать расширение только в центральной базе?

Часто возникает вопрос: можно ли оставить расширение только в центре, не передавая его в узлы? Проанализируем последствия:

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

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

Риски при удалении расширений

Будьте крайне осторожны при удалении расширений из РИБ. Рассмотрим цепочку действий:

  1. Вы удаляете расширение, содержащее справочник с данными, в центральной базе.
  2. При первой же синхронизации в периферийный узел придет команда на удаление этого расширения.
  3. Это приведет к безвозвратной потере всех данных, которые хранились в объектах этого расширения во всей распределенной сети.

Перед любыми серьезными манипуляциями с расширениями в РИБ обязательно создавайте резервные копии всех узлов информационной базы.

Использование сценариев при первом обмене

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

← На главную