Как отправить ответ из 1С на сайт после обработки заявки менеджером?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции 1С с веб-сайтом часто возникает задача: данные с сайта (например, регистрация пользователя) попадают в 1С, создается задача менеджеру, и после того как менеджер примет решение (одобрит или отклонит заявку), сайт должен получить этот ответ. Поскольку менеджер обрабатывает задачу не мгновенно, мы имеем дело с асинхронным процессом. Рассмотрим наиболее эффективные способы реализации такой обратной связи.

Способ 1. 1С как инициатор (Механизм Webhooks)

Разберем ситуацию, когда 1С сама сообщает сайту об изменении статуса. Этот подход считается наиболее правильным, так как он минимизирует нагрузку на сервер 1С (сайту не нужно постоянно «спрашивать» о готовности). Для реализации нам потребуется настроить HTTPСоединение.

Проанализируем алгоритм действий:

  1. Менеджер нажимает кнопку «Выполнено» в задаче.
  2. В модуле задачи срабатывает событие ПриЗаписи (или обработка команды).
  3. 1С формирует JSON-пакет с результатом.
  4. 1С отправляет POST-запрос на специальный URL-адрес сайта (скрипт-обработчик).

Посмотрим на пример кода для отправки данных из 1С:


// Создаем соединение с сайтом
Сервер = "www.vash-sait.ru";
ЗаголовокHTTP = Новый Соответствие;
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
ЗаголовокHTTP.Вставить("Authorization", "Bearer your_token_here"); // Для безопасности

Соединение = Новый HTTPСоединение(Сервер, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());

// Подготовим данные
ДанныеОтвета = Новый Структура;
ДанныеОтвета.Вставить("request_id", ЗадачаОбъект.ИдентификаторНаСайте);
ДанныеОтвета.Вставить("status", ?(ЗадачаОбъект.Результат = Истина, "approved", "rejected"));
ДанныеОтвета.Вставить("comment", ЗадачаОбъект.КомментарийМенеджера);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
СтрокаJSON = ЗаписьJSON.Закрыть();

// Отправка запроса
Запрос = Новый HTTPЗапрос("/api/v1/update_registration", ЗаголовокHTTP);
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);

Попытка
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        // Обработка успешного ответа
    КонецЕсли;
Исключение
    ЗаписьЖурналаРегистрации("ИнтеграцияССайтом", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
КонецПопытки;

Способ 2. Использование подписок на события и фоновых заданий

Выясним важный нюанс: если мы будем отправлять запрос прямо в момент нажатия кнопки менеджером, интерфейс 1С может «зависнуть» на несколько секунд, пока сайт не ответит. Чтобы этого избежать, проанализируем использование фоновых заданий.

Рассмотрим по шагам:

  1. Создадим общую функцию в серверном модуле, которая выполняет отправку (код из предыдущего примера).
  2. В событии ПриЗаписи задачи добавим проверку: если задача только что завершена, запустим фоновое задание.

Процедура ПриЗаписиЗадачи(Источник, Отказ)
    Если Источник.Выполнена И НЕ Источник.ДополнительныеСвойства.Свойство("ОтветУжеОтправлен") Тогда
        ПараметрыЗадания = Новый Массив;
        ПараметрыЗадания.Добавить(Источник.Ссылка);
        ФоновыеЗадания.Выполнить("ИнтеграцияССайтом.ОтправитьСтатусНаСайт", ПараметрыЗадания);
        Источник.ДополнительныеСвойства.Вставить("ОтветУжеОтправлен", Истина);
    КонецЕсли;
КонецПроцедуры

Такой подход делает работу менеджера комфортной, а 1С отправит данные в фоновом режиме, не блокируя работу пользователя.

Способ 3. Опрос статуса со стороны сайта (Polling)

Если со стороны сайта сложно реализовать прием HTTP-запросов, разберем альтернативный вариант. Сайт может периодически (например, раз в 5 минут или при входе пользователя в личный кабинет) опрашивать 1С о состоянии конкретной заявки.

Для этого в 1С необходимо создать HTTP-сервис с методом GET. Сайт передает уникальный идентификатор заявки (GUID), а 1С возвращает статус объекта.

Пример структуры ответа от 1С (JSON):


{
    "id": "e6b0166c-d6e4-11e6-a756-000c29f89c6b",
    "is_processed": true,
    "decision": "approved",
    "manager_note": "Добро пожаловать в нашу систему!"
}

Важный совет: Чтобы не перегружать базу 1С частыми запросами от «роботов» сайта, убедитесь, что веб-разработчики используют разумные интервалы опроса и кэширование.

Способ 4. Гарантированная доставка через очередь сообщений

Что произойдет, если в момент нажатия кнопки «Выполнено» сайт будет недоступен или возникнут проблемы с интернетом? Данные могут потеряться. Для решения этой проблемы проанализируем создание регистра сведений «Очередь сообщений для сайта».

Схема работы будет выглядеть так:

Безопасность обмена данными

При передаче данных между 1С и сайтом обязательно соблюдайте правила безопасности:

Подведем итог: наиболее современным и надежным методом является комбинация фонового задания и очереди сообщений в 1С, отправляющая данные на сайт через HTTP-запрос (Webhook). Это обеспечивает мгновенное обновление информации на сайте при минимальной нагрузке на систему.

← На главную