Как реализовать и отладить HTTP-сервис с методом POST в 1С?

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

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

Шаг 1. Создание объекта HTTP-сервис в конфигурации

Для начала работы нам необходимо создать новый объект метаданных в ветке Общие -> HTTP-сервисы. Рассмотрим основные свойства, которые нужно заполнить:

Важно понимать структуру формирования ссылки. Полный путь к вашему методу будет выглядеть так: [АдресСервера]/[ИмяБазы]/hs/[КорневойURL]/[ШаблонURL]. Для регулярной передачи данных между несколькими базами 1С применяют автоматический обмен по расписанию через COM-соединение или веб-сервисы.

Шаг 2. Настройка шаблонов URL и методов

Перейдем к созданию структуры сервиса. Шаблоны URL определяют, на какие именно адреса будет реагировать наш сервис. Разберем создание шаблона для обработки заказов:

  1. Внутри HTTP-сервиса перейдем на вкладку Шаблоны URL и добавим новый шаблон.
  2. Имя: Orders.
  3. Шаблон: /PostOrder. Обратите внимание: слеш в начале обязателен, а в конце — не рекомендуется, так как это может привести к ошибкам при сопоставлении пути веб-сервером.
  4. Внутри шаблона создадим Метод. Для приема данных (заказов) нам нужен метод POST.
  5. В поле Обработчик нажмем на лупу, чтобы система создала шаблон процедуры в модуле сервиса.

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

Шаг 3. Написание кода обработчика запроса

Теперь рассмотрим, как выглядит программный код внутри модуля HTTP-сервиса. Основная задача обработчика — прочитать тело запроса, выполнить действия в базе (например, создать документ "Заказ клиента") и вернуть ответ.


Функция PostOrderPost(Запрос)
    
    // 1. Получаем данные из тела запроса
    СтрокаДанных = Запрос.ПолучитьТелоКакСтроку();
    
    // 2. Десериализуем JSON (предположим, данные приходят в этом формате)
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаДанных);
    ДанныеЗаказа = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    Попытка
        // Здесь мы пишем логику создания заказа в 1С
        // СоздатьЗаказВБазе(ДанныеЗаказа);
        
        // 3. Формируем успешный ответ
        Ответ = Новый HTTPСервисОтвет(201); // Код 201 - Created
        Ответ.УстановитьТелоИзСтроки("Заказ успешно принят");
        
    Исключение
        // Если произошла ошибка при обработке
        Ответ = Новый HTTPСервисОтвет(500); // Ошибка сервера
        Ответ.УстановитьТелоИзСтроки("Ошибка при создании заказа: " + ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Ответ;
    
КонецФункции

Выясним причину, почему важно возвращать объект HTTPСервисОтвет. Если функция вернет Неопределено или произойдет необработанное исключение, вызывающая сторона (сайт) получит ошибку 500, даже если заказ в базе создался. Всегда обрабатывайте ошибки внутри Попытка...Исключение.

Шаг 4. Публикация сервиса на веб-сервере

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

  1. Запустите Конфигуратор от имени администратора.
  2. Перейдите в меню Администрирование -> Публикация на веб-сервере.
  3. На вкладке HTTP-сервисы обязательно установите флажок напротив вашего сервиса WebSiteExchange. Также проверьте флаг "Публиковать HTTP сервисы по умолчанию".
  4. Нажмите "Опубликовать". Система предложит перезапустить веб-сервер (Apache или IIS) — соглашайтесь.

Шаг 5. Как протестировать метод POST?

Посмотрим на пример: автор темы столкнулась с тем, что в браузере ссылка не открывается или выдает ошибку. Это нормально для POST-запросов. Чтобы проверить работоспособность, используем один из двух способов:

Способ А: Внешние утилиты (Postman / Insomnia)
Это профессиональный способ. Вы указываете URL, выбираете метод POST, в разделе Body вставляете JSON с данными заказа и нажимаете Send. Вы увидите код ответа (например, 200 или 201) и текст, который вернула 1С. Также для этой задачи можно использовать инструмент для отправки и тестирования запросов внутри 1С, заменяющий сторонние утилиты.

Способ Б: Тестирование из другой базы 1С
Разберем код, которым можно отправить запрос прямо из обработки 1С для теста вашего сервиса:


Процедура ТестСервиса()
    
    Сервер = "ваш-сайт.ru";
    Ресурс = "/название-базы/hs/WebSiteExchange/PostOrder";
    
    Соединение = Новый HTTPСоединение(Сервер, , "Логин", "Пароль");
    Запрос = Новый HTTPЗапрос(Ресурс);
    Запрос.УстановитьТелоИзСтроки("{'order_id': '123', 'amount': 1500}", КодировкаТекста.UTF8);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    
    Сообщить("Код ответа: " + Ответ.КодСостояния);
    Сообщить("Тело ответа: " + Ответ.ПолучитьТелоКакСтроку());
    
КонецПроцедуры

Шаг 6. Отладка HTTP-сервиса

Проанализируем ситуацию, когда запрос уходит, но данные обрабатываются неверно. Как поймать "точку останова"?

Просто поставить точку останова в модуле сервиса недостаточно. Чтобы отладка сработала на веб-сервере, необходимо:

Теперь при отправке запроса через Postman или из другой 1С, конфигуратор "замрет" на вашей точке останова, и вы сможете изучить содержимое объекта Запрос.

Дополнительные рекомендации (CORS и авторизация)

Если вы планируете обращаться к сервису напрямую из JavaScript-кода браузера с другого домена, вы столкнетесь с проблемой CORS. Для её решения нужно реализовать метод OPTIONS в том же шаблоне URL. Этот метод должен возвращать пустой ответ с заголовками:

Также не забывайте про безопасность. Рекомендуется создать в 1С отдельного пользователя с минимальными правами (только на использование данного HTTP-сервиса и чтение/запись нужных документов) и использовать Basic Authentication при подключении.

← На главную