Как настроить обмен данными между сайтом и 1С через веб-сервисы и решить типичные ошибки публикации?

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

Интеграция 1С с внешними веб-сайтами — это стандартная, но технически насыщенная задача. Часто разработчики сталкиваются с трудностями на стыке технологий: настройка веб-сервера IIS, публикация базы, авторизация и корректная передача сложных структур данных. В этой статье мы подробно разберем, как построить жизнеспособную архитектуру обмена, устранить ошибки конфигурации и научить 1С отдавать не просто строки, а полноценные таблицы и массивы.

Архитектура обмена: почему Web-сервисы — это правильный выбор

Когда перед нами стоит задача обрабатывать большое количество транзакций (например, регистрация пользователей или получение аналитической отчетности в реальном времени), классический обмен через файлы (XML/JSON на диске) становится «узким местом». Дисковая подсистема сервера может не выдержать нагрузки, а задержки при записи и чтении файлов сделают работу сайта медленной.

Использование Web-сервисов (SOAP) или HTTP-сервисов (REST) позволяет организовать прямое взаимодействие «память-в-память». Сайт отправляет запрос напрямую к веб-серверу (IIS или Apache), который передает его в сеанс 1С. Мы получаем ответ мгновенно, без использования промежуточных файлов. Рассмотрим, как это настроить на стороне 1С и IIS.

Шаг 1: Правильная публикация на IIS и решение ошибки 404

Первая проблема, с которой сталкиваются разработчики — ошибка HTTP 404.0 - Not Found при попытке открыть описание сервиса (WSDL). Рассмотрим алгоритм публикации, который поможет избежать этой ошибки:

  1. Создаем папку для публикации (например, C:\inetpub\wwwroot\Kolibri).
  2. В Конфигураторе 1С переходим в меню Администрирование — Публикация на веб-сервере.
  3. Указываем имя публикации и выбираем тип веб-сервера (IIS).
  4. На вкладке Web-сервисы обязательно отмечаем галочкой нужный сервис.

Если после сообщения «Публикация выполнена» вы получаете 404 ошибку, проанализируем настройки IIS. Важно убедиться, что в IIS настроено сопоставление обработчиков. Для работы 1С необходимо, чтобы расширение .1cws (для веб-сервисов) и .1csr (для ресурсов) обрабатывались модулем wsap.dll. Также убедитесь, что разрядность пула приложений в IIS соответствует разрядности установленной платформы 1С. Если вы используете 64-битную ОС и 32-битную 1С, в настройках пула приложений необходимо установить параметр Разрешить 32-разрядные приложения в значение True.

Обратите внимание, что в современных версиях 1С файл 1cws не создается физически в папке. Система генерирует его «на лету» на основании описания в файле default.vrd. Типичная строка для проверки работоспособности сервиса выглядит так:

http://localhost:8888/Kolibri/ws/test.1cws?wsdl

Шаг 2: Реализация логики в 1С — Процедура или Функция?

Разберем важный нюанс: веб-сервис 1С корректно работает только с Функциями. Попытка вызвать Процедуру часто приводит к ошибкам или отсутствию отклика. Даже если вам не нужно ничего возвращать, создайте функцию, которая возвращает, например, логическое Истина.

Проанализируем пример простейшей функции веб-сервиса, которая записывает событие в журнал регистрации и возвращает строку:


Функция ReturnTestString(ВходнойПараметр)
    ЗаписьЖурналаРегистрации("Web-сервис", УровеньЖурналаРегистрации.Информационный, , , "Вызов функции с параметром: " + ВходнойПараметр);
    Возврат "Сервер 1С получил данные: " + ВходнойПараметр;
КонецФункции

Важно: Не забудьте проверить права доступа. У пользователя, под которым выполняется подключение к базе через веб-сервис, должны быть установлены роли, дающие право на использование конкретного веб-сервиса и выполнение соответствующих функций.

Шаг 3: Исправление ошибки 500 и чувствительность к регистру

Ошибка 500 - Internal Server Error часто возникает при несовпадении структуры запроса и метаданных 1С. Рассмотрим основные причины:

Пример вызова на языке Ruby (библиотека Savon), который учитывает авторизацию и параметры:


client = Savon.client(
    wsdl: 'http://1.1.1.1/Kolibri/ws/test.1cws?wsdl',
    basic_auth: ["admin", "password"]
)
response = client.call(:return_test_string, message: { "ВходнойПараметр" => "Тестовые данные" })

Шаг 4: Передача сложных данных через XDTO

Рано или поздно вам потребуется передать не просто строку, а массив объектов или таблицу значений. Для этого в 1С используются XDTO-пакеты. Проанализируем, как вернуть структуру или таблицу.

Для возврата структуры мы можем использовать встроенный механизм сериализации. Однако для этого тип возвращаемого значения в настройках функции веб-сервиса должен быть определен в XDTO-пакете.

Чтобы вернуть таблицу значений или массив, выполним следующие шаги:

  1. Создадим новый XDTO-пакет.
  2. Добавим в него Тип объекта (например, СтрокаТаблицы), где свойствами будут колонки вашей таблицы.
  3. Добавим второй Тип объекта (например, СписокСтрок), в котором будет одно свойство с типом СтрокаТаблицы.
  4. У этого свойства установим параметры: Максимальное количество = -1 (unbounded), Минимальное количество = 0.

Теперь в коде 1С мы можем заполнить эту структуру. Рассмотрим пример формирования ответа:


Функция ПолучитьСписокНоменклатуры()
    ТипСписка = ФабрикаXDTO.Тип("http://www.my-site.ru/integration", "СписокСтрок");
    ТипСтроки = ФабрикаXDTO.Тип("http://www.my-site.ru/integration", "СтрокаТаблицы");
    
    Результат = ФабрикаXDTO.Создать(ТипСписка);
    
    Выборка = Справочники.Номенклатура.Выбрать();
    Пока Выборка.Следующий() Цикл
        НоваяСтрока = ФабрикаXDTO.Создать(ТипСтроки);
        НоваяСтрока.Наименование = Выборка.Наименование;
        НоваяСтрока.Код = Выборка.Код;
        Результат.Элементы.Добавить(НоваяСтрока);
    КонецЦикла;
    
    Возврат Результат;
КонецФункции

В свойствах функции веб-сервиса в поле Тип возвращаемого значения нужно указать созданный вами тип СписокСтрок из XDTO-пакета.

Оптимизация и безопасность

При интенсивном обмене стоит помнить о пуле соединений. Каждый запрос к веб-сервису инициирует сеанс. Чтобы 1С не тратила время на создание нового сеанса при каждом клике пользователя на сайте, настройте параметры пула в файле default.vrd. Параметры poolSize и poolTimeout позволят переиспользовать существующие сеансы, что значительно ускорит отклик.

Также настоятельно рекомендуем использовать HTTPS. При использовании Basic Auth логин и пароль передаются в кодировке Base64, которую легко расшифровать. Настройка SSL-сертификата на стороне IIS обеспечит безопасность передаваемых учетных данных и коммерческой информации.

Таким образом, мы проанализировали полный цикл настройки интеграции: от исправления ошибок публикации на веб-сервере до создания сложных функций обмена с использованием XDTO. Следуя этим шагам, вы сможете создать надежный и быстрый мост между вашей системой 1С и внешним веб-приложением.

← На главную