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

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

В этом случае можно программно отключить свойство Автозаполнение, очистить набор узлов-получателей и сформировать свой собственный список получателей.

Для этого добавим в форму обработки еще одну команду ЗарегистрироватьПриходные и перетащим ее в окно элементов формы. У соответствующей кнопки будем устанавливать доступность при выборе непредопределенного узла обмена в форме обработки. Это делается в обработчике события ПриИзменении поля формы УзелОбмена, как это было показано в предыдущем разделе (см. листинг 3.79).

Теперь создадим обработчик команды ЗарегистрироватьПриходные и заполним следующим образом (листинг 3.84).

Листинг 3.84. Обработчик команды «ЗарегистрироватьПриходные»

&НаКлиенте

Процедура ЗарегистрироватьПриходные(Команда)

 

УзлыПолучатели = Новый Массив;

УзлыПолучатели.Добавить(УзелОбмена);

 

ЗарегистрироватьПриходныеНаСервере(УзлыПолучатели);

 

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

В этом обработчике мы вызываем процедуру ЗарегистрироватьПриходныеНаСервере(), в которую передаем массив узлов, для которых требуется зарегистрировать приходные накладные. Для упрощения примера мы будем добавлять в этот массив только одно значение – ссылку на узел обмена, выбранный в форме обработки (листинг 3.85).

Листинг 3.85. Процедура «ЗарегистрироватьПриходныеНаСервере»

&НаСервереБезКонтекста

Процедура ЗарегистрироватьПриходныеНаСервере(Узлы)

 

Выборка = Документы.ПриходнаяНакладная.Выбрать();

Пока Выборка.Следующий() Цикл

Объект = Выборка.ПолучитьОбъект();

 

// Добавить набор узлов в коллекцию получателей

Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;

ЗаполнитьНаборУзлов(Объект.ОбменДанными.Получатели, Узлы);

 

Объект.Записать();

 

КонецЦикла;

 

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

В теле процедуры производится выборка всех документов ПриходнаяНакладная. У каждого полученного объекта отключается автозаполнение, и набор получателей формируется самостоятельно с помощью процедуры ЗаполнитьНаборУзлов(), в которую передается коллекция узлов-получателей, содержащаяся в свойстве объекта ОбменДанными, и массив узлов, для которых требуется зарегистрировать приходные накладные (листинг 3.86).

Листинг 3.86. Процедура «ЗаполнитьНаборУзлов()»

Процедура ЗаполнитьНаборУзлов(Набор, Список)

 

Набор.Очистить();

Для каждого Элемент Из Список Цикл

Набор.Добавить(Элемент);

КонецЦикла;

 

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

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

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

Назад: Регистрация изменений для узла в обработке для выполнения обмена
Дальше: Использование транзакций при организации обмена