В нашем примере обмена данными для документов ПриходнаяНакладная была включена автоматическая регистрация изменений (см. рис. 3.33). Но иногда требуется зарегистрировать изменения для какого-либо определенного перечня узлов, отличного от формируемого при авторегистрации.
В этом случае можно программно отключить свойство Автозаполнение, очистить набор узлов-получателей и сформировать свой собственный список получателей.
Для этого добавим в форму обработки еще одну команду ЗарегистрироватьПриходные и перетащим ее в окно элементов формы. У соответствующей кнопки будем устанавливать доступность при выборе непредопределенного узла обмена в форме обработки. Это делается в обработчике события ПриИзменении поля формы УзелОбмена, как это было показано в предыдущем разделе (см. листинг 3.79).
Теперь создадим обработчик команды ЗарегистрироватьПриходные и заполним следующим образом (листинг 3.84).
Листинг 3.84. Обработчик команды «ЗарегистрироватьПриходные»
&НаКлиенте
Процедура ЗарегистрироватьПриходные(Команда)
УзлыПолучатели = Новый Массив;
УзлыПолучатели.Добавить(УзелОбмена);
ЗарегистрироватьПриходныеНаСервере(УзлыПолучатели);
КонецПроцедуры
В этом обработчике мы вызываем процедуру ЗарегистрироватьПриходныеНаСервере(), в которую передаем массив узлов, для которых требуется зарегистрировать приходные накладные. Для упрощения примера мы будем добавлять в этот массив только одно значение – ссылку на узел обмена, выбранный в форме обработки (листинг 3.85).
Листинг 3.85. Процедура «ЗарегистрироватьПриходныеНаСервере»
&НаСервереБезКонтекста
Процедура ЗарегистрироватьПриходныеНаСервере(Узлы)
Выборка = Документы.ПриходнаяНакладная.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
// Добавить набор узлов в коллекцию получателей
Объект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
ЗаполнитьНаборУзлов(Объект.ОбменДанными.Получатели, Узлы);
Объект.Записать();
КонецЦикла;
КонецПроцедуры
В теле процедуры производится выборка всех документов ПриходнаяНакладная. У каждого полученного объекта отключается автозаполнение, и набор получателей формируется самостоятельно с помощью процедуры ЗаполнитьНаборУзлов(), в которую передается коллекция узлов-получателей, содержащаяся в свойстве объекта ОбменДанными, и массив узлов, для которых требуется зарегистрировать приходные накладные (листинг 3.86).
Листинг 3.86. Процедура «ЗаполнитьНаборУзлов()»
Процедура ЗаполнитьНаборУзлов(Набор, Список)
Набор.Очистить();
Для каждого Элемент Из Список Цикл
Набор.Добавить(Элемент);
КонецЦикла;
КонецПроцедуры
В этой процедуре коллекция узлов-получателей, для которых регистрируются изменения объекта, очищается. И в цикле обхода элементов массива, полученного в параметре Список, эта коллекция заполняется заново новыми значениями.
При такой регистрации будут зарегистрированы изменения всех приходных накладных, невзирая на соответствие склада документа и склада узла обмена. Но при выгрузке данных в узел «неправильные» накладные будут отсеяны согласно стратегии распространения данных, используемой в этом примере обмена данными.