Имя: Пароль:
1C
1С v8
Проблема синхронизации данных между двумя базами через веб-сервис
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) Такой вариант я тоже продумывал. Запрос из БИ запускает в БП фоновое задание и запоминает его ГУИД. Время от времени из БИ отправляется запрос на проверку состояния ФЗ. И если ФЗ завершилось с ошибкой, откатывать изменения в БИ. Но если во время выполнения ФЗ прервалась связь, нам придётся откатить транзакцию в БИ, при этом ФЗ в БП может завершиться без ошибок.
3 arsik
 
гуру
03.06.22
10:19
(0) Так ты сначала в базу БП зашли запрос и если успешно делай в БИ.
4 Barabashka
 
03.06.22
10:28
В таком случае я бы смотрел в сторону 1С:Шина. Позволяет передавать сообщения между различными ИБ с контролем доставки
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.