Разработка и Конфигурация · 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 удобен для быстрого доступа к данным справочников и документов без написания кода.
Сравнение вариантов интеграции
Подходит для систем со строгим контрактом по WSDL; требует публикации и аккуратного описания типов параметров
Гибкий формат запросов и ответов (JSON, XML, произвольный); контракт придётся документировать вручную
Включается одной настройкой, даёт доступ к данным без кода; слабо подходит для сложной бизнес-логики
Для регулярной синхронизации между базами 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-сервиса выполняется на сервере в контексте сеанса, созданного веб-сервером. В нём недоступны интерактивные вызовы (Предупреждение, Вопрос), а длительные операции могут оборваться по таймауту веб-сервера. Тяжёлые вычисления лучше выносить в фоновые задания или ограничивать объём выборки.
Как опубликовать web-сервис на веб-сервере
Публикация выполняется из конфигуратора: меню «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации (латиницей), выберите веб-сервер и каталог. На закладке «Web-сервисы» отметьте флажком созданный сервис — без этого он не будет доступен, даже если публикация пройдёт успешно.
Для работы публикации веб-серверу нужно расширение 1С (модуль wsap24 или аналог для IIS). Оно устанавливается вместе с платформой при выборе компонента «Модули расширения веб-сервера». Если при обращении к базе через браузер вы видите ошибку веб-сервера вместо окна входа — чаще всего модуль не установлен или не зарегистрирован.
После публикации перезапустите веб-сервер (для IIS — командой iisreset) и проверьте доступность базы через браузер по адресу вида http://server/basename.
- 1Убедитесь, что установлены модули расширения веб-сервера 1С
- 2В конфигураторе откройте «Администрирование» → «Публикация на веб-сервере»
- 3Укажите имя публикации и каталог, выберите веб-сервер
- 4На закладке «Web-сервисы» отметьте нужный сервис флажком
- 5Нажмите «Опубликовать» и перезапустите веб-сервер
- 6Откройте в браузере адрес http://сервер/имя/ws/ИмяСервиса?wsdl и убедитесь, что возвращается XML-описание
Как проверить работу сервиса
Первый признак успеха — WSDL доступен в браузере: при переходе по адресу http://server/basename/ws/ExchangeService?wsdl отображается XML с описанием операций. Если вместо XML ошибка 404 — сервис не отмечен при публикации; если ошибка 500 — проблема в модуле расширения или правах на каталог базы; если запрос логина и пароля — включена аутентификация, что для рабочего сервиса нормально.
Для проверки вызова операции используйте инструмент вроде SoapUI или Postman: укажите адрес 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.