Разработка и Конфигурация · 10 мин
Как подключиться к веб-сервису из 1С
Как подключиться к веб-сервису из 1С через WS-ссылку и HTTPСоединение: настройка, код, проверка результата, типичные ошибки и ответы на вопросы.
Подключение 1С к веб-сервису нужно, когда конфигурация должна обмениваться данными с внешними системами: банками, службами доставки, CRM, сайтами или другими базами 1С. Есть два основных пути: через WS-ссылку, если сервис работает по протоколу SOAP и публикует WSDL-описание, и через объект HTTPСоединение, если сервис предоставляет REST API или принимает произвольные HTTP-запросы.
Выбор способа определяется форматом внешнего сервиса. Если у поставщика есть ссылка вида https://example.com/service?wsdl, удобнее WS-ссылка: платформа сама построит прокси-объект с типизированными методами. Если документация описывает endpoint'ы, JSON и заголовки авторизации — работайте через HTTPСоединение, это даёт полный контроль над запросом.
Оба способа доступны и в тонком, и в веб-клиенте, но код выполняется на сервере 1С (в серверной процедуре), поэтому важно учитывать права, таймауты и доступность внешнего адреса именно с сервера, а не с рабочего места пользователя.
Как определить, какой способ подключения нужен
Первый шаг — изучить документацию внешнего сервиса. Ключевой признак SOAP-сервиса — наличие WSDL-файла: откройте адрес в браузере, если возвращается XML с корневым элементом definitions, это SOAP. REST-сервисы обычно описываются списком URL, методов (GET, POST) и примерами JSON.
Также проверьте требования к авторизации: SOAP-сервисы чаще используют логин и пароль в параметрах прокси, REST — токены в заголовке Authorization или API-ключ в параметре запроса. Это влияет на то, как вы будете передавать учётные данные в коде.
Как выбрать способ подключения
Подключение к SOAP-сервису через WS-ссылку
WS-ссылка — объект конфигурации, который хранит адрес WSDL и позволяет платформе автоматически построить описание методов и типов данных сервиса. В конфигураторе откройте ветку «Общие → WS-ссылки», добавьте новый элемент и укажите URL WSDL-описания. Платформа загрузит описание и покажет доступные операции.
Далее в коде создаётся прокси-объект, через который вызываются методы сервиса как обычные функции:
Определение = Новый WSОпределения("https://example.com/service?wsdl", "user", "password");
Прокси = Новый WSПрокси(Определение, "http://example.com/", "MyService", "MyServiceSoap");
Прокси.Пользователь = "user";
Прокси.Пароль = "password";
Результат = Прокси.GetData("параметр1");
Если в конфигурации создана WS-ссылка, определение можно получить через менеджер: WSСсылки.ИмяСсылки.СоздатьWSПрокси(...) — тогда адрес хранится централизованно и не зашит в коде. Это удобно при переносе между тестовой и рабочей базами.
Подключение к REST API через HTTPСоединение
Для REST-сервисов используется связка объектов: HTTPСоединение задаёт сервер, порт, учётные данные и таймаут; HTTPЗапрос описывает адрес ресурса, заголовки и тело. Пример POST-запроса с JSON:
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/v1/orders");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);
Запрос.УстановитьТелоИзСтроки(ТекстJSON, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Результат = Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
Для чтения JSON из ответа применяйте ЧтениеJSON с методом ПрочитатьJSON — так вы получите структуру или соответствие для дальнейшей обработки. Формировать JSON для отправки удобно через ЗаписьJSON, это исключает ошибки экранирования при ручной сборке строки.
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();Авторизация и защита соединения
Большинство рабочих сервисов требуют аутентификации. Для Basic-авторизации логин и пароль передаются третьим и четвёртым параметрами конструктора HTTPСоединение. Для токенной авторизации токен добавляется в заголовок Authorization каждого запроса; если токен имеет срок жизни, предусмотрите процедуру его обновления и храните его в безопасном месте, а не в коде модуля.
По HTTPS обязательно передавайте объект ЗащищенноеСоединениеOpenSSL в конструктор соединения — иначе платформа попытается установить незащищённое соединение на порт 443 и получит ошибку. Если сервер использует самоподписанный сертификат, потребуется указать сертификаты удостоверяющего центра в параметрах защищённого соединения.
Учётные данные храните в защищённом хранилище (например, через общий модуль с установкой привилегированного режима или в константах с ограниченным доступом). Жёсткое прописывание паролей в коде — распространённая причина утечек при выгрузке конфигурации.
Обработка ошибок и таймаутов
Сетевые вызовы ненадёжны по своей природе: сервис может быть недоступен, отвечать медленно или возвращать ошибки. Каждый вызов оборачивайте в конструкцию Попытка/Исключение и фиксируйте описание ошибки в журнале регистрации через ЗаписьЖурналаРегистрации — иначе при сбоях в фоновом задании вы не узнаете причину.
Проверяйте код состояния HTTP-ответа перед разбором тела. Коды 4xx обычно означают ошибку в запросе (неверный токен, формат), 5xx — проблему на стороне сервиса, и повторять запрос в первом случае бессмысленно, а во втором имеет смысл отложенная повторная попытка.
Таймаут в конструкторе HTTPСоединение задавайте явно: значение по умолчанию может быть слишком большим для интерактивной работы пользователя. Для синхронных вызовов из формы разумны 20–30 секунд, для фоновых заданий — больше, в зависимости от объёма данных.
Проверка результата подключения
После настройки проверьте подключение поэтапно. Сначала убедитесь, что адрес сервиса доступен с сервера 1С (не только с вашего рабочего компьютера): в файловой базе это одна машина, в клиент-серверном варианте — отдельный сервер, где могут быть свои правила брандмауэра и прокси.
Затем выполните тестовый вызов с минимальными данными и проверьте, что ответ соответствует документации: код состояния, структура JSON или тип возвращаемого значения SOAP-метода. Полезно временно выводить полный текст ответа в сообщение или журнал, чтобы увидеть фактический формат — он нередко отличается от примеров в документации.
Как проверить результат
200 или 201, тело содержит ожидаемые данные
401/403 (проблема авторизации), 404 (неверный адрес), 500 (ошибка сервиса)
WSDL или API открывается с сервера, запросы проходят без сетевых ошибок
Таймаут или «соединение отклонено» — проверяйте брандмауэр и прокси
JSON читается через ПрочитатьJSON без исключений, поля на месте
Ошибка парсинга — сервис вернул HTML-страницу ошибки или другой формат
Пользователь получает понятное сообщение, ошибка пишется в журнал
Необработанное исключение и аварийное завершение операции
Частые вопросы
Можно ли подключиться к веб-сервису без изменения конфигурации?
Да, если использовать HTTPСоединение — весь код можно разместить во внешней обработке. WS-ссылка как объект метаданных требует изменения конфигурации, но WSОпределения и WSПрокси можно создать программно по URL, без WS-ссылки, что тоже позволяет обойтись внешней обработкой.
Почему возникает ошибка «Ошибка работы с Интернет: couldn't connect to server»?
Чаще всего адрес недоступен с той машины, где выполняется код: закрыт порт в брандмауэре, требуется прокси или неверно указан хост. Проверьте доступность адреса с сервера 1С, параметры прокси в конструкторе HTTPСоединение и корректность порта.
Как передать файл через веб-сервис?
Для REST API файл отправляется методом УстановитьТелоИзДвоичныхДанных у HTTPЗапроса или как multipart/form-data. В SOAP файлы обычно передаются в base64 внутри XML-сообщения — платформа делает это автоматически для типов Base64Binary, если WSDL описывает такой тип.
Чем отличается WSОпределения от WS-ссылки в конфигураторе?
WS-ссылка — объект метаданных, хранящий адрес WSDL централизованно; WSОпределения — программный объект, создаваемый по URL в коде. Функционально результат одинаков, но WS-ссылку проще менять при переезде сервиса, а программное создание удобно для внешних обработок.
Как вызвать веб-сервис по расписанию?
Создайте регламентное задание, в обработчике которого выполняется вызов сервиса с обработкой ошибок и записью результата. Учтите, что в файловой базе регламентные задания требуют запущенного сеанса с выполнением фоновых задач, либо используйте внешний планировщик.
Что делать, если сервис возвращает данные в кодировке, отличной от UTF-8?
Передайте нужную кодировку параметром в метод ПолучитьТелоКакСтроку, например КодировкаТекста.ANSI или КодировкаТекста.KOI8R. Если кодировка неизвестна, получите тело как двоичные данные и определите её по заголовку Content-Type ответа.
Что важно запомнить
SOAP-сервис подключайте через WS-ссылку и WSПрокси, REST API — через HTTPСоединение с явными заголовками, таймаутом и защищённым соединением. Код выполняйте на сервере, оборачивайте в Попытка/Исключение, проверяйте код состояния ответа и не храните пароли в коде.