В платформе 1С:Предприятие 8.х реализовано два механизма обмена данными: универсальный механизм обмена данными и механизм распределенной информационной базы. Оба эти механизма базируются на одних тех же технологиях. Одной из этих технологий является служба регистрации изменений данных. Изменения данных могут регистрироваться в автоматическом режиме. Для этого необходимо при включении объекта метаданных в состав плана обмена разрешить автоматическую регистрацию: установить признак Авторегистрация в значение Разрешить.
Однако часто требуется регистрация не каждого изменения данных, или регистрация изменений смежных объектов, или зависящих от изменяемых данных. Это можно выполнить различными способами.
Регистрация изменений всех данных для указанного узла
Для регистрации изменений всех данных для конкретного узла плана обмена необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные значение Неопределено.
Пример. Регистрация изменения всех данных для узла Узел:
Регистрация изменений всех данных одного типа
Для регистрации изменений данных одного типа необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные объект описания метаданных, соответствующий данным.
Пример: регистрация изменения всех элементов справочника Номенклатура для узла Узел:
Регистрация изменений конкретных данных различных типов
Для регистрации конкретных данных различных типов необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сами данные, либо ссылку на них.
Регистрация изменений данных объектных типов
К объектным типам относятся справочники, документы, планы счетов, планы видов характеристик, планы расчета, бизнес-процессы, задачи. Для их регистрации необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сам объект, либо ссылку на него.
Регистрация изменений наборов записей
Регистрация изменений наборов записей зависит от типа регистра, которому принадлежит набор записей. В общем случае в наборе записей должен быть установлен отбор, определяющий содержимое набора записей с точки зрения логики конфигурации. Чтение данных набора необязательно.
Регистрация изменений наборов записей регистров, подчиненных регистратору
К таким регистрам относятся регистры накопления, регистры бухгалтерии, регистры расчета и регистры сведений со свойством РежимЗаписи, установленным в значение ПодчинениеРегистратору. Для регистрации изменений наборов записей указанных регистров необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей с установленным отбором, в котором в элемент отбора Регистратор установлено значение регистратора данного набора записей. При этом чтение данных набора записей перед его регистрацией не обязательно.
Регистрация изменений наборов записей независимых регистров
К таким регистрам относятся регистры сведений со свойством РежимЗаписи, установленным в значение Независимый. Для регистрации изменений наборов записей данного регистра необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей. Состав элементов отбора, при этом, должен строго соответствовать основному отбору регистра. Выбирать поля, входящие в основной отбор регистра необходимо в соответствии с логикой работы конфигурации (см. Подготовка конфигурации к работе в распределенной информационной базе).
Для регистрации данных регистра сведений, отбираемых по некоторому критерию, необходимо:
выбрать уникальные значения измерений регистра, входящих в основной отбор (если регистр сведений является периодическим и Период включен в основной отбор, то Период также должен участвовать в отборе)
выполнить регистрацию наборов записей с установленными значениями отбора, соответствующими каждой выбранной комбинации значений измерений (входящих в основной отбор).
Пример. Регистрация всех данных регистра сведений КомплектующиеНоменклатуры, имеющего измерения Номенклатура и ХарактеристикаНоменклатуры (входящие в основной отбор), а также измерения Комплектующая и ХарактеристикаКомплектующей (не входящие в основной отбор) и являющегося непериодическим:
В случае если в качестве второго параметра передается значение Ложь, расходные накладные и записи регистра накопления регистрируются как измененные только в случае совпадения склада со складом, определенным в узле плана обмена. Все остальные данные регистрируются обычным образом.
В случае возникновения ситуации, при которой необходимо восстановить резервную копию информационной базы, работающую в рамках распределенной информационной базы, можно воспользоваться следующими рекомендациями.
Процедура восстановления информационной базы корневого узла
Напомним, что корневым узлом считается информационная база, у которой свойство Главный узел содержит значение Неопределено.
Восстановление корневого узла сводится к восстановлению резервной копии информационной базы.
После восстановления информационной базы корневого узла необходимо восстановить обмен данными в распределенной информационной базе. Для этого, над всеми информационными базами - узлами распределенной информационной базы - необходимо выполнить действия, аналогичные описанным в разделе "Процедура восстановления информационной базы подчиненного узла" данной статьи.
Процедура восстановления информационной базы подчиненного узла Процедуру восстановления информационной базы подчиненного узла можно разделить на несколько этапов:
* Восстановление в информационной базе подчиненного узла конфигурации главного узла
- Отключение от распределенной информационной базы - осуществляется путем установки свойству Главный узел значения Неопределено.
Для этого в режиме 1С:Предприятия необходимо выполнить метод менеджера планов обмена:
- Загрузка конфигурации главного узла - для восстановления работы в распределенной информационной базе необходимо полное соответствие конфигураций главного и подчиненного узлов. Для выполнения этого условия необходимо загрузить конфигурацию (.cf), полученную из главного узла, в информационную базу подчиненного узла (режим объединения конфигураций в данном случае использовать нельзя).
* Синхронизация номеров сообщений между главным и подчиненным узлами.
Для правильного обмена сообщениями в распределенной информационной базе необходимо, чтобы соблюдалось условие: номер принимаемого сообщения должен быть больше номера, записанного в реквизите НомерПринятого узла, соответствующего информационной базе - источнику сообщения.
Номер сообщения получается путем добавления единицы к номеру последнего принятого сообщения (значение реквизита НомерОтправленного узла, соответствующего информационной базе - приемнику сообщения).
* Подключение к распределенной информационной базе.
Для подключения информационной базы подчиненного узла обратно в распределенную информационную базу необходимо установить свойству Главный узел прежнее значение.
* Синхронизация данных главного и подчиненного узлов.
Синхронизация данных может выполняться в обе стороны: от главного узла в подчиненный и от подчиненного узла в главный. В обоих случаях достаточно лишь выполнить регистрацию требуемых данных в службе регистрации изменений (для этого можно воспользоваться методом менеджера планом обмена ПланыОбмена.ЗарегистрироватьИзменения()).
После выполнения описанных действий работа распределенной информационной базы может продолжаться в обычном режиме.
Для того чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться, и для каждого из них описать перечень обмена
Обе эти задачи позволяет решать прикладной объект конфигурации План обмена.
При помощи планов обмена мы получаем информацию о том, какие элементы данных были изменены и в какой узел обмена их необходимо передать. Это возможно благодаря тому, что планы обмена содержат механизм регистрации изменений. Информация об измененных данных переносится с помощью сообщений, инфраструктура которых также поддерживается планами обмена.
Подобно тому, как элементами данных справочника являются элементы справочника, элементами данных плана обмена являются узлы плана обмена. Каждый узел идентифицирует участника обмена по данному плану обмена. Кроме этого в каждом плане обмена всегда существует один предопределенный узел, идентифицирующий данную информационную базу.
В состав данных, которыми может производиться обмен, входят элементы информационных структур базы данных, которые описываются следующими объектами встроенного языка: Константа.МенеджерЗначения.<имя>;
СправочникОбъект.<имя>;
ДокументОбъект.<имя>;
ПоследовательностьНаборЗаписей.<имя>;
ПланВидовХарактеристикОбъект.<имя>;
ПланСчетовОбъект.<имя>;
ПланВидовРасчетаОбъект.<имя>;
РегистрСведенийНаборЗаписей.<имя>;
РегистрНакопленияНаборЗаписей.<имя>;
РегистрБухгалтерииНаборЗаписей.<имя>;
РегистрРасчетаНаборЗаписей.<имя>;
ПерерасчетНаборЗаписей.<имя>;
БизнесПроцессОбъект.<имя>;
ЗадачаОбъект.<имя>;
УдалениеОбъекта.
При описании состава данных плана обмена разработчик имеет возможность указать для каждого типа объектов признак Авторегистрация. Он определяет, каким образом план обмена будет отслеживать изменения этих данных.
Создание плана обмена Филиалы
Состав данных обмена должен выглядеть следующим образом:
Теперь с помощью конструктора создадим основную форму узла, чтобы описать в ней некоторые действия, которые должны выполняться при создании нового узла обмена.
Суть этих действий будет заключаться в том, что при создании нового узла обмена мы должны будем сформировать для него все необходимые записи регистрации изменений для всех объектов конфигурации, входящих в данный план обмена. Это будет своего рода начальная синхронизация узла обмена всеми данными обмена.
Прежде всего, опишем в модуле формы узла служебную переменную, которая будет хранить признак того, является ли записываемый узел новым или нет.
Перем РегистрацияВНовыйУзел;
Затем создадим обработчик события формы ПередЗаписью.
Этот обработчик и будет устанавливать значение нашей служебной переменной в Истина в случае записи нового узла плана обмена.
После этого создадим обработчик события формы ПриЗаписи.
Создание обработки Обмен данными
Откроем конфигуратор и создадим новый объект конфигурации Обработка с именем ОбменДанными. Перейдем на закладку Прочее и откроем модуль объекта.
Создадим в нем процедуру ОбменСФилиалами.
Теперь создадим основную форму обработки и в обработчик события нажатия кнопки Выполнить – КнопкаВыполнитьНажатие вставим вызов процедуры ОбменСФилиалами().
Создание процедуры записи данных
Сами процедуры записи и чтения данных обмена мы разместим в модуле объекта План обмена Филиалы. Сначала создадим процедуру, которая используется нами при обмене данными, – ЗаписатьСообщениеСИзменениями.
На этом создание процедуры записи данных обмена закончено.