1С-Предприятие 8.0. Практическое пособие разработчика

         

Создание плана обмена Филиалы


Теперь займемся созданием "центра" любого алгоритма обмена данными, вокруг которого группируются прочие механизмы – плана обмена. Откроем конфигуратор и создадим новый объект конфигурации ПланОбмена с именем "Филиалы". На закладке "Данные" создадим реквизит плана обмена "Главный", имеющий тип Булево.

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

Теперь перейдем на закладку "Прочее" и определим состав объектов обмена данными (кнопка "Состав").

Установим отбор по подсистеме "УчетУслугИМатериалов" и включим в обмен все объекты, относящиеся к этой подсистеме. Проверьте, что константа "ПрефиксНумерации" не участвует в обмене, поскольку ее значение должно быть уникальным для каждой базы, участвующей в обмене.[403]

Состав данных обмена должен выглядеть следующим образом:

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

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

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



Перем РегистрацияВНовыйУзел;

Затем создадим обработчик события формы "ПередЗаписью":




Процедура ПередЗаписью(Отказ)

   РегистрацияВНовыйУзел = ЭтоНовый();

КонецПроцедуры [404]

Этот обработчик и будет устанавливать значение нашей служебной переменной в Истина, в случае записи нового узла плана обмена. После этого создадим обработчик события формы "ПриЗаписи":

Процедура ПриЗаписи(Отказ)

   Если РегистрацияВНовыйУзел Тогда

       //Регистрация изменений всех данных для узла

       ПланыОбмена.ЗарегистрироватьИзменения(Ссылка);

   КонецЕсли;

КонецПроцедуры

Событие формы "ПриЗаписи" возникает после записи объекта ПланОбменаОбъект.Филиалы, но до окончания транзакции. Именно в этот момент мы обращаемся к механизму регистрации изменений, вызывая метод менеджера планов обмена – ЗарегистрироватьИзменения(). В данном случае будут созданы записи регистрации изменений, предназначенные для пересылки в созданный нами узел, для всех объектов обмена, указанных в составе данного плана обмена.

В заключение, создадим обработчик события формы "ПередОткрытием" для того, чтобы запретить установку реквизита "Главный" для предопределенного узла, соответствующего данной информационной базе:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

   Если Ссылка = ПланыОбмена.Филиалы.ЭтотУзел() Тогда

       ЭлементыФормы.Главный.Доступность = Ложь;

   КонецЕсли;

КонецПроцедуры

В этой процедуре мы используем метод менеджера плана обмена ЭтотУзел(), который возвращает ссылку на узел плана обмена, соответствующий данной информационной базе.

На этом создание плана обмена завершено, и мы можем перейти непосредственно к созданию процедур обмена данными. [405]


Содержание раздела