0
fjay69
02.06.22
✎
10:48
|
Дано: две базы 1с: база-источник (БИ) и база-приёмник (БП). Требуется выполнить следующую последовательность действий: завести с БИ ряд документов, если прошло без ошибок, отправить через веб-сервис команду в БП завести ряд документов там. Основные требования: 1) действия на стороне БИ должны выполняться в длительной операции, 2) вся последовательность должна выполниться по принципу "всё или ничего".
Пока идёт выполнение на стороне БИ, ничего экстрасложного: запускаем длительную операцию; в контексте сервера создаются документы и в контесте же сервера идёт отправка запроса в БП. Заведение документов и отправка в БП завёрнуты в транзакцию.
Со стороны БП: если во время заведения документов что-то пошло не так, откатить транзакцию со стороны БП, отправить об этом ответ в БИ и откатить транзакцию в БИ. Но что делать, если запрос с БП прерван по таймауту? Заведение документов в БП может пройти без ошибок, но на стороне БИ об этом не будет известно. На текущий момент у меня такая идея: запустить на стороне БП замер времени, и если заведение документов выполняется дольше, чем таймаут на стороне БИ, откатывать транзакцию. Насколько такой вариант жизнеспособен?
Другой вопрос, что делать, если прервана связь между БП и БИ не по таймауту? Тут замером времени уже не поможешь. Может быть в 1С есть механизм проверить, есть ли связь с БИ? Или от этой проблемы полностью не избавиться?
Возможно, у форумчан будут дополнения и по прочим пунктам.
|
|
1
mdemk
02.06.22
✎
20:19
|
Идея у тебя нормальная.
Можешь дополнить следующим вариантом реализации: отправляешь данные в БП, получаешь от нее ID пакета, ничего больше не ждешь, сеанс разрываешь.
БП видит, что появился новый пакет и начинает его обрабатывать, после обработки у пакета ставит Ок или НеОК.
Со стороны БИ через некоторое время проверяешь статус пакета, в зависимости от которого предпринимаешь какие-то действия.
|
|
2
fjay69
03.06.22
✎
09:29
|
(1) Такой вариант я тоже продумывал. Запрос из БИ запускает в БП фоновое задание и запоминает его ГУИД. Время от времени из БИ отправляется запрос на проверку состояния ФЗ. И если ФЗ завершилось с ошибкой, откатывать изменения в БИ. Но если во время выполнения ФЗ прервалась связь, нам придётся откатить транзакцию в БИ, при этом ФЗ в БП может завершиться без ошибок.
|
|