При настройке обмена данными между нетиповыми конфигурациями 1С разработчики часто сталкиваются с проблемой: стандартный механизм Планов обмена автоматически удаляет регистрацию изменений сразу после успешной выгрузки файла. Если на стороне приемника происходит ошибка (разрыв связи, ошибка записи объекта, невалидные данные), объект считается «ушедшим», и повторно отправить его стандартными средствами без ручной перерегистрации становится крайне сложно.
Рассмотрим, как выстроить архитектуру обмена так, чтобы гарантировать доставку данных и исключить их потерю.
Суть метода заключается в отказе от немедленного удаления регистрации. Вместо этого мы внедряем «трехфакторную» структуру обмена.
Регистр сведений в базе-источнике, куда будут сохраняться сформированные файлы обмена (или сериализованные данные). В качестве ключа используйте уникальный идентификатор сеанса обмена.Регистр сведений и отправляет базе-приемнику только ссылку (идентификатор) на этот файл.Плана обмена и очищает запись в Регистре сведений только после получения подтверждения успеха.Если в процессе обработки произошла ошибка, база-приемник сообщает об этом, и объект остается в очереди на следующую попытку отправки.
Современным и более гибким подходом является использование HTTP-сервисов вместо классических Web-сервисов. Это позволяет управлять статусами ответов и делает обмен более прозрачным.
Преимущества подхода:
Пример логики работы через статус-коды:
// На стороне базы-приемника
Функция ОбработкаPOSTЗапроса(Запрос)
Данные = ПрочитатьJSON(Запрос.ПолучитьТелоКакСтроку());
Попытка
ЗаписатьОбъектыВБазу(Данные);
Возврат Новый HTTPОтвет(200); // Успех
Исключение
ЗаписатьЛогОшибки(ОписаниеОшибки());
Возврат Новый HTTPОтвет(500); // Ошибка на стороне сервера
КонецПопытки;
КонецФункции
Часто ошибки возникают не из-за сети, а из-за того, что данные не соответствуют бизнес-правилам приемника (например, не заполнена аналитика). Чтобы избежать «зависания» обмена, рекомендуем использовать Лог обмена — специальный Регистр сведений, где фиксируются:
Это позволит вам реализовать механизм повторных попыток отправки Регламентным заданием. В случае ошибки, база-источник не удаляет регистрацию объекта в Плане обмена до тех пор, пока администратор или автоматический скрипт не устранит причину невалидности данных.
Удаление регистрации транзакционным событием, которое происходит строго после успешного завершения записи в приемнике.Применяя данные подходы, вы сможете построить надежную систему синхронизации, где ни один документ не потеряется, а каждая ошибка будет зафиксирована для последующего анализа и исправления.