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