Имя: Пароль:
1C
1С v8
Конвертация. Правила выгрузки. Как достучаться до ссылки на узел?
0 cube033
 
10.04.15
06:48
Есть центральная база и переферия из 3 баз. Появилась новая задача - подготавливать документ в центре и отправлять на доработку в переферию. Каждый документ создаётся для определенной базы.
Я могу в документ писать для какой переферийной базы он предназначен (код узла), но как в ПВД достучаться до ссылки на узел, для которого в данный момент создается сообщение?
1 Альбатрос
 
10.04.15
06:51
ПередПолучениемИзмененных:

Событие выполняется только для on-line обмена перед непосредственным получением зарегистрированных объектов для выгрузки данных.

Параметры:
Параметры - Структура, в которой хранятся переменные доступные во всех обработчиках

Получатель - Узел плана обмена, который является получателем формируемого сообщения

УзелДляФоновогоОбмена - узел фонового обмена по которому могут выгружаться дополнительные данные

Пример:
Параметры.Вставить("КодУзлаОбмена", УзелОбмена.Код);
2 patria0muerte
 
10.04.15
06:54
Так ты лучше в регистрации рули этим всем. Регистрируй только для того узла, который указан в документе.
3 cube033
 
10.04.15
08:11
(1)(2) Спасибо - хорошие советы. Регистрация по правилам делается средствами платформы или надо описывать при записи объекта как-то? Никогда прежде ими не пользовался. Соответсвенно нужно убирать параметр "Авторегистрация" у документа, как я понимаю.
4 Defender aka LINN
 
10.04.15
08:43
Я просто оставлю это здесь:
http://screencast.com/t/Qr0QJQg3P0D
5 cube033
 
10.04.15
10:55
(4) Спасибо. Это то, что нужно.
Обмен проходит автоматически и основан на БСП, поэтому, на первый взгляд, всё не очень прозрачно, но покопавшись нашел, что используется обработка: "КонвертацияОбъектовИнформационныхБаз", в которой тоже есть реквизит "УзелДляОбмена"  

В итоге для решения задачи достаточно в обработчике "перед выгрузкой" в ПВД написать такой код:

Если Объект.КодУзла <> УзелДляОбмена.Код Тогда
    Отказ = Истина;
КонецЕсли;
6 patria0muerte
 
13.04.15
02:18
(5) В итоге со временем (если речь идет не об "Универсальном обмене данными") у тебя будут копиться невыгруженные сообщения зарегистрированные для узлов. И выгрузка с каждым разом будет происходить немного, но дольше. Так что лучше эту проблему сразу на уровне регистрации объектов решить.

(3) Вообще можно двумя способами рулить регистрацией: либо отключить авторегистрацию и завести подписку на событие передЗаписьюДокумента и там регистрировать уже на нужных узлах. Либо в правилах регистрации использовать обработчики СократитьПолучателей(Объект, Узлы) или ДополнитьПолучателей(Объект, Узлы)
7 patria0muerte
 
13.04.15
02:19
+(6) Для БСП лучше использовать правила регистрации...
8 cube033
 
13.04.15
06:26
(7) Опять же проблема в "Непрозарчности" БСП - насколько я вижу, в текущем наборе функций БСП правила регистрации не используются, а накручивать их поверх существующего функционала - это крайние меры. Да и к подпискам на события я довольно холодно отношусь.

А как насчет такого варианта? Если прям в правилах выгрузки дописать очистку регистрации.


Если Объект.КодУзла <> УзелДляОбмена.Код  Тогда
    Отказ = Истина;
КонецЕсли;
МассивУзлов = Новый Массив;
СписокУзлов = ПланыОбмена.Полный.Выбрать();
Пока СписокУзлов.Следующий() Цикл
    Если (СписокУзлов.Ссылка <> ПланыОбмена.Полный.ЭтотУзел().Ссылка) И (СписокУзлов.Код <> Объект.КодУзла) Тогда
        МассивУзлов.Добавить(СписокУзлов.Ссылка);
    КонецЕсли;
КонецЦикла;
ПланыОбмена.УдалитьРегистрациюИзменений(МассивУзлов,Объект.Ссылка);
Программист всегда исправляет последнюю ошибку.