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

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

Как создать web-сервис в 1С: от объекта конфигурации до публикации

Пошаговое руководство по созданию web-сервиса в 1С: настройка публикации, написание функций, тестирование WSDL, типичные ошибки и проверка результата.

Web-сервис в 1С позволяет открыть наружу функциональность прикладного решения: внешние системы (сайты, мобильные приложения, другие учётные базы) смогут вызывать операции 1С по протоколу SOAP и обмениваться данными в формате XML. Механизм встроен в платформу, поэтому для базового сценария не нужны сторонние библиотеки — достаточно конфигуратора и веб-сервера.

Типовой сценарий выглядит так: в конфигураторе создаётся объект «Web-сервис», у него описываются операции и параметры, в модуле сервиса пишется код на встроенном языке, затем сервис публикуется на веб-сервере (IIS или Apache) и становится доступен по HTTP-адресу с описанием WSDL.

Ниже разобран полный цикл: от подготовки инфраструктуры до проверки работающего сервиса и типичных ошибок, которые встречаются при первой публикации.

Какие способы интеграции существуют и когда выбирать web-сервис

В 1С доступно несколько механизмов обмена с внешними системами: SOAP web-сервисы, HTTP-сервисы (REST-подобный подход), автоматический REST-интерфейс OData, планы обмена и файловый обмен. Выбор зависит от требований внешней системы и сложности данных.

SOAP web-сервис оправдан, когда внешняя система умеет работать по WSDL-контракту: например, корпоративные шины данных, системы на Java или .NET, где генерация клиента по WSDL — стандартный подход. HTTP-сервисы проще в отладке и лучше подходят для мобильных приложений и сайтов, где принят JSON. OData удобен для быстрого доступа к данным справочников и документов без написания кода.

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

SOAP web-сервис

Подходит для систем со строгим контрактом по WSDL; требует публикации и аккуратного описания типов параметров

HTTP-сервис

Гибкий формат запросов и ответов (JSON, XML, произвольный); контракт придётся документировать вручную

OData

Включается одной настройкой, даёт доступ к данным без кода; слабо подходит для сложной бизнес-логики

Планы обмена

Для регулярной синхронизации между базами 1С; не подходят для вызова операций в реальном времени

Что подготовить перед созданием сервиса

Понадобятся три компонента: платформа 1С:Предприятие с конфигуратором, веб-сервер (IIS на Windows или Apache на Windows/Linux) и права на публикацию базы. Для файловой базы публикация выполняется прямо из конфигуратора, для клиент-серверной — тоже, но дополнительно нужно учитывать права учётной записи, под которой работает веб-сервер.

Заранее определите контракт сервиса: какие операции он предоставляет, какие данные принимает и возвращает. Например, операция «ПолучитьОстаток» принимает артикул номенклатуры и возвращает количество и склад. Продуманный контракт избавит от переделки WSDL, когда внешняя система уже начнёт интеграцию.

Как создать объект «Web-сервис» в конфигураторе

Откройте конфигурацию в конфигураторе, в дереве объектов найдите ветку «Общие» → «Web-сервисы» и добавьте новый объект. Задайте имя (латиницей, например ExchangeService) — оно войдёт в URL публикации.

В свойствах сервиса важны три поля: «URI пространства имен» — уникальный идентификатор сервиса, обычно вида http://company.ru/exchange; «Имя файла публикации» — по умолчанию совпадает с именем; «Пакеты XDTO» — пакеты, описывающие типы данных параметров. Для простых типов (строка, число, дата, булево) пакеты XDTO можно не создавать.

Если операция должна принимать или возвращать сложную структуру — например, таблицу товаров с полями — создайте пакет XDTO в ветке «Общие» → «XDTO-пакеты» и опишите там типы объектов. Это избавит от ручной сборки XML в коде.

Как описать операции и написать код модуля

В дереве web-сервиса добавьте операцию, например GetStock. У операции задайте тип возвращаемого значения — для простых случаев это типы из пространства http://www.w3.org/2001/XMLSchema: string, int, boolean. Затем добавьте параметры операции: имя, тип, признак «Возможно пустой».

После добавления операции платформа создаст в модуле web-сервиса заготовку функции. Напишите в ней прикладную логику. Пример функции, возвращающей остаток по артикулу:

Функция GetStock(Артикул)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ТоварыОстатки.КоличествоОстаток КАК Остаток

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.Артикул = &Артикул) КАК ТоварыОстатки";

Запрос.УстановитьПараметр("Артикул", Артикул);

РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда

Возврат 0;

КонецЕсли;

Выборка = РезультатЗапроса.Выбрать();

Выборка.Следующий();

Возврат Выборка.Остаток;

КонецФункции

Обратите внимание: код web-сервиса выполняется на сервере в контексте сеанса, созданного веб-сервером. В нём недоступны интерактивные вызовы (Предупреждение, Вопрос), а длительные операции могут оборваться по таймауту веб-сервера. Тяжёлые вычисления лучше выносить в фоновые задания или ограничивать объём выборки.

Типичные ошибки при написании кода
01
Возврат ссылочного типа 1С (СправочникСсылка) напрямую — внешняя система не сможет его интерпретировать; возвращайте строковые представления или структуры XDTO
02
Отсутствие обработки пустого результата — внешний клиент получает ошибку вместо понятного ответа
03
Исключения без перехвата — необработанная ошибка 1С превращается в SOAP Fault с неинформативным текстом; оборачивайте логику в Попытка/Исключение и возвращайте осмысленное сообщение

Как опубликовать web-сервис на веб-сервере

Публикация выполняется из конфигуратора: меню «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации (латиницей), выберите веб-сервер и каталог. На закладке «Web-сервисы» отметьте флажком созданный сервис — без этого он не будет доступен, даже если публикация пройдёт успешно.

Для работы публикации веб-серверу нужно расширение 1С (модуль wsap24 или аналог для IIS). Оно устанавливается вместе с платформой при выборе компонента «Модули расширения веб-сервера». Если при обращении к базе через браузер вы видите ошибку веб-сервера вместо окна входа — чаще всего модуль не установлен или не зарегистрирован.

После публикации перезапустите веб-сервер (для IIS — командой iisreset) и проверьте доступность базы через браузер по адресу вида http://server/basename.

Порядок публикации
  1. 1
    Убедитесь, что установлены модули расширения веб-сервера 1С
  2. 2
    В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере»
  3. 3
    Укажите имя публикации и каталог, выберите веб-сервер
  4. 4
    На закладке «Web-сервисы» отметьте нужный сервис флажком
  5. 5
    Нажмите «Опубликовать» и перезапустите веб-сервер
  6. 6
    Откройте в браузере адрес http://сервер/имя/ws/ИмяСервиса?wsdl и убедитесь, что возвращается XML-описание

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

Первый признак успеха — WSDL доступен в браузере: при переходе по адресу http://server/basename/ws/ExchangeService?wsdl отображается XML с описанием операций. Если вместо XML ошибка 404 — сервис не отмечен при публикации; если ошибка 500 — проблема в модуле расширения или правах на каталог базы; если запрос логина и пароля — включена аутентификация, что для рабочего сервиса нормально.

Для проверки вызова операции используйте инструмент вроде SoapUI или Postman: укажите адрес WSDL, сформируйте запрос к операции и передайте тестовый параметр. Ответ должен содержать ожидаемое значение. Проверьте также поведение при заведомо неверных входных данных — сервис должен вернуть контролируемую ошибку, а не падать.

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

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

Открытие WSDL в браузере
Норма

Возвращается XML с описанием операций и типов

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

Ошибка 404, 500 или пустая страница

Вызов операции с корректными данными
Норма

SOAP-ответ с ожидаемым значением

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

SOAP Fault с текстом ошибки платформы

Вызов с неверными данными
Норма

Контролируемое сообщение об ошибке из кода

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

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

Права доступа
Норма

Анонимный вызов отклоняется, авторизованный проходит

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

Сервис доступен без авторизации, хотя это не планировалось

Безопасность и ограничения

Опубликованный web-сервис — это точка входа в базу, поэтому минимальный набор мер обязателен: отдельный пользователь 1С с правами только на нужные объекты, аутентификация средствами платформы или веб-сервера, HTTPS при доступе извне локальной сети. Открытый без авторизации сервис, возвращающий данные о клиентах или остатках, — прямой риск утечки.

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

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

Можно ли создать web-сервис без веб-сервера?

Нет, для приёма внешних SOAP-запросов веб-сервер с модулем расширения 1С обязателен. Альтернатива — выносить интеграцию через очередь сообщений или файловый обмен, но это уже не web-сервис.

Чем web-сервис отличается от HTTP-сервиса в 1С?

Web-сервис работает по SOAP с контрактом WSDL и строгой типизацией. HTTP-сервис обрабатывает произвольные HTTP-запросы (GET, POST и др.) и позволяет самому формировать ответ, например в JSON. Для мобильных приложений и сайтов обычно удобнее HTTP-сервис.

Почему WSDL открывается, а вызов операции завершается ошибкой?

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

Как передать через web-сервис таблицу значений?

Напрямую таблицу значений передать нельзя. Опишите структуру строки в пакете XDTO как объектный тип, принимайте/возвращайте список таких объектов и в коде преобразуйте их в таблицу значений или сразу обработайте в цикле.

Нужно ли перепубликовывать сервис после изменения кода операции?

Изменения в модуле web-сервиса подхватываются после обновления конфигурации базы данных, перепубликация не требуется. Но если поменялись состав операций, параметры или типы — WSDL изменится, и клиенты внешней системы нужно будет обновить.

Итог

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

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