Как настроить распределенную информационную базу (РИБ) в 1С с нуля, если в конфигурации нет встроенного плана обмена?

Программист 1С v8.3 (Обычные формы) Сфера услуг, туризм и социальный сектор
← На главную

При переходе с версии 1С 7.7 на платформу 1С:Предприятие 8 разработчики часто сталкиваются с вопросом организации распределенной информационной базы (РИБ). В седьмой версии для этих целей требовалось наличие специализированной компоненты «Управление распределенными ИБ» и внешней библиотеки DistrDB.dll. В платформе 1С:Предприятие 8 архитектура принципиально изменилась: механизм РИБ уже глубоко встроен в само ядро технологической платформы. Никаких дополнительных внешних библиотек подключать не нужно.

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

Шаг 1. Создание объекта «План обмена» в конфигураторе

Проанализируем дерево метаданных конфигурации. Основной механизм обмена данными строится вокруг планов обмена, которые располагаются в ветке Общие — Планы обмена.

  1. Откроем конфигуратор и перейдем в ветку метаданных Общие.
  2. Нажмем правой кнопкой мыши по узлу Планы обмена и выберем Добавить.
  3. Зададим имя плана обмена, например, РИБ_Филиалы, и синоним.
  4. В палитре свойств объекта обязательно установим флаг Распределенная информационная база. Это критически важное свойство: именно оно сообщает платформе, что по данному плану обмена будут передаваться не только данные, но и сама структура метаданных (конфигурация), а подчиненные базы будут жестко связаны с центральной.
  5. Перейдем на вкладку Состав. Здесь мы определим, какие именно справочники, документы и регистры должны участвовать в миграции данных. Для каждого выбранного объекта необходимо установить режим авторегистрации изменений: значение Разрешить автоматически фиксирует изменения при записи объекта, а значение Запретить потребует программной регистрации через метод ПланыОбмена.ЗарегистрироватьИзменения().

Шаг 2. Инициализация узлов в режиме 1С:Предприятие

После сохранения и обновления конфигурации базы данных запустим программу в режиме «1С:Предприятие» и выполним настройку узлов.

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

  1. Откроем созданный план обмена через интерфейс программы.
  2. Убедимся, что заполнен предопределенный узел — это наша текущая база (доступен через метод ПланыОбмена.ЭтотУзел()). Присвоим ему понятный код, например, ЦБ, и наименование «Центральная база».
  3. Создадим новый элемент плана обмена для удаленной точки. Укажем уникальный код, например, ФИЛ1, и наименование «Филиал 1».

Шаг 3. Создание начального образа подчиненной базы

Чтобы запустить работу удаленного подразделения, нам необходимо сформировать начальный образ базы данных. Начальный образ представляет собой полную копию текущей конфигурации и выбранных данных, которая уже «знает», что является подчиненной по отношению к главному узлу.

Создание начального образа выполняется программно. Посмотрим на пример кода обработки:


УзелСсылка = ПланыОбмена.РИБ_Филиалы.НайтиПоКоду("ФИЛ1");
Если ЗначениеЗаполнено(УзелСсылка) Тогда
    СтрокаСоединения = "File=""C:\Bases\Branch1"";";
    ПланыОбмена.СоздатьНачальныйОбраз(УзелСсылка, СтрокаСоединения);
    Сообщить("Начальный образ успешно сформирован!");
КонецЕсли;

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

Шаг 4. Программная выгрузка и загрузка данных

Для регулярного обмена информацией используются специализированные объекты платформы: ЗаписьСообщенийОбмена, ЧтениеСообщенийОбмена, а также средства работы с XML-документами (ЗаписьXML и ЧтениеXML).

Рассмотрим пример процедуры выгрузки накопившихся изменений из текущей базы в файл обмена:


Процедура ВыгрузитьДанныеВФилиал(УзелПолучатель, ИмяФайла)
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла);

    ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
    ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелПолучатель);

    ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);

    ЗаписьСообщения.ЗакончитьЗапись();
    ЗаписьXML.Закрыть();
КонецПроцедуры

Теперь разберем, как подчиненный узел принимает эти данные. Посмотрим на пример процедуры загрузки сообщений:


Процедура ЗагрузитьДанныеИзСообщения(ИмяФайла)
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяФайла);

    ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
    ЧтениеСообщения.НачатьЧтение(ЧтениеXML);

    ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);

    ЧтениеСообщения.ЗакончитьЧтение();
    ЧтениеXML.Закрыть();
КонецПроцедуры

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

Критические особенности эксплуатации РИБ

При внедрении распределенной информационной базы важно заранее предусмотреть нюансы параллельной работы пользователей:

  1. Префиксация кодов и номеров: Чтобы исключить дублирование документов и элементов справочников, созданных одновременно в разных базах, каждому узлу задается свой префикс. Назначение префиксов настраивается в подписках на события УстановитьНовыйНомерДокумента и УстановитьНовыйКодСправочника.
  2. Обновление конфигурации: Изменение структуры метаданных выполняется исключительно в центральной базе. При получении пакета с измененной конфигурацией подчиненная база временно блокирует прием данных до тех пор, пока администратор филиала не применит обновление конфигурации базы данных в монопольном режиме.
  3. Разрешение коллизий: По умолчанию платформа отдает безусловный приоритет изменениям из главного узла. Если требуется изменить эту логику, разработчик может переопределить обработчики событий в модуле плана обмена: ПриПолученииДанныхОтГлавного и ПриПолученииДанныхОтПодчиненного.
  4. Аварийное отключение узла: Если филиал необходимо отвязать от центра и превратить в полностью автономную базу (например, при утрате главного узла), выполняется программное снятие признака подчиненности: ПланыОбмена.УстановитьГлавныйУзел(Неопределено).
← На главную