Реализация HTTP-сервисов в системе 1С:Предприятие — это современный и эффективный способ интеграции с внешними сайтами, мобильными приложениями и другими информационными системами. В отличие от SOAP (Web-сервисов), HTTP-сервисы работают быстрее, передают меньше лишних данных и легче настраиваются. В данной статье мы разберем процесс создания сервиса для приема заказов с сайта по протоколу POST, выясним, как правильно настроить шаблоны URL, и изучим методы отладки. При отсутствии у внешней системы готового API для переноса данных используют RPA-платформу для создания программных роботов.
Для начала работы нам необходимо создать новый объект метаданных в ветке Общие -> HTTP-сервисы. Рассмотрим основные свойства, которые нужно заполнить:
WebSiteExchange. Это внутреннее имя объекта в конфигурации.WebSiteExchange. Именно этот фрагмент будет идти в ссылке после префикса /hs/. Например: https://сайт/база/hs/WebSiteExchange.Важно понимать структуру формирования ссылки. Полный путь к вашему методу будет выглядеть так: [АдресСервера]/[ИмяБазы]/hs/[КорневойURL]/[ШаблонURL]. Для регулярной передачи данных между несколькими базами 1С применяют автоматический обмен по расписанию через COM-соединение или веб-сервисы.
Перейдем к созданию структуры сервиса. Шаблоны URL определяют, на какие именно адреса будет реагировать наш сервис. Разберем создание шаблона для обработки заказов:
Orders./PostOrder. Обратите внимание: слеш в начале обязателен, а в конце — не рекомендуется, так как это может привести к ошибкам при сопоставлении пути веб-сервером.POST.Проанализируем ситуацию: если нам нужно проверять работу сервиса через обычный браузер, мы можем временно добавить метод GET в этот же шаблон. Однако помните, что браузеры по умолчанию выполняют только GET-запросы, а для полноценной передачи данных заказа (в формате JSON или XML) всегда используется POST.
Теперь рассмотрим, как выглядит программный код внутри модуля HTTP-сервиса. Основная задача обработчика — прочитать тело запроса, выполнить действия в базе (например, создать документ "Заказ клиента") и вернуть ответ.
Функция PostOrderPost(Запрос)
// 1. Получаем данные из тела запроса
СтрокаДанных = Запрос.ПолучитьТелоКакСтроку();
// 2. Десериализуем JSON (предположим, данные приходят в этом формате)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаДанных);
ДанныеЗаказа = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Попытка
// Здесь мы пишем логику создания заказа в 1С
// СоздатьЗаказВБазе(ДанныеЗаказа);
// 3. Формируем успешный ответ
Ответ = Новый HTTPСервисОтвет(201); // Код 201 - Created
Ответ.УстановитьТелоИзСтроки("Заказ успешно принят");
Исключение
// Если произошла ошибка при обработке
Ответ = Новый HTTPСервисОтвет(500); // Ошибка сервера
Ответ.УстановитьТелоИзСтроки("Ошибка при создании заказа: " + ОписаниеОшибки());
КонецПопытки;
Возврат Ответ;
КонецФункции
Выясним причину, почему важно возвращать объект HTTPСервисОтвет. Если функция вернет Неопределено или произойдет необработанное исключение, вызывающая сторона (сайт) получит ошибку 500, даже если заказ в базе создался. Всегда обрабатывайте ошибки внутри Попытка...Исключение.
Чтобы ссылка стала доступна извне, сервис нужно опубликовать. Рассмотрим этот процесс по шагам: для обеспечения стабильной работы опубликованных систем используют автоматическое архивирование и обслуживание 1С в тихом режиме.
WebSiteExchange. Также проверьте флаг "Публиковать HTTP сервисы по умолчанию".Посмотрим на пример: автор темы столкнулась с тем, что в браузере ссылка не открывается или выдает ошибку. Это нормально для 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);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить("Код ответа: " + Ответ.КодСостояния);
Сообщить("Тело ответа: " + Ответ.ПолучитьТелоКакСтроку());
КонецПроцедуры
Проанализируем ситуацию, когда запрос уходит, но данные обрабатываются неверно. Как поймать "точку останова"?
Просто поставить точку останова в модуле сервиса недостаточно. Чтобы отладка сработала на веб-сервере, необходимо:
default.vrd (находится в папке публикации на сервере) должен быть параметр debug="true".Теперь при отправке запроса через Postman или из другой 1С, конфигуратор "замрет" на вашей точке останова, и вы сможете изучить содержимое объекта Запрос.
Если вы планируете обращаться к сервису напрямую из JavaScript-кода браузера с другого домена, вы столкнетесь с проблемой CORS. Для её решения нужно реализовать метод OPTIONS в том же шаблоне URL. Этот метод должен возвращать пустой ответ с заголовками:
Access-Control-Allow-Origin: *Access-Control-Allow-Methods: POST, GET, OPTIONSAccess-Control-Allow-Headers: Content-TypeТакже не забывайте про безопасность. Рекомендуется создать в 1С отдельного пользователя с минимальными правами (только на использование данного HTTP-сервиса и чтение/запись нужных документов) и использовать Basic Authentication при подключении.