При переходе с версии 1С 7.7 на платформу 1С:Предприятие 8 разработчики часто сталкиваются с вопросом организации распределенной информационной базы (РИБ). В седьмой версии для этих целей требовалось наличие специализированной компоненты «Управление распределенными ИБ» и внешней библиотеки DistrDB.dll. В платформе 1С:Предприятие 8 архитектура принципиально изменилась: механизм РИБ уже глубоко встроен в само ядро технологической платформы. Никаких дополнительных внешних библиотек подключать не нужно.
Если конфигурация сильно переработана или написана с нуля, и в ней изначально не предусмотрены типовые механизмы синхронизации, весь функционал обмена можно быстро создать штатными средствами платформы. Разберем по шагам, как разработать собственную распределенную базу данных с нуля.
Проанализируем дерево метаданных конфигурации. Основной механизм обмена данными строится вокруг планов обмена, которые располагаются в ветке Общие — Планы обмена.
РИБ_Филиалы, и синоним.ПланыОбмена.ЗарегистрироватьИзменения().После сохранения и обновления конфигурации базы данных запустим программу в режиме «1С:Предприятие» и выполним настройку узлов.
Платформа требует наличия минимум двух узлов: текущего (главного) и узла-корреспондента (подчиненного филиала). Выясним причину: обмен не может функционировать без четкой идентификации отправителя и получателя сообщения.
ПланыОбмена.ЭтотУзел()). Присвоим ему понятный код, например, ЦБ, и наименование «Центральная база».ФИЛ1, и наименование «Филиал 1».Чтобы запустить работу удаленного подразделения, нам необходимо сформировать начальный образ базы данных. Начальный образ представляет собой полную копию текущей конфигурации и выбранных данных, которая уже «знает», что является подчиненной по отношению к главному узлу.
Создание начального образа выполняется программно. Посмотрим на пример кода обработки:
УзелСсылка = ПланыОбмена.РИБ_Филиалы.НайтиПоКоду("ФИЛ1");
Если ЗначениеЗаполнено(УзелСсылка) Тогда
СтрокаСоединения = "File=""C:\Bases\Branch1"";";
ПланыОбмена.СоздатьНачальныйОбраз(УзелСсылка, СтрокаСоединения);
Сообщить("Начальный образ успешно сформирован!");
КонецЕсли;
После отработки метода в указанном каталоге появится готовая файловая база данных для филиала, в которой дерево конфигурации будет автоматически заблокировано от изменений, а главным узлом назначен узел ЦБ.
Для регулярного обмена информацией используются специализированные объекты платформы: ЗаписьСообщенийОбмена, ЧтениеСообщенийОбмена, а также средства работы с XML-документами (ЗаписьXML и ЧтениеXML).
Рассмотрим пример процедуры выгрузки накопившихся изменений из текущей базы в файл обмена:
Процедура ВыгрузитьДанныеВФилиал(УзелПолучатель, ИмяФайла)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла);
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелПолучатель);
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения);
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
КонецПроцедуры
Теперь разберем, как подчиненный узел принимает эти данные. Посмотрим на пример процедуры загрузки сообщений:
Процедура ЗагрузитьДанныеИзСообщения(ИмяФайла)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения);
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
КонецПроцедуры
Процедуры выгрузки и загрузки можно встроить в регламентные задания конфигурации или вызывать внешней обработкой через планировщик задач операционной системы.
При внедрении распределенной информационной базы важно заранее предусмотреть нюансы параллельной работы пользователей:
УстановитьНовыйНомерДокумента и УстановитьНовыйКодСправочника.ПриПолученииДанныхОтГлавного и ПриПолученииДанныхОтПодчиненного.ПланыОбмена.УстановитьГлавныйУзел(Неопределено).