Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Универсальный способ обмена данными
Дальше: Глава 4. Внешние компоненты

Обмен данными в распределенной информационной базе

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

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

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

Продемонстрируем вышесказанное на примере плана обмена Магазины, на основе которого выполняется обмен данными в распределенной информационной базе. У этого плана обмена установлен флажок Распределенная информационная база.

Чтобы наше расширение передавалось вместе с конфигурацией в подчиненные узлы, установим в свойствах расширения флажок Используется в распределенной информационной базе. А также в свойствах плана обмена Магазины установим флажок Включать расширения конфигурации (рис. 3.39).

Рис. 3.39. Установка свойств расширения и плана обмена для использования в распределенной информационной базе

Позаимствуем план обмена Магазины в расширение и дополним его состав объектами расширения, как было описано в предыдущем разделе (рис. 3.40).

Рис. 3.40. Состав расширяющего плана обмена «Магазины»

Далее реализуем следующую задачу. В примере, демонстрирующем обмен данными в распределенной информационной базе (в разделе «»), мы реализовали нестандартный вариант разрешения коллизий, при котором изменения подчиненного узла имели более высокий приоритет, чем главного. Это касалось только документов и их движений в регистрах. Обмен всеми остальными объектами происходил «по правилам».

Возможность принятия или отклонения изменений определялась в функции ПринятьИзменения(), помещенной в модуле плана обмена Магазины (листинг 3.104).

Листинг 3.104. Функция «ПринятьИзменения» в расширяемой конфигурации

Функция ПринятьИзменения(ЭлементДанных)

 

Прием = Ложь;

 

ТипДанных = ТипЗнч(ЭлементДанных);

Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.ПриходнаяНакладная")

Или ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РасходнаяНакладная")

Или ТипЗнч(ЭлементДанных) = Тип("РегистрНакопленияНаборЗаписей.УчетНоменклатуры") Тогда

 

Прием = Истина;

 

КонецЕсли;

 

Возврат Прием;

 

КонецФункции

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

В расширяемом модуле плана обмена Магазины установим курсор на заголовок функции ПринятьИзменения(), вызовем команду контекстного меню Добавить в расширение и выберем тип перехвата Вместо. Шаблон расширяющей функции заполним следующим образом (листинг 3.105).

Листинг 3.105. Расширяющая функция «Расш1_ПринятьИзменения()»

&Вместо("ПринятьИзменения")

Функция Расш1_ПринятьИзменения(ЭлементДанных)

 

Результат = ПродолжитьВызов(ЭлементДанных);

 

Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.Расш1_ДополнительныеХарактеристики") Тогда

Результат = Истина;

КонецЕсли;

 

Возврат Результат;

 

КонецФункции

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

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

Проверим, как это работает. Запустим «1С:Предприятие» и создадим начальный образ центральной базы для одного из подчиненных узлов плана обмена Магазины.

Затем откроем базу подчиненного узла в конфигураторе. Расширение также будет загружено в базу узла без возможности его изменения (рис. 3.41).

Рис. 3.41. Расширение, переданное в базу подчиненного узла

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


Назад: Универсальный способ обмена данными
Дальше: Глава 4. Внешние компоненты