Как организовать прием внешних запросов в 1С в режиме реального времени

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

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

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

1. HTTP-сервисы (REST API)

HTTP-сервисы — наиболее популярный и гибкий механизм платформы для построения современных REST-интерфейсов. Они позволяют внешним системам отправлять стандартные HTTP-запросы (GET, POST, PUT, DELETE, PATCH) и получать сформированный в 1С ответ.

Разберем ключевые особенности HTTP-сервисов:

  1. Произвольный формат данных: В теле запроса и ответа можно передавать данные в форматах JSON, XML, обычном тексте или бинарном виде.
  2. Гибкость управления: В коде модулей 1С разработчик полностью контролирует HTTP-заголовки, статус-коды ответа (например, 200 OK, 400 Bad Request, 404 Not Found, 500 Internal Server Error) и структуру тела.
  3. Простота интеграции: С таким API легко работать из любого языка программирования (JavaScript, Python, PHP, C# и др.).

Посмотрим на типовой пример обработчика метода POST в модуле HTTP-сервиса, принимающего данные в формате JSON и возвращающего результат:


Функция ДанныеЗаказаВыполнитьPOST(Запрос)
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    Данные = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    СтруктураОтвета = Новый Структура;
    СтруктураОтвета.Вставить("Успех", Истина);
    СтруктураОтвета.Вставить("Идентификатор", Данные.НомерЗаказа);
    
    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, СтруктураОтвета);
    
    Ответ.УстановитьТелоИзСтроки(Запись.Закрыть(), "UTF-8");
    
    Возврат Ответ;
    
КонецФункции

2. Web-сервисы (SOAP)

Web-сервисы платформы 1С основаны на стандартах SOAP и протоколе WSDL. Это классический вариант интеграции с жестко типизированными контрактами данных.

Рассмотрим особенности использования SOAP-сервисов:

  1. Строгая типизация: Структура параметров запроса и возвращаемых значений описывается с помощью пакетов XDTO (XML Data Transfer Objects).
  2. Автоматическая генерация WSDL: Платформа 1С автоматически формирует файл описания сервиса (WSDL), по которому внешняя система может сгенерировать готовые клиентские классы.
  3. Сложность изменения: Изменение структуры XDTO-пакетов требует перенастройки схемы данных и перегенерации клиентов на стороне внешней системы.

3. Стандартный интерфейс OData

Если требуется предоставить внешний доступ к стандартным данным конфигурации (справочникам, документам, регистрам сведений) без написания программного кода API, можно использовать автоматический REST-интерфейс OData платформы 1С.

Разберем по шагам, как работает OData:

  1. В свойствах конфигурации и состава объектов указываются метаданные, для которых разрешен доступ через OData.
  2. Внешнее приложение обращается по стандартным URL-адресам протокола OData версии 3.0 или 4.0.
  3. Поддерживаются операции выборки, фильтрации, сортировки, создания, изменения и удаления объектов без разработки собственных модулей HTTP-сервисов.

4. Требования к инфраструктуре и публикация

Для того чтобы база 1С могла принимать входящие веб-вызовы (HTTP-сервисы, Web-сервисы или OData), необходимо настроить инфраструктуру:

  1. Веб-сервер: База данных публикуется на веб-сервере (Apache или Microsoft IIS) с использованием модуля расширения веб-сервера платформы 1С.
  2. Файл публикации (default.vrd): В конфигурационном файле публикации описываются точки входа и сервисы, доступные для внешних клиентов.
  3. Аутентификация: Для внешних подключений создается отдельный пользователь 1С с минимально необходимым набором прав (ролей) и настраивается базовая аутентификация (Basic Auth) либо авторизация по токенам в заголовках запроса.

5. Важные аспекты производительности и надежности

При проектировании синхронного API в 1С обратим внимание на следующие практические нюансы:

  1. Лицензирование: Обработка входящего запроса требует сеанса на сервере 1С. Для эффективного использования клиентских лицензий и ресурсов сервера на веб-сервере в файле default.vrd настраивается пул соединений.
  2. Длительность операций: Входящие веб-вызовы работают синхронно, поэтому выполнение тяжелых расчетов или формирование больших отчетов может привести к таймаутам на стороне внешнего клиента. Для длительных процедур рекомендуется запускать фоновое задание в 1С и сразу возвращать идентификатор задачи клиенту.
  3. Блокировки данных: При высокой частоте входящих запросов на запись одних и тех же объектов (например, остатков номенклатуры) необходимо контролировать транзакционные и управляемые блокировки, чтобы избежать взаимных блокировок сеансов.
← На главную