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

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

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

Как создать веб-сервис в 1С: настройка публикации на веб-сервере, создание объекта конфигурации, операции, WSDL-описание и тестирование обмена данными.

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

Создание веб-сервиса в 1С состоит из трёх обязательных этапов: описание объекта «Web-сервис» в конфигураторе с операциями и кодом обработчиков, публикация базы на веб-сервере (IIS или Apache) и проверка доступности WSDL-описания извне. Пропуск любого этапа — самая частая причина того, что сервис «есть в конфигурации, но не отвечает».

Ниже разобран полный цикл: когда веб-сервис оправдан, как написать его в конфигураторе, как опубликовать и как проверить работу. Материал ориентирован на платформу 1С:Предприятие 8.3 с файловой или клиент-серверной базой.

Когда нужен веб-сервис, а когда достаточно других механизмов

Перед разработкой стоит убедиться, что SOAP веб-сервис — правильный выбор. Он подходит, когда внешняя система должна инициировать обмен: например, сайт запрашивает остатки в реальном времени или CRM создаёт контрагента в 1С в момент регистрации клиента. SOAP хорошо документирован через WSDL, поддерживается большинством языков программирования и строго типизирует параметры.

Если же требуется простая передача JSON-данных или интеграция с современными мобильными приложениями, часто удобнее HTTP-сервисы — они легче, проще в отладке и не требуют генерации клиентских прокси-классов. Для обмена между двумя базами 1С также существуют планы обмена и EnterpriseData, которые закрывают типовые сценарии синхронизации без написания кода.

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

Web-сервис (SOAP)

Подходит, когда внешняя система активно вызывает методы 1С и нужна строгая типизация через WSDL. Ограничение — тяжеловесный формат и сложнее отладка.

HTTP-сервис (REST)

Оптимален для JSON-обмена, мобильных приложений и веб-интеграций. Проще отладка через браузер и Postman, но контракт описывается вручную.

Планы обмена

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

Подготовка: что должно быть настроено заранее

Для публикации веб-сервиса потребуется веб-сервер: IIS на Windows Server или Apache (поддерживаются версии 2.2 и 2.4 для соответствующих релизов платформы). На машине с веб-сервером должны быть установлены компоненты 1С — при установке платформы нужно отметить «Модули расширения веб-сервера». Без этих модулей публикация невозможна: кнопка в конфигураторе будет работать, но сервис не ответит.

Также проверьте, что у учётной записи, под которой работает пул приложений IIS (или служба Apache), есть права на чтение каталога базы и каталога публикации. Для клиент-серверной базы веб-сервер должен иметь сетевой доступ к серверу 1С и кластер должен разрешать подключение. Учётная запись 1С, под которой будут выполняться вызовы, должна существовать в базе и обладать правами на объекты, к которым обращается код сервиса.

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

Откройте конфигурацию в режиме «Конфигуратор», в дереве объектов найдите ветку «Общие» → «Web-сервисы» и добавьте новый объект. В свойствах задайте имя (например, ExchangeService), пространство имён URI — уникальный идентификатор сервиса, обычно в формате http://company.ru/ws/exchange. Пространство имён не обязано быть реальным адресом, но должно быть уникальным, чтобы клиенты корректно различали сервисы.

В свойствах сервиса также укажите пакеты XDTO, которые будут использоваться для типизации параметров, если простых типов (строка, число, булево, дата) недостаточно. Имя файла публикации по умолчанию формируется как ИмяСервиса.1cws — его можно изменить, но в большинстве случаев достаточно стандартного.

Операции и параметры

Внутри сервиса создаются операции — это методы, которые сможет вызывать внешняя система. Для каждой операции укажите имя, тип возвращаемого значения (например, string из пространства имён XML Schema) и имя процедуры-обработчика в модуле сервиса. Параметры операции описываются отдельно: имя, тип, признак возможного пустого значения.

Пример: операция GetStock с параметром SKU (строка), возвращающая строку с остатком. В модуле сервиса платформа автоматически создаст заготовку функции Функция GetStock(SKU), в которую вы добавите прикладной код — запрос к регистру остатков и формирование ответа.

Код обработчика операции

Обработчик операции — обычная функция на встроенном языке 1С в модуле веб-сервиса. Внутри доступны все прикладные объекты: справочники, документы, регистры, запросы. Код выполняется на сервере под пользователем, указанным при подключении, поэтому все проверки прав работают штатно.

Пример простого обработчика, возвращающего остаток по артикулу:

bsl
Функция GetStock(SKU)
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ ЕСТЬNULL(СУММА(Остатки.КоличествоОстаток), 0) КАК Остаток
	|ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура.Артикул = &Артикул) КАК Остатки";
	Запрос.УстановитьПараметр("Артикул", SKU);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Формат(Выборка.Остаток, "ЧГ=");
	Иначе
		Возврат "0";
	КонецЕсли;
КонецФункции

Возвращайте из операций только те данные, которые реально нужны вызывающей стороне. Передача целых таблиц значений или ссылок на объекты через SOAP невозможна — ссылку придётся сериализовать в строку УИДа, а таблицу — представить через пакет XDTO или строку JSON/XML. Для сложных структур заведите фабрику XDTO с описанием типа ответа: это даст строгую схему в WSDL и упростит жизнь разработчикам внешней системы.

Обязательно оборачивайте прикладной код в попытку-исключение и возвращайте осмысленное сообщение об ошибке вместо падения сервиса. Необработанное исключение превращается в SOAP Fault с техническим текстом, который сложно диагностировать на стороне клиента.

Типичные ошибки в коде сервиса
01
Не проверять входные параметры: пустой артикул приводит к запросу по всей номенклатуре и тяжёлой нагрузке на базу.
02
Возвращать необработанные исключения: клиент получает SOAP Fault без понятного описания, диагностика затягивается.
03
Выполнять длительные операции синхронно: внешний вызов отваливается по таймауту, а транзакция в 1С продолжает висеть.
04
Использовать пользователя с полными правами: любая уязвимость в коде открывает полный доступ к базе.

Публикация веб-сервиса на веб-сервере

Публикация выполняется из конфигуратора: меню «Администрирование» → «Публикация на веб-сервере». Укажите имя публикации (латиницей, без пробелов — оно станет частью URL), каталог публикации и отметьте флажок «Публиковать Web-сервисы». В списке сервисов убедитесь, что ваш сервис отмечен. После нажатия «Опубликовать» платформа запишет в каталог файлы default.vrd и ИмяСервиса.1cws.

Для IIS проверьте, что создано виртуальное приложение, включён нужный режим (32/64 бита — должен совпадать с разрядностью модулей расширения) и что обработчик wsisapi.dll разрешён в ограничениях ISAPI. Для Apache платформа добавляет директивы в httpd.conf — после публикации перезапустите службу веб-сервера.

Аутентификация настраивается на стороне веб-сервера. Базовая аутентификация передаёт логин и пароль пользователя 1С в заголовках, поэтому при работе через интернет обязательно включайте HTTPS, иначе учётные данные передаются открытым текстом. Альтернатива — настроить в файле default.vrd пользователя по умолчанию, но это снижает контроль доступа и подходит только для закрытых контуров.

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

Проверка работы и отладка

Первый признак успешной публикации — WSDL открывается в браузере и содержит описание ваших операций. Если вместо XML вы видите ошибку 404, сервис не опубликован или неверно указан путь; ошибка 500 обычно означает проблему с модулями расширения или правами на каталог; запрос авторизации, который не принимает корректный пароль, — несовпадение настроек аутентификации IIS и 1С.

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

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

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

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

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

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

Ошибка 404, 500 или бесконечный запрос пароля

Вызов операции из SoapUI
Норма

SOAP-ответ с ожидаемыми данными за разумное время

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

SOAP Fault, таймаут или пустой ответ

Права пользователя
Норма

Сервис видит только нужные объекты, запись ограничена сценарием

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

Под учёткой сервиса доступен весь интерфейс и все документы

Поведение при ошибке
Норма

Возвращается контролируемое сообщение об ошибке

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

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

Обращение к веб-сервису из другой базы 1С

Если потребитель сервиса — другая база 1С, подключение делается через WS-ссылки (объект «WS-ссылки» в конфигураторе) или динамически через WSОпределения. В первом случае конфигуратор по WSDL генерирует прокси-объект, и вызов операции выглядит как обычный вызов метода. Во втором — определение создаётся в коде по URL WSDL, что удобно, когда адрес сервиса меняется между контурами.

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

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

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

WSDL открывается, но операция возвращает ошибку правПроверьте роли пользователя, под которым идёт вызов, и права на конкретные объекты в коде обработчика
Ошибка 404 по адресу сервисаПроверьте имя публикации, наличие файла .1cws в каталоге и регистрацию расширения веб-сервера
Сервис работает локально, но недоступен извнеПроверьте брандмауэр, привязку сайта в IIS/Apache и корректность DNS-имени
Вызовы периодически падают по таймаутуПрофилируйте запросы в обработчике, добавьте индексы и сократите объём возвращаемых данных

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

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

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

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

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

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

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

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

Почему браузер запрашивает логин и пароль при открытии WSDL?

Это работает аутентификация веб-сервера. Введите имя и пароль пользователя информационной базы. Если корректные данные не принимаются, проверьте настройки аутентификации в IIS (должна быть включена Basic) и убедитесь, что пользователь существует в базе и не заблокирован.

Как передать через веб-сервис сложную структуру данных?

Опишите тип в пакете XDTO и укажите его как тип параметра или возвращаемого значения операции — структура попадёт в WSDL. Альтернатива без изменения схемы: сериализовать данные в JSON-строку и передать как обычный строковый параметр, но тогда контракт придётся документировать вручную.

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

Нет, достаточно обновить конфигурацию базы данных. Перезапуск веб-сервера требуется только после повторной публикации (изменения состава сервисов, каталога или настроек default.vrd) либо при смене модулей расширения.

Безопасно ли открывать веб-сервис 1С в интернет?

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

Итог

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

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