Расширение конфигурации можно использовать также и в распределенной информационной базе. В этом случае расширение будет передаваться между узлами распределенной информационной базы с помощью сообщений обмена, тем самым обеспечивая единый состав расширений в рамках распределенной системы.
Для указания того, что план обмена может передавать расширения, необходимо установить у этого плана обмена свойство Включать расширения конфигурации. Этот флажок можно установить только для планов обмена, которые участвуют в распределенной информационной базе.
В то же время каждое расширение, подключаемое к информационной базе, имеет свойство Используется в распределенной информационной базе. Установка данного свойства означает, что данное расширение будет мигрировать в подчиненные информационные базы.
Продемонстрируем вышесказанное на примере плана обмена Магазины, на основе которого выполняется обмен данными в распределенной информационной базе. У этого плана обмена установлен флажок Распределенная информационная база.
Чтобы наше расширение передавалось вместе с конфигурацией в подчиненные узлы, установим в свойствах расширения флажок Используется в распределенной информационной базе. А также в свойствах плана обмена Магазины установим флажок Включать расширения конфигурации (рис. 3.39).
Рис. 3.39. Установка свойств расширения и плана обмена для использования в распределенной информационной базе
Позаимствуем план обмена Магазины в расширение и дополним его состав объектами расширения, как было описано в предыдущем разделе (рис. 3.40).
Рис. 3.40. Состав расширяющего плана обмена «Магазины»
Далее реализуем следующую задачу. В примере, демонстрирующем обмен данными в распределенной информационной базе (в разделе «»), мы реализовали нестандартный вариант разрешения коллизий, при котором изменения подчиненного узла имели более высокий приоритет, чем главного. Это касалось только документов и их движений в регистрах. Обмен всеми остальными объектами происходил «по правилам».
Возможность принятия или отклонения изменений определялась в функции ПринятьИзменения(), помещенной в модуле плана обмена Магазины (листинг 3.104).
Листинг 3.104. Функция «ПринятьИзменения» в расширяемой конфигурации
Функция ПринятьИзменения(ЭлементДанных)
Прием = Ложь;
ТипДанных = ТипЗнч(ЭлементДанных);
Если ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.ПриходнаяНакладная")
Или ТипЗнч(ЭлементДанных) = Тип("ДокументОбъект.РасходнаяНакладная")
Или ТипЗнч(ЭлементДанных) = Тип("РегистрНакопленияНаборЗаписей.УчетНоменклатуры") Тогда
Прием = Истина;
КонецЕсли;
Возврат Прием;
КонецФункции
Теперь мы хотим, чтобы при обмене дополнительными характеристиками номенклатуры в случае возникновения коллизий также приоритет был бы у подчиненного узла. Для этого нам нужно создать расширяющий метод функции плана обмена и добавить туда нужную функциональность.
В расширяемом модуле плана обмена Магазины установим курсор на заголовок функции ПринятьИзменения(), вызовем команду контекстного меню Добавить в расширение и выберем тип перехвата Вместо. Шаблон расширяющей функции заполним следующим образом (листинг 3.105).
Листинг 3.105. Расширяющая функция «Расш1_ПринятьИзменения()»
&Вместо("ПринятьИзменения")
Функция Расш1_ПринятьИзменения(ЭлементДанных)
Результат = ПродолжитьВызов(ЭлементДанных);
Если ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.Расш1_ДополнительныеХарактеристики") Тогда
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
Сначала с помощью метода глобального контекста ПродолжитьВызов() производится вызов расширяемой функции. Это гарантирует, что вся прежняя функциональность разрешения коллизий при обмене данными будет сохранена.
В заключение надо не забыть снять флажок у свойства расширения Безопасный режим, так как расширение модулей не может выполняться в безопасном режиме.
Проверим, как это работает. Запустим «1С:Предприятие» и создадим начальный образ центральной базы для одного из подчиненных узлов плана обмена Магазины.
Затем откроем базу подчиненного узла в конфигураторе. Расширение также будет загружено в базу узла без возможности его изменения (рис. 3.41).
Рис. 3.41. Расширение, переданное в базу подчиненного узла
Протестируем обмен данными между центральным и подчиненным узлами плана обмена в обе стороны и убедимся, что наряду с остальными данными передается также и информация о характеристиках номенклатуры. Причем при возникновении коллизий изменения значений характеристик, установленные в подчиненном узле, имеют больший приоритет, так же как и изменения приходных и расходных накладных.