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

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

В современной экосистеме автоматизации бизнеса интеграция 1С с внешними сайтами, мобильными приложениями и сторонними сервисами через HTTP-сервисы стала стандартом де-факто. В отличие от тяжеловесных SOAP Web-сервисов, HTTP-сервисы работают быстрее, проще в отладке и используют общепринятые протоколы передачи данных, такие как JSON. Рассмотрим подробно, как создать свой первый сервис, реализовать методы обработки данных и правильно опубликовать его на веб-сервере.

Определяем структуру HTTP-сервиса в метаданных

Прежде чем приступать к написанию кода, проанализируем структуру объекта в дереве конфигурации. Создадим новый объект HTTP-сервисы. Основным параметром здесь является Корневой URL. Это уникальное имя, которое будет использоваться в строке адреса (например, orders_exchange). Далее нам необходимо настроить шаблоны URL. Разберем по шагам:

  1. Создаем Шаблон URL. В поле шаблон укажем /v1/get_data/{ID}. Здесь часть в фигурных скобках является параметром, который мы сможем прочитать в коде.
  2. Внутри шаблона создаем Метод. Для получения данных используем GET, для передачи и записи — POST.
  3. Указываем имя обработчика — это процедура в модуле сервиса, которая будет выполняться при вызове данного URL.

Реализация метода GET для получения данных из 1С

Рассмотрим ситуацию, когда внешняя система запрашивает информацию об остатках товара. В модуле HTTP-сервиса создадим функцию-обработчик. Проанализируем пример кода, который возвращает данные в формате JSON:


Функция ОстаткиТоваровGet_Data(Запрос)
    
    // Получаем параметр из URL
    ИдентификаторТовара = Запрос.ПараметрыURL.Получить("ID");
    
    // Формируем структуру ответа
    ДанныеОтвета = Новый Структура;
    ДанныеОтвета.Вставить("ID", ИдентификаторТовара);
    ДанныеОтвета.Вставить("Остаток", 150); // Здесь может быть ваш запрос к базе
    ДанныеОтвета.Вставить("Статус", "Success");
    
    // Сериализация в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ДанныеОтвета);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    // Формируем HTTP-ответ
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
    Ответ.Заголовки.Вставить("Content-Type", "application/json");
    
    Возврат Ответ;
    
КонецФункции

В данном примере мы используем объект HTTPСервисЗапрос для получения входящих параметров и HTTPСервисОтвет для возврата результата. Обратите внимание на важность установки заголовка Content-Type, чтобы вызывающая система понимала, что ей пришел именно JSON.

Прием данных через метод POST и создание документов

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


Функция СоздатьЗаказPost_Order(Запрос)
    
    // Читаем JSON из тела запроса
    СтрокаТела = Запрос.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    
    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаТела);
    ДанныеЗаказа = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Попробуем создать документ
    Попытка
        НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(ДанныеЗаказа.ClientName);
        // ... заполнение табличной части ...
        НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
        
        // Формируем успешный ответ
        Ответ = Новый HTTPСервисОтвет(201); // Created
        Ответ.УстановитьТелоИзСтроки("Документ создан успешно", КодировкаТекста.UTF8);
    Исключение
        // Обработка ошибок
        Ответ = Новый HTTPСервисОтвет(500); // Internal Server Error
        Ответ.УстановитьТелоИзСтроки("Ошибка при создании: " + ОписаниеОшибки(), КодировкаТекста.UTF8);
    КонецПопытки;
    
    Возврат Ответ;
    
КонецФункции

При работе с POST-запросами крайне важно использовать блок Попытка...Исключение. Если в процессе записи документа возникнет ошибка (например, не заполнено обязательное поле), сервис должен вернуть корректный код состояния (например, 500 или 400), а не просто "упасть", вызывая ошибку веб-сервера.

Важные аспекты работы с кодами состояний HTTP

Для качественного API недостаточно просто возвращать данные. Нужно использовать правильные коды состояний протокола HTTP. Выясним причину популярности определенных кодов:

Публикация сервиса на веб-сервере (IIS или Apache)

Чтобы ваш сервис стал доступен "извне", конфигурацию необходимо опубликовать. Разберем этот процесс по шагам:

  1. Запустите 1С:Предприятие от имени администратора.
  2. Перейдите в меню Администрирование — Публикация на веб-сервере.
  3. Выберите установленный веб-сервер (например, Internet Information Services).
  4. На вкладке "HTTP-сервисы" обязательно установите флажок напротив вашего сервиса.
  5. Нажмите кнопку "Опубликовать".

После этого адрес вашего сервиса будет выглядеть примерно так: http://server_name/base_name/hs/orders_exchange/v1/get_data/123. Обратите внимание, что сегмент /hs/ добавляется платформой автоматически для всех HTTP-сервисов.

Безопасность и авторизация

Проанализируем вопрос безопасности. По умолчанию доступ к HTTP-сервисам требует авторизации. Мы рекомендуем создать в 1С отдельного пользователя с ограниченными правами, который имеет доступ только к тем объектам метаданных, которые задействованы в сервисе. При вызове сервиса извне необходимо передавать данные авторизации в заголовке Authorization (обычно это Basic Auth, где логин и пароль кодируются в Base64).

Практический совет: Для отладки сервисов используйте специализированные инструменты, такие как Postman или Insomnia. Они позволяют имитировать запросы к 1С, настраивать заголовки и смотреть сырой ответ сервера, что значительно ускоряет поиск ошибок по сравнению с использованием браузера.

Оптимизация производительности

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

Таким образом, мы разобрали полный цикл создания HTTP-сервиса в среде 1С:Предприятие. Правильное проектирование структуры URL, использование стандартов JSON и корректная обработка кодов состояний позволят вам создавать надежные и быстрые интеграционные решения.

← На главную