К статье
Практический материал

Разработка и Конфигурация · 12 мин

Что такое веб-сервис в 1С и как его использовать

Что такое веб-сервис в 1С, чем HTTP-сервис отличается от SOAP, как опубликовать сервис на веб-сервере, настроить права и проверить работу интеграции.

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

Платформа 1С:Предприятие поддерживает два подхода. Первый — классические SOAP-сервисы, которые описываются объектом конфигурации «Web-сервис» и работают по протоколу SOAP с WSDL-описанием. Второй — HTTP-сервисы, появившиеся позже: они легче, позволяют работать с произвольными форматами (JSON, XML, двоичные данные) и фактически превращают 1С в небольшое REST-подобное API. В новых проектах чаще выбирают именно HTTP-сервисы.

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

Какие виды веб-сервисов существуют в 1С

В дереве конфигурации в ветке «Общие» присутствуют два разных объекта: «Web-сервисы» и «HTTP-сервисы». Объект «Web-сервис» реализует классический SOAP-подход: вы описываете операции, их параметры и типы данных, платформа автоматически формирует WSDL-описание, а клиенты вызывают операции по протоколу SOAP. Этот вариант исторически применялся для интеграции с корпоративными системами, где WSDL-контракт важен для строгой типизации.

Объект «HTTP-сервис» работает иначе: вы задаёте шаблоны URL (например, /hs/orders/{id}) и привязываете к ним методы GET, POST, PUT, DELETE, а в коде обработчика сами формируете тело ответа — обычно JSON. Это даёт полный контроль над форматом и делает интеграцию понятной для веб-разработчиков, которые привыкли к REST API. Кроме того, в типовых конфигурациях встречаются механизмы на базе стандартного интерфейса OData, который автоматически публикует данные объектов для чтения.

Сравнение вариантов

SOAP (объект «Web-сервис»)

Подходит, когда внешняя система требует WSDL-контракт и строгую типизацию. Ограничение: громоздкий XML-формат, сложнее отладка.

HTTP-сервис

Оптимален для новых интеграций: JSON, гибкие URL, привычен веб-разработчикам. Требует вручную реализовывать валидацию входных данных.

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

Быстрый способ открыть данные на чтение без кода. Не подходит для сложной бизнес-логики и операций записи с проверками.

Когда веб-сервис нужен, а когда есть альтернативы

Веб-сервис оправдан, когда обмен должен происходить в режиме, близком к реальному времени: сайт запрашивает актуальный остаток товара, курьерское приложение сразу видит новый заказ, касса проверяет скидочную карту. Если же данные можно передавать пакетами по расписанию — например, выгрузка проводок раз в сутки — часто проще и надёжнее использовать файловый обмен, планы обмена или механизмы EnterpriseData.

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

Маршрут решения

Как выбрать действие

Данные нужны внешней системе немедленно по запросуПубликуйте HTTP-сервис или SOAP-сервис
Обмен допускает задержку и идёт большими порциямиИспользуйте планы обмена, EnterpriseData или файловую выгрузку по расписанию
Нужно только читать справочники и документы без логикиРассмотрите стандартный интерфейс OData
1С сама должна забирать данные у внешнего APIИспользуйте HTTPСоединение и HTTPЗапрос из кода, публикация не требуется

Как опубликовать веб-сервис из 1С

Публикация означает, что запросы внешних систем будет принимать веб-сервер (Apache или IIS), который через модуль расширения платформы передаёт их в информационную базу. Без веб-сервера опубликованный сервис работать не будет — файловый или клиент-серверный вариант базы сам по себе HTTP-запросы не принимает.

Порядок действий в конфигураторе: откройте меню «Администрирование» → «Публикация на веб-сервере», укажите имя публикации (латиницей, без пробелов), каталог для файлов публикации, установите флажки «Публиковать HTTP-сервисы» и/или «Публиковать Web-сервисы», затем нажмите «Опубликовать». После этого сервис станет доступен по адресу вида http://сервер/ИмяПубликации/hs/КорневойURL/... для HTTP-сервисов или .../ws/ИмяСервиса?wsdl для SOAP.

На рабочем сервере убедитесь, что установлены модули расширения веб-сервера из дистрибутива платформы и что версия разрядности модуля совпадает с разрядностью веб-сервера — несовпадение 32/64 бит является одной из самых частых причин ошибки «сервис недоступен» сразу после публикации.

Порядок публикации
  1. 1
    Создайте в конфигураторе объект «HTTP-сервис» или «Web-сервис» и напишите код обработчиков
  2. 2
    Установите веб-сервер (Apache или IIS) и модули расширения платформы 1С
  3. 3
    В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере»
  4. 4
    Задайте имя публикации, каталог, включите нужные флажки публикации сервисов
  5. 5
    Нажмите «Опубликовать» и проверьте доступность URL из браузера или Postman
  6. 6
    Настройте HTTPS и аутентификацию перед выводом сервиса за пределы локальной сети

Как написать обработчик HTTP-сервиса

В свойствах HTTP-сервиса задаётся корневой URL, а внутри создаются шаблоны URL с методами. Для каждого метода платформа формирует функцию-обработчик, в которую передаётся объект HTTPСервисЗапрос. Из него вы читаете параметры строки запроса, заголовки и тело, выполняете бизнес-логику и возвращаете объект HTTPСервисОтвет с кодом состояния и телом.

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

Обращайте внимание на три вещи. Во-первых, всегда возвращайте осмысленные HTTP-коды: 200 при успехе, 400 при ошибке в параметрах, 401 при отказе в доступе, 500 при внутренней ошибке — это упрощает диагностику на стороне клиента. Во-вторых, явно устанавливайте заголовок Content-Type с кодировкой UTF-8, иначе кириллица в ответе может отображаться некорректно. В-третьих, проверяйте все входные параметры до обращения к базе: непроверенные данные из внешнего запроса — источник ошибок и уязвимостей.

Как вызвать внешний веб-сервис из 1С

Для обращения к чужим API из кода используется связка объектов HTTPСоединение и HTTPЗапрос. Соединение описывает сервер, порт, защищённость (SSL) и при необходимости прокси, а запрос — конкретный ресурс, метод, заголовки и тело. Ответ приходит как объект HTTPОтвет, из которого читаются код состояния и тело.

Для SOAP-сервисов существует альтернатива: объект WSСсылка, который по адресу WSDL-описания автоматически создаёт прокси с типизированными методами. Это удобно, когда у внешнего сервиса сложная структура данных, но требует, чтобы WSDL был доступен в момент вызова. Для большинства современных REST API с JSON проще и прозрачнее работать через HTTPСоединение.

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

Безопасность и права доступа

Аутентификация опубликованных сервисов по умолчанию выполняется средствами платформы: вызывающая сторона указывает имя и пароль пользователя информационной базы (basic-аутентификация). Создавайте для интеграции отдельного технического пользователя и назначайте ему роли, дающие доступ только к тем объектам, которые реально нужны сервису. Использование учётной записи администратора или полных прав в коде интеграции — серьёзный риск.

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

Типичные ошибки
01
Публикация сервиса без HTTPS — учётные данные и содержимое запросов передаются открыто
02
Технический пользователь с полными правами — компрометация логина открывает доступ ко всей базе
03
Отсутствие проверки входных параметров — некорректный запрос вызывает исключение и раскрывает текст ошибки наружу
04
Тяжёлый запрос к базе на каждый вызов без кэширования — деградация производительности сервера 1С под нагрузкой
05
Несовпадение разрядности веб-сервера и модуля расширения платформы — сервис возвращает ошибку сразу после публикации
06
Отсутствие таймаута при вызове внешнего API — зависший сервис блокирует сеанс пользователя

Как проверить работу сервиса и найти ошибку

Первичная проверка выполняется без всякого кода: для HTTP-сервиса с методом GET достаточно открыть URL в браузере, для SOAP — запросить WSDL по адресу ?wsdl. Если страница открывается и возвращает данные или XML-описание, публикация работает. Для методов POST/PUT используйте инструменты вроде Postman или curl, где можно задать заголовки, тело и авторизацию.

Если сервис недоступен, проверяйте по цепочке: отвечает ли сам веб-сервер (открывается ли любая статическая страница), корректен ли файл default.vrd в каталоге публикации, совпадает ли имя информационной базы и строка подключения, есть ли у пользователя веб-сервера права на каталог публикации. Ошибки исполнения обработчика ищите в журнале регистрации информационной базы — туда попадают исключения из кода сервиса.

Контрольные точки

Как проверить результат

Запрос WSDL или GET-метода из браузера
Норма

Возвращается XML-описание или данные с кодом 200

Тревожный признак

Ошибка 404 (не опубликовано), 403 (нет прав), 500 (ошибка в коде обработчика)

Код ответа при неверных параметрах
Норма

Возвращается 400 с понятным описанием проблемы

Тревожный признак

Код 500 с текстом внутреннего исключения платформы

Журнал регистрации после тестового вызова
Норма

Событий ошибок нет или зафиксированы ожидаемые отказы в доступе

Тревожный признак

Неразобранные исключения из обработчика сервиса

Кириллица в теле ответа
Норма

Текст читается корректно, указан charset=utf-8

Тревожный признак

Кракозябры — не установлен Content-Type с кодировкой

Итог

Что важно запомнить

Веб-сервис в 1С — это интеграционный механизм платформы: HTTP-сервисы и SOAP-сервисы принимают запросы извне через веб-сервер, а HTTPСоединение и WSСсылка позволяют 1С вызывать чужие API. Для новых интеграций обычно выбирают HTTP-сервисы с JSON. Обязательный минимум безопасности — HTTPS, отдельный пользователь с ограниченными правами и проверка всех входных данных.

Частые вопросы

Чем HTTP-сервис отличается от веб-сервиса (SOAP) в 1С?

SOAP-сервис работает по строгому контракту: платформа сама генерирует WSDL-описание и сериализует данные в XML-конверты. HTTP-сервис даёт свободу: вы сами определяете URL, метод и формат тела (обычно JSON), но и валидацию, и формирование ответа пишете вручную. Для интеграции с современными сайтами и мобильными приложениями HTTP-сервис удобнее, SOAP оправдан, когда внешняя система требует WSDL.

Можно ли опубликовать веб-сервис без веб-сервера?

Нет. Приём HTTP-запросов всегда выполняет веб-сервер (Apache или IIS) с модулем расширения платформы, который передаёт вызов в информационную базу. Альтернатива без собственного веб-сервера — размещение базы в облачном сервисе, где публикация уже настроена провайдером, или вынос интеграционной точки на отдельный компонент.

Почему после публикации сервис возвращает ошибку 404 или 500?

Ошибка 404 обычно означает неверный URL: проверьте имя публикации, корневой URL сервиса и шаблон. Ошибка 500 чаще связана с несовпадением разрядности веб-сервера и модуля расширения платформы, отсутствием прав на каталог публикации либо исключением в коде обработчика. Детали смотрите в логах веб-сервера и журнале регистрации базы.

Как передать из 1С ответ в формате JSON?

Сформируйте структуру данных (структуру или соответствие), сериализуйте её через объект ЗаписьJSON с установкой строки, затем передайте полученную строку в тело объекта HTTPСервисОтвет методом УстановитьТелоИзСтроки и укажите заголовок Content-Type: application/json; charset=utf-8.

Безопасно ли давать внешней системе логин и пароль пользователя 1С?

Допустимо только при соблюдении условий: соединение идёт по HTTPS, создан отдельный технический пользователь с минимально необходимыми ролями, пароль хранится на стороне вызывающей системы в защищённом хранилище, а не в коде. При возможности добавьте ограничение по IP-адресу или собственную проверку токена в обработчике.

Что выбрать для интеграции с сайтом: веб-сервис или выгрузку файлов?

Если сайту нужны актуальные данные в момент обращения (остатки, цены, статус заказа) — публикуйте HTTP-сервис. Если обмен идёт по расписанию большими порциями (каталог товаров раз в час, заказы раз в сутки) — файловая выгрузка или план обмена проще в поддержке и меньше нагружает сервер. На практике часто комбинируют оба способа.