Как настроить интеграцию 1С с интернет-магазином через SOAP веб-сервис

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция 1С с внешними сайтами по протоколу SOAP — это классическая задача, которая требует от разработчика понимания нескольких уровней системы: метаданных 1С, механизмов XDTO и настройки веб-серверов (Apache или IIS). Рассмотрим подробнее процесс создания веб-сервиса, который будет принимать код материала и возвращать его характеристики.

Шаг 1. Проектирование XDTO-пакета

Прежде чем создавать сам веб-сервис, нам необходимо подготовить структуру данных, которую мы будем передавать. В 1С для этого используются XDTO-пакеты. Разберем по шагам, как это сделать правильно:

  1. Создадим в дереве конфигурации новый XDTO-пакет.
  2. Укажем уникальное Пространство имен (Namespace). Не стоит использовать стандартные пакеты 1С. Лучше задать что-то вроде http://www.company-name.ru/exchange.
  3. Добавим в пакет Тип объекта (например, MaterialCharacteristics). Внутри него определим свойства: Name (тип string из пространства http://www.w3.org/2001/XMLSchema), Article, Price и другие нужные параметры.

Важно понимать, что XDTO-пакет — это своего рода «словарь», который объясняет внешнему сайту, как интерпретировать полученные от 1С данные. Если мы планируем возвращать только строку, можно обойтись стандартными типами, но для передачи полноценного объекта использование собственного пакета обязательно.

Шаг 2. Создание и настройка Web-сервиса

Перейдем к созданию самого объекта Web-сервис в метаданных 1С:

  1. В поле Имя укажем, например, SiteIntegration.
  2. В поле Имя пакета XDTO выберем созданный нами ранее пакет.
  3. Перейдем на закладку Операции и добавим новую операцию GetInfoByCode.
  4. Установим Тип возвращаемого значения. Если возвращаем характеристики — выбираем наш тип из XDTO-пакета, если просто название — string.
  5. Добавим Параметр операции (например, MaterialCode), через который сайт будет передавать нам код товара.

Теперь проанализируем программную часть. В модуле веб-сервиса нам нужно написать процедуру, которая будет отрабатывать при вызове. Пример кода:


Функция GetInfoByCode(MaterialCode)
    
    // Ищем номенклатуру по переданному коду
    НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду(MaterialCode);
    
    Если НайденнаяСсылка.Пустая() Тогда
        Возврат "Товар не найден";
    Иначе
        // Если возвращаем простую строку
        Возврат НайденнаяСсылка.Наименование;
    КонецЕсли;
    
КонецФункции

Шаг 3. Особенности поиска данных в контексте веб-сервиса

Рассмотрим ситуацию, с которой часто сталкиваются разработчики: в обычном отчете поиск работает, а в веб-сервисе — нет. Проанализируем причины:

Во-первых, это права доступа. Пользователь, под которым авторизуется веб-сервис, должен иметь права на чтение справочника Номенклатура. Если включен механизм RLS (права на уровне записей), убедитесь, что конкретные элементы доступны этому пользователю.

Во-вторых, типы данных. Сайт может передавать код как число, а в 1С код справочника — это строка с ведущими нулями (например, "000000123"). В таком случае поиск НайтиПоКоду(123) не даст результата. Нужно программно дополнить код нулями:


// Пример дополнения кода нулями до 9 знаков
ДлинаКода = Метаданные.Справочники.Номенклатура.ДлинаКода;
ТекКод = СокрЛП(MaterialCode);
Пока СтрДлина(ТекКод) < ДлинаКода Цикл
    ТекКод = "0" + ТекКод;
КонецЦикла;
НайденнаяСсылка = Справочники.Номенклатура.НайтиПоКоду(ТекКод);

Шаг 4. Публикация на веб-сервере

Чтобы сайт «увидел» наш сервис, его нужно опубликовать. Рассмотрим процесс для Apache:

  1. Запустите Конфигуратор от имени Администратора.
  2. Зайдите в меню Администрирование — Публикация на веб-сервере.
  3. Выберите установленный веб-сервер, укажите имя публикации (например, base_ws) и каталог.
  4. На закладке Web-сервисы обязательно проверьте, что галочка напротив вашего сервиса установлена.
  5. Нажмите «Опубликовать».

Выясним причину частой ошибки с авторизацией. Если при обращении к сервису постоянно запрашивается пароль или возникает ошибка 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>

Шаг 5. Отладка и тестирование

Как проверить работу без привлечения веб-разработчиков? Используем специализированные инструменты, такие как SoapUI или Postman.

  1. Вставьте адрес WSDL-описания вашего сервиса. Обычно он выглядит так: http://server_address/base_ws/ws/SiteIntegration?wsdl.
  2. Программа автоматически сформирует XML-запрос. Вам останется только подставить значение в тег параметра.
  3. Если вы получаете ответ «Сервис не найден» или ошибку 404, проверьте правильность написания имени сервиса в URL и наличие файла .1cws в папке публикации.

Для отладки кода внутри 1С необходимо запустить веб-сервер с флагом отладки. Для Apache это делается в файле конфигурации httpd.conf, а для IIS — через параметры реестра. После этого в конфигураторе через меню Отладка — Подключение вы сможете «зацепиться» за сеанс веб-сервиса и ставить точки останова.

В завершение отметим, что если сервис внезапно перестал работать или не принимает изменения в метаданных, самым эффективным методом часто оказывается «перепубликация» или даже создание сервиса с новым именем. Это помогает очистить кэш веб-сервера и обновить WSDL-структуру для внешних потребителей.

← На главную