В современной разработке на платформе 1С:Предприятие 8 часто возникает необходимость интеграции с внешними информационными системами. Одним из наиболее надежных способов обмена данными является использование веб-сервисов (SOAP). Если у вас есть адрес WSDL, вы уже имеете «карту» взаимодействия с сервисом. Давайте подробно разберем, как превратить эти данные в работающий программный код.
Прежде чем писать код, проанализируем входные данные. Ссылка формата http://ws.kakoito-service//abrakadabra.asmx?wsdl ведет к XML-файлу, который описывает возможности сервиса: какие методы можно вызывать, какие параметры передавать и что сервис вернет в ответ. 1С умеет «читать» этот файл и автоматически создавать объекты для работы с ним.
Существует два принципиально разных подхода к реализации подключения: статический и динамический. Рассмотрим каждый из них подробнее, чтобы вы могли выбрать наиболее подходящий для вашей задачи.
Этот метод мы рекомендуем использовать, когда структура веб-сервиса стабильна и не меняется часто. Основное преимущество здесь — простота разработки и поддержка контекстных подсказок в конфигураторе.
WSDL-описанию в появившееся поле.Разберем пример кода для обращения к такому сервису. Предположим, мы назвали ссылку НашВнешнийСервис:
// Создаем прокси-объект для вызова методов
Прокси = WSСсылки.НашВнешнийСервис.СоздатьWSПрокси("ИмяПространстваИмен", "ИмяСервиса", "ИмяПорта");
// Теперь можно вызывать метод сервиса напрямую
Результат = Прокси.ПолучитьДанныеПоНомеру(123);
Важно: имена пространства имен, сервиса и порта можно подсмотреть в свойствах созданной WS-ссылки в конфигураторе. Плюс этого метода в том, что 1С сразу «понимает» сложные типы данных (XDTO), которые возвращает сервис.
Выясним ситуацию, когда адрес сервиса может меняться (например, для тестовой и рабочей базы) или когда мы не хотим вносить изменения в структуру метаданных. В этом случае мы используем объект WSОпределения.
Рассмотрим пошагово процесс программного создания подключения:
// Шаг 1: Получаем описание сервиса "на лету"
URL_WSDL = "http://ws.kakoito-service//abrakadabra.asmx?wsdl";
Определения = Новый WSОпределения(URL_WSDL, "Логин", "Пароль", 60); // 60 секунд таймаут
// Шаг 2: Создаем прокси
// Эти параметры (URI, ИмяСервиса) можно найти в конце WSDL-файла в теге <wsdl:service>
URI_Пространства = "http://tempuri.org/";
ИмяСервиса = "AbrakadabraService";
ИмяПорта = "AbrakadabraServiceSoap";
Прокси = Новый WSПрокси(Определения, URI_Пространства, ИмяСервиса, ИмяПорта);
// Шаг 3: Вызываем метод
Ответ = Прокси.ExecuteMethod(Параметр1);
Этот способ более гибкий, так как позволяет хранить настройки подключения в константах или справочниках без переписывания конфигурации.
Проанализируем нюанс, упомянутый в вашем вопросе: наличие доступа через HTTPS. При работе с защищенным соединением 1С должна доверять сертификату сервера. Если сертификат выдан доверенным центром, достаточно настроить объект защищенного соединения.
Посмотрим на пример настройки безопасного канала:
// Создаем настройки для OpenSSL, используя сертификаты ОС Windows
Защита = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Новый СертификатыУдостоверяющихЦентровWindows());
// Передаем защиту в конструктор определений
Определения = Новый WSОпределения(URL_WSDL, , , , Защита);
Прокси = Новый WSПрокси(Определения, URI_Пространства, ИмяСервиса, ИмяПорта, , , Защита);
Если сервер использует самоподписанный сертификат, его необходимо предварительно установить в хранилище сертификатов на сервере 1С (под пользователем, от имени которого работает служба usr1cv8).
Веб-сервисы часто обмениваются не простыми строками, а сложными структурами XML. В 1С они преобразуются в объекты XDTO. Разберем ситуацию: вам нужно отправить в сервис объект «Контрагент» со списком адресов.
Для создания таких объектов мы используем фабрику XDTO:
// Получаем тип объекта из определений сервиса
ТипКонтрагента = Прокси.ФабрикаXDTO.Тип("http://tempuri.org/", "Counterparty");
// Создаем экземпляр объекта
НовыйКонтрагент = Прокси.ФабрикаXDTO.Создать(ТипКонтрагента);
НовыйКонтрагент.Name = "ООО Ромашка";
НовыйКонтрагент.INN = "7701234567";
// Теперь передаем созданный объект в метод сервиса
Результат = Прокси.SaveCounterparty(НовыйКонтрагент);
Прежде чем приступать к кодингу в 1С, крайне полезно проверить работоспособность сервиса внешними средствами. Рассмотрим стандарт индустрии — SoapUI. Вы создаете новый проект, указываете ссылку на WSDL, и программа автоматически генерирует запросы со всеми возможными полями. Если запрос успешно проходит в SoapUI, значит, проблема в коде 1С. Если не проходит и там — ищите ошибку в параметрах или правах доступа на стороне сервиса.
Проанализируем распространенные сложности, с которыми сталкиваются разработчики:
URI в конструкторе WSПрокси, 1С выдаст ошибку «Сервис не найден». Всегда копируйте эти значения напрямую из WSDL.Таймаут в WSОпределения).WSDL. Если на стороне сервиса добавили новый метод, а вы его не видите — попробуйте перезапустить сеанс или очистить временные файлы.WSОпределения. Для более сложных схем (например, OAuth или передача токена в заголовках) потребуется использовать объект HTTPЗапрос для формирования заголовков вручную.Таким образом, подключение к веб-сервису в 1С — это структурированный процесс, требующий внимательного отношения к типам данных и настройкам безопасности. Начните с проверки WSDL в браузере, протестируйте методы в SoapUI, и только после этого приступайте к реализации логики в 1С.