Передача заказов с сайта в систему 1С — критически важный процесс для любого интернет-магазина. Ранее распространенная схема получения заказов по электронной почте устарела из-за задержек и высокой вероятности утери писем. Современные системы требуют бесперебойной обработки входящего потока данных. Рассмотрим основные архитектурные подходы к решению этой задачи, их достоинства, недостатки и механизмы обеспечения отказоустойчивости.
Один из наиболее современных способов передачи данных — отправка JSON-структуры с данными заказа напрямую в HTTPСервисы платформы 1С. Для обеспечения гарантированной доставки между сайтом и 1С устанавливают брокер сообщений (например, RabbitMQ).
Рассмотрим схему работы через брокер сообщений:
ЗаказПокупателя и возвращает статус ответа (HTTP 200 OK).Если развертывание полновесного брокера RabbitMQ избыточно, проанализируем гибридный подход. В этой схеме сайт пытается передать заказ в 1С напрямую через HTTP-сервис, а при возникновении сбоя переключается на локальный файловый буфер.
Разберем алгоритм по шагам:
При высоком потоке обращений к HTTP-сервису 1С можно столкнуться с задержками из-за инициализации параметров сеанса и повторной авторизации. Каждая сессия без настройки пула соединений тратит ресурсы сервера на старт сеанса.
Чтобы избежать этой проблемы, выделим основные рекомендации по оптимизации:
1. Настройка пула сеансов на веб-сервере
В файле конфигурации публикации default.vrd на веб-сервере (IIS или Apache) настраивают параметры повторного использования сеансов:
<point httpServices="true">
<reuseSessions>autouse</reuseSessions>
<sessionMaxAge>20</sessionMaxAge>
<maxSessions>8</maxSessions>
</point>
Параметр reuseSessions="autouse" позволяет платформе переиспользовать уже созданные сеансы 1С для последующих HTTP-запросов, исключая накладные расходы на постоянный вход в систему.
2. Легковесный модуль внешнего соединения
Для ускорения обработки входящих запросов необходимо минимизировать тяжелые вычисления в модуле МодульСеанса и при инициализации параметров сеанса, если вызов идет от имени сервисного пользователя обмена.
3. Асинхронная обработка (Pattern 202 Accepted)
Если при получении заказа требуется проводить сложную бизнес-логику (расчет скидок, проверка остатков, создание контрагента), не выполняйте эти действия синхронно в теле HTTP-сервиса. Быстро сохраните полученный JSON во временный регистр сведений или запустите фоновое задание через ФоновыеЗадания.ВыполнитьВФоне и сразу верните сайту код 202 Accepted.
Функция ПринятьЗаказ(Запрос)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
СтруктураЗаказа = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Быстрая запись сырых данных в регистр буфера
МенеджерЗаписи = РегистрыСведений.БуферВходящихЗаказов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.ИдентификаторЗаказа = СтруктураЗаказа.ID;
МенеджерЗаписи.ДанныеJSON = Запрос.ПолучитьТелоКакСтроку();
МенеджерЗаписи.Записать();
// Запуск асинхронной обработки
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(СтруктураЗаказа.ID);
ФоновыеЗадания.ВыполнитьВФоне("ОбработкаЗаказов.ОбработатьЗаказИзБуфера", МассивПараметров);
Ответ = Новый HTTPСервисОтвет(202);
Возврат Ответ;
КонецФункции
Выделим другие распространенные технологии обмена между 1С и внешними системами:
FTPСоединение сканирует каталог по регламентному заданию. Способ прост в реализации и изолирует 1С от прямого доступа из внешнего интернета, однако не обеспечивает моментальной доставки (присутствует задержка между запусками регламента).Проанализировав все способы, можно сделать вывод: комбинация HTTP-сервиса 1С + брокера сообщений (RabbitMQ / 1С:Шина) либо HTTP-сервиса с фолбэком в файлы является наиболее изящным, надежным и масштабируемым решением для непрерывного обмена данными.