Интеграция 1С с внешними сайтами по протоколу SOAP — это классическая задача, которая требует от разработчика понимания нескольких уровней системы: метаданных 1С, механизмов XDTO и настройки веб-серверов (Apache или IIS). Рассмотрим подробнее процесс создания веб-сервиса, который будет принимать код материала и возвращать его характеристики.
Прежде чем создавать сам веб-сервис, нам необходимо подготовить структуру данных, которую мы будем передавать. В 1С для этого используются XDTO-пакеты. Разберем по шагам, как это сделать правильно:
http://www.company-name.ru/exchange.MaterialCharacteristics). Внутри него определим свойства: Name (тип string из пространства http://www.w3.org/2001/XMLSchema), Article, Price и другие нужные параметры.Важно понимать, что XDTO-пакет — это своего рода «словарь», который объясняет внешнему сайту, как интерпретировать полученные от 1С данные. Если мы планируем возвращать только строку, можно обойтись стандартными типами, но для передачи полноценного объекта использование собственного пакета обязательно.
Перейдем к созданию самого объекта Web-сервис в метаданных 1С:
SiteIntegration.GetInfoByCode.string.MaterialCode), через который сайт будет передавать нам код товара.Теперь проанализируем программную часть. В модуле веб-сервиса нам нужно написать процедуру, которая будет отрабатывать при вызове. Пример кода:
Функция GetInfoByCode(MaterialCode)
// Ищем номенклатуру по переданному коду
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду(MaterialCode);
Если НайденнаяСсылка.Пустая() Тогда
Возврат "Товар не найден";
Иначе
// Если возвращаем простую строку
Возврат НайденнаяСсылка.Наименование;
КонецЕсли;
КонецФункции
Рассмотрим ситуацию, с которой часто сталкиваются разработчики: в обычном отчете поиск работает, а в веб-сервисе — нет. Проанализируем причины:
Во-первых, это права доступа. Пользователь, под которым авторизуется веб-сервис, должен иметь права на чтение справочника Номенклатура. Если включен механизм RLS (права на уровне записей), убедитесь, что конкретные элементы доступны этому пользователю.
Во-вторых, типы данных. Сайт может передавать код как число, а в 1С код справочника — это строка с ведущими нулями (например, "000000123"). В таком случае поиск НайтиПоКоду(123) не даст результата. Нужно программно дополнить код нулями:
// Пример дополнения кода нулями до 9 знаков
ДлинаКода = Метаданные.Справочники.Номенклатура.ДлинаКода;
ТекКод = СокрЛП(MaterialCode);
Пока СтрДлина(ТекКод) < ДлинаКода Цикл
ТекКод = "0" + ТекКод;
КонецЦикла;
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду(ТекКод);
Чтобы сайт «увидел» наш сервис, его нужно опубликовать. Рассмотрим процесс для Apache:
base_ws) и каталог.Выясним причину частой ошибки с авторизацией. Если при обращении к сервису постоянно запрашивается пароль или возникает ошибка 401, проверьте файл default.vrd в каталоге публикации. В нем можно принудительно указать пользователя 1С, от имени которого будут выполняться запросы:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
base="/base_ws"
ib="Srvr=ServerName;Ref=BaseName;usr=WebUser;pwd=SecretPassword;">
<ws>
<point name="SiteIntegration" alias="site.1cws"/>
</ws>
</point>
Как проверить работу без привлечения веб-разработчиков? Используем специализированные инструменты, такие как SoapUI или Postman.
http://server_address/base_ws/ws/SiteIntegration?wsdl..1cws в папке публикации.Для отладки кода внутри 1С необходимо запустить веб-сервер с флагом отладки. Для Apache это делается в файле конфигурации httpd.conf, а для IIS — через параметры реестра. После этого в конфигураторе через меню Отладка — Подключение вы сможете «зацепиться» за сеанс веб-сервиса и ставить точки останова.
В завершение отметим, что если сервис внезапно перестал работать или не принимает изменения в метаданных, самым эффективным методом часто оказывается «перепубликация» или даже создание сервиса с новым именем. Это помогает очистить кэш веб-сервера и обновить WSDL-структуру для внешних потребителей.