Разработка и Конфигурация · 10 мин
Как вызвать веб-сервис 1С
Как вызвать веб-сервис 1С: публикация HTTP- и SOAP-сервисов, настройка WS-ссылок, вызов из 1С и внешних приложений, типичные ошибки и проверка результата.
Вызов веб-сервиса 1С — стандартный способ интеграции информационной базы с внешними системами: сайтами, мобильными приложениями, CRM и другими учётными программами. 1С умеет работать в обе стороны: публиковать собственные веб-сервисы (SOAP и HTTP-сервисы), чтобы внешние системы обращались к базе, и выступать клиентом, вызывая чужие сервисы через WS-ссылки или HTTP-запросы.
Технически вызов сводится к трём шагам: сервис должен быть опубликован на веб-сервере (IIS или Apache), вызывающая сторона должна знать адрес и параметры операции, а аутентификация должна пропускать запрос. Большинство проблем возникает не в коде, а именно в публикации и правах доступа.
Ниже разобраны оба сценария: вызов сервиса, опубликованного самой 1С, и вызов внешнего веб-сервиса из кода 1С. Для каждого приведены порядок действий, способы проверки и типичные ошибки.
Какие виды веб-сервисов есть в 1С и что выбрать
Платформа 1С:Предприятие поддерживает два механизма. Первый — классические SOAP-сервисы: они описываются в конфигураторе в ветке «Общие — Web-сервисы», автоматически генерируют WSDL-описание и подходят для интеграций, где внешняя система умеет работать с SOAP. Второй — HTTP-сервисы (ветка «Общие — HTTP-сервисы»): лёгкий вариант в стиле REST, где вы сами определяете шаблоны URL, методы (GET, POST и другие) и формат данных, обычно JSON.
Отдельно стоит стандартный OData-интерфейс: он публикуется без программирования и даёт доступ к данным объектов конфигурации через HTTP. Он удобен для чтения справочников и документов, но не заменяет полноценную бизнес-логику.
Сравнение вариантов
Подходит для интеграций с системами, ожидающими WSDL. Ограничение: тяжеловесный протокол, сложнее отладка.
Подходит для сайтов, мобильных приложений и лёгких интеграций. Ограничение: описание API нужно вести вручную.
Подходит для быстрого доступа к данным без кода. Ограничение: только CRUD-операции над объектами, нет произвольной логики.
Как опубликовать веб-сервис 1С на веб-сервере
Без публикации веб-сервис недоступен извне: база 1С сама по себе не принимает HTTP-запросы. Публикация выполняется на веб-сервере IIS (Windows) или Apache и требует установленных компонентов веб-доступа платформы 1С.
Порядок действий в конфигураторе: откройте меню «Администрирование — Публикация на веб-сервере», укажите имя публикации (латиницей, оно войдёт в URL), каталог на веб-сервере и отметьте флажки «Публиковать Web-сервисы» и/или «Публиковать HTTP-сервисы». После нажатия «Опубликовать» платформа создаст в каталоге файл default.vrd с описанием сервисов.
- 1Убедитесь, что веб-сервер (IIS или Apache) установлен и работает
- 2Установите компоненты веб-доступа платформы 1С той же версии, что и сервер 1С
- 3В конфигураторе откройте «Администрирование — Публикация на веб-сервере»
- 4Задайте имя публикации, каталог и отметьте нужные типы сервисов
- 5Нажмите «Опубликовать» и проверьте, что файл default.vrd создан
- 6Откройте в браузере URL сервиса и убедитесь в ответе
Для SOAP-сервиса проверочный адрес выглядит так: http://сервер/ИмяПубликации/ws/ИмяСервиса?wsdl. Если в ответ браузер показывает XML-описание WSDL — сервис опубликован и доступен. Для HTTP-сервиса адрес формируется по шаблону: http://сервер/ИмяПубликации/hs/ШаблонURL.
Как вызвать веб-сервис 1С из внешней системы
Внешняя система обращается к опубликованному сервису как к обычному сетевому ресурсу. Для SOAP-сервиса клиент формирует XML-конверт по WSDL-описанию и отправляет его POST-запросом на адрес сервиса. Большинство языков (C#, Java, PHP, Python) умеют генерировать клиентский код по WSDL автоматически.
Для HTTP-сервиса достаточно обычного HTTP-запроса. Например, проверить сервис можно прямо из командной строки:
curl -u Пользователь:Пароль -X POST "http://server/base/hs/exchange/orders" -H "Content-Type: application/json" -d "{\"number\": \"0001\"}"Аутентификация по умолчанию — Basic: логин и пароль пользователя информационной базы передаются в заголовке Authorization. Пользователь должен существовать в базе и иметь права на объекты, которые задействует код сервиса. Рекомендуется завести отдельного служебного пользователя с минимально необходимыми правами.
Как вызвать внешний веб-сервис из 1С
Обратная задача — когда 1С сама выступает клиентом. Для SOAP-сервисов удобнее всего использовать WS-ссылки: в конфигураторе добавьте объект в ветке «Общие — WS-ссылки», укажите URL WSDL-описания, и платформа создаст типизированное описание операций.
Вызов в коде выглядит так:
Определение = Новый WSОпределения("http://server/service?wsdl", "Логин", "Пароль");
Прокси = Новый WSПрокси(Определение,
"http://namespace", "ИмяСервиса", "ИмяТочкиПодключения");
Результат = Прокси.ИмяОперации(Параметр1, Параметр2);
Для произвольных HTTP-API (REST) используются объекты HTTPСоединение и HTTPЗапрос — они дают полный контроль над методом, заголовками и телом запроса:
Соединение = Новый HTTPСоединение("api.example.com", 443,,,,,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Authorization", "Bearer токен");
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Данные = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
WS-ссылка или ручное создание прокси
WS-ссылка удобна, когда WSDL стабилен: описание хранится в конфигурации, код проще. Динамическое создание WSОпределения в коде гибче — адрес можно хранить в настройках и менять без обновления конфигурации, но каждое создание определения занимает время, поэтому в часто выполняемых операциях прокси стоит кэшировать.
Как проверить, что вызов прошёл успешно
Признак успешного вызова SOAP-сервиса — корректный XML-ответ без блока fault. Для HTTP-сервиса ориентир — код состояния 200 (или иной, предусмотренный вашей логикой) и ожидаемое тело ответа. Коды 401 и 403 указывают на проблемы аутентификации и прав, 404 — на неверный URL или отсутствие публикации, 500 — на ошибку в коде сервиса.
Если сервис вернул ошибку 500, смотрите журнал регистрации информационной базы: туда попадают исключения, возникшие при выполнении кода сервиса. Дополнительно полезно временно добавить в код сервиса запись в журнал регистрации с входными параметрами — это ускоряет поиск причины.
Как проверить результат
Возвращается XML-описание сервиса
Ошибка 404 или пустая страница — публикации нет
200 и ожидаемое тело ответа
401/403 — проблема с доступом, 500 — ошибка в коде
Нет ошибок по сеансу веб-сервиса
Исключения в момент вызова — искать причину в коде
Типичные ошибки и как их избежать
Самая частая причина неработающего вызова — несовпадение версий платформы и компонентов веб-доступа после обновления. Вторая по частоте — неправильный URL: путают имя публикации, регистр букв в имени сервиса или забывают сегмент /ws/ либо /hs/.
Ещё одна группа ошибок связана с правами: сервис вызывается, но падает при обращении к данным, потому что у служебного пользователя нет прав на нужные объекты. Проверяйте права заранее, выполнив аналогичные операции под этим пользователем в толстом клиенте.
Ограничения и безопасная работа
Код веб-сервиса выполняется на сервере 1С в контексте указанного пользователя и подчиняется общим ограничениям сеанса. Долгие операции могут прерываться таймаутом веб-сервера, поэтому тяжёлую обработку лучше выносить в фоновые задания, а сервису возвращать идентификатор задачи для последующего опроса статуса.
Передаваемые объёмы тоже стоит ограничивать: большие двоичные данные лучше передавать частями или через отдельный обмен файлами. Для защиты от перегрузки базы полезно ограничивать частоту запросов на стороне веб-сервера и логировать обращения.
Что важно запомнить
Вызов веб-сервиса 1С требует публикации на веб-сервере, корректного URL и пользователя с нужными правами. SOAP проверяется запросом WSDL, HTTP-сервисы — кодом ответа. Из 1С внешние сервисы вызывают через WS-прокси или HTTPСоединение. Всегда используйте HTTPS и отдельную служебную учётную запись.
Частые вопросы
Можно ли вызвать веб-сервис 1С без публикации на веб-сервере?
Нет. Информационная база сама не принимает HTTP-запросы — нужен веб-сервер (IIS или Apache) с компонентами веб-доступа платформы и выполненной публикацией. Альтернатива без веб-сервера — файловый обмен или подключение через COM, но это уже не веб-сервис.
Что выбрать: SOAP или HTTP-сервис?
Если внешняя система требует WSDL и работает по SOAP — используйте web-сервисы. Для новых интеграций, сайтов и мобильных приложений обычно удобнее HTTP-сервисы с JSON: они легче, проще отлаживаются и не требуют генерации клиентского кода.
Почему при вызове возвращается ошибка 401?
Ошибка 401 означает, что аутентификация не пройдена: неверный логин или пароль, пользователь не существует в базе либо веб-сервер настроен на другой тип аутентификации. Проверьте учётные данные, попробовав войти под ними в базу обычным способом, и убедитесь, что пароль передаётся в правильной кодировке.
Как передать в сервис файл или большой объём данных?
Небольшие файлы передают в base64 внутри JSON или SOAP-сообщения. Для больших объёмов такой подход перегружает память сервера: надёжнее разбить данные на части или организовать отдельную передачу файлов, а через сервис передавать только ссылку или идентификатор.
Нужно ли перепубликовывать сервис после обновления конфигурации?
После обновления конфигурации перепубликация обычно не требуется — default.vrd ссылается на базу, а не на конкретную версию метаданных. А вот после обновления платформы 1С публикацию нужно выполнить заново, чтобы компоненты веб-доступа соответствовали новой версии.
Как отладить код веб-сервиса?
Включите в конфигураторе отладку по протоколу HTTP (или TCP для локального сервера) и разрешите отладку веб-сервисов в свойствах публикации. После этого точки останова в коде сервиса будут срабатывать при внешних вызовах, как в обычном сеансе.