Как не допустить зацикливания при обмене объектами между идентичными базами, если обмен происходит при записи объекта?
Доброго времени суток!
Дано:
Две простые базы на идентичных конфигурациях.
Настроенный обмен через веб-сервисы, с использованием типовой обработки "Универсальный обмен данными XML".
Передачу данных требовалось запускать при записи объекта - соответственно, обработчик "ПриЗаписи" вызывает процедуру, передающую объект в другую базу.
Проблема:
В другой базе ситуация такая же - и, естественно, при получении данных срабатывает тот же самый обработчик, и она немедленно отправляет обратно те же данные, что получила.
Ранее работал только с обменами, которые запускались вручную либо регламентным заданием. В данном же случае, задача стоит именно таким образом.
Как наиболее правильно избежать подобного?
Пока пробовал следующее:
1) Одна из баз является клиентом, вторая - сервером. Определить это можно довольно просто: на сервере не задаётся путь к базе, в которую требуется отправлять данные. Соответственно, добавил в процедуру отправки документа условие по заполнению пути к базе-приемнику. Как ни странно - не помогло.
2) Можно, конечно, включить в обработке (Универсальный Обмен Данными) флаг "Загружать данные в режиме обмена", вот только это налагает определённые ограничения на расширяемость решения. Как только понадобится, чтобы обработчики запускались - тут же придётся искать другое решение.
Как правильно разрешить такую ситуацию?
Дано:
Две простые базы на идентичных конфигурациях.
Настроенный обмен через веб-сервисы, с использованием типовой обработки "Универсальный обмен данными XML".
Передачу данных требовалось запускать при записи объекта - соответственно, обработчик "ПриЗаписи" вызывает процедуру, передающую объект в другую базу.
Проблема:
В другой базе ситуация такая же - и, естественно, при получении данных срабатывает тот же самый обработчик, и она немедленно отправляет обратно те же данные, что получила.
Ранее работал только с обменами, которые запускались вручную либо регламентным заданием. В данном же случае, задача стоит именно таким образом.
Как наиболее правильно избежать подобного?
Пока пробовал следующее:
1) Одна из баз является клиентом, вторая - сервером. Определить это можно довольно просто: на сервере не задаётся путь к базе, в которую требуется отправлять данные. Соответственно, добавил в процедуру отправки документа условие по заполнению пути к базе-приемнику. Как ни странно - не помогло.
2) Можно, конечно, включить в обработке (Универсальный Обмен Данными) флаг "Загружать данные в режиме обмена", вот только это налагает определённые ограничения на расширяемость решения. Как только понадобится, чтобы обработчики запускались - тут же придётся искать другое решение.
Как правильно разрешить такую ситуацию?
Найденные решения
(1)В Правила конвертации Добавить в Обработчик После загрузки ДополнительноеСвойство, на пример "НеВыгружатьОбъект".
Далее проверять это свойство, если истина, то не выгружать
В КД
в ПриЗаписи
Далее проверять это свойство, если истина, то не выгружать
В КД
Объект.ДополнительныеСвойства.Вставить("НеВыгружатьОбъект");
в ПриЗаписи
....
Если Не ДополнительныеСвойства.Свойство("НеВыгружатьОбъект") Тогда
Процедура выгрузки объекта
КонецЕсли;
......
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)В Правила конвертации Добавить в Обработчик После загрузки ДополнительноеСвойство, на пример "НеВыгружатьОбъект".
Далее проверять это свойство, если истина, то не выгружать
В КД
в ПриЗаписи
Далее проверять это свойство, если истина, то не выгружать
В КД
Объект.ДополнительныеСвойства.Вставить("НеВыгружатьОбъект");
в ПриЗаписи
....
Если Не ДополнительныеСвойства.Свойство("НеВыгружатьОбъект") Тогда
Процедура выгрузки объекта
КонецЕсли;
......
(3)
Кстати, вот прямо интересный вариант.
Я правильно понимаю логику? -
Во время конвертации, инициализируется ДокументОбъект, в нём устанавливается данное значение (в рамках текущей сессии работы с данным объектом), процедура записи срабатывает в той же сессии - соответственно, при записи объекта в ходе конвертации это будет срабатывать, а в остальных случаях - только если устанавливать такой же флаг.
Кстати, вот прямо интересный вариант.
Я правильно понимаю логику? -
Во время конвертации, инициализируется ДокументОбъект, в нём устанавливается данное значение (в рамках текущей сессии работы с данным объектом), процедура записи срабатывает в той же сессии - соответственно, при записи объекта в ходе конвертации это будет срабатывать, а в остальных случаях - только если устанавливать такой же флаг.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот