Как не допустить зацикливания при обмене объектами между идентичными базами, если обмен происходит при записи объекта?

1. KNM.Work 26.06.19 09:22 Сейчас в теме
Доброго времени суток!

Дано:

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

Проблема:

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

Ранее работал только с обменами, которые запускались вручную либо регламентным заданием. В данном же случае, задача стоит именно таким образом.

Как наиболее правильно избежать подобного?

Пока пробовал следующее:

1) Одна из баз является клиентом, вторая - сервером. Определить это можно довольно просто: на сервере не задаётся путь к базе, в которую требуется отправлять данные. Соответственно, добавил в процедуру отправки документа условие по заполнению пути к базе-приемнику. Как ни странно - не помогло.

2) Можно, конечно, включить в обработке (Универсальный Обмен Данными) флаг "Загружать данные в режиме обмена", вот только это налагает определённые ограничения на расширяемость решения. Как только понадобится, чтобы обработчики запускались - тут же придётся искать другое решение.

Как правильно разрешить такую ситуацию?
Найденные решения
2. ZergKRSK 130 26.06.19 09:24 Сейчас в теме
(1)
Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка  Тогда
		Возврат;
	КонецЕсли;

	.....
		
КонецПроцедуры
Показать
KNM.Work; alex-l19041; Oldsad; +3 Ответить
3. tusv 212 26.06.19 10:11 Сейчас в теме
(1)В Правила конвертации Добавить в Обработчик После загрузки ДополнительноеСвойство, на пример "НеВыгружатьОбъект".
Далее проверять это свойство, если истина, то не выгружать
В КД
Объект.ДополнительныеСвойства.Вставить("НеВыгружатьОбъект");

в ПриЗаписи
....
Если Не ДополнительныеСвойства.Свойство("НеВыгружатьОбъект") Тогда
     Процедура выгрузки объекта
КонецЕсли;
......
KNM.Work; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ZergKRSK 130 26.06.19 09:24 Сейчас в теме
(1)
Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка  Тогда
		Возврат;
	КонецЕсли;

	.....
		
КонецПроцедуры
Показать
KNM.Work; alex-l19041; Oldsad; +3 Ответить
3. tusv 212 26.06.19 10:11 Сейчас в теме
(1)В Правила конвертации Добавить в Обработчик После загрузки ДополнительноеСвойство, на пример "НеВыгружатьОбъект".
Далее проверять это свойство, если истина, то не выгружать
В КД
Объект.ДополнительныеСвойства.Вставить("НеВыгружатьОбъект");

в ПриЗаписи
....
Если Не ДополнительныеСвойства.Свойство("НеВыгружатьОбъект") Тогда
     Процедура выгрузки объекта
КонецЕсли;
......
KNM.Work; +1 Ответить
4. KNM.Work 27.06.19 01:24 Сейчас в теме
(3)

Кстати, вот прямо интересный вариант.

Я правильно понимаю логику? -
Во время конвертации, инициализируется ДокументОбъект, в нём устанавливается данное значение (в рамках текущей сессии работы с данным объектом), процедура записи срабатывает в той же сессии - соответственно, при записи объекта в ходе конвертации это будет срабатывать, а в остальных случаях - только если устанавливать такой же флаг.
5. tusv 212 27.06.19 10:09 Сейчас в теме
(4)Правильно понимаете. В правилах регистрации то же самое
KNM.Work; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот