|
Конвертация. Правила выгрузки. Как достучаться до ссылки на узел? | ☑ | ||
---|---|---|---|---|
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
|
||||
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) Опять же проблема в "Непрозарчности" БСП - насколько я вижу, в текущем наборе функций БСП правила регистрации не используются, а накручивать их поверх существующего функционала - это крайние меры. Да и к подпискам на события я довольно холодно отношусь.
А как насчет такого варианта? Если прям в правилах выгрузки дописать очистку регистрации. Если Объект.КодУзла <> УзелДляОбмена.Код Тогда Отказ = Истина; КонецЕсли; МассивУзлов = Новый Массив; СписокУзлов = ПланыОбмена.Полный.Выбрать(); Пока СписокУзлов.Следующий() Цикл Если (СписокУзлов.Ссылка <> ПланыОбмена.Полный.ЭтотУзел().Ссылка) И (СписокУзлов.Код <> Объект.КодУзла) Тогда МассивУзлов.Добавить(СписокУзлов.Ссылка); КонецЕсли; КонецЦикла; ПланыОбмена.УдалитьРегистрациюИзменений(МассивУзлов,Объект.Ссылка); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |