Интеграция 1С с внешними веб-сайтами — это стандартная, но технически насыщенная задача. Часто разработчики сталкиваются с трудностями на стыке технологий: настройка веб-сервера IIS, публикация базы, авторизация и корректная передача сложных структур данных. В этой статье мы подробно разберем, как построить жизнеспособную архитектуру обмена, устранить ошибки конфигурации и научить 1С отдавать не просто строки, а полноценные таблицы и массивы.
Когда перед нами стоит задача обрабатывать большое количество транзакций (например, регистрация пользователей или получение аналитической отчетности в реальном времени), классический обмен через файлы (XML/JSON на диске) становится «узким местом». Дисковая подсистема сервера может не выдержать нагрузки, а задержки при записи и чтении файлов сделают работу сайта медленной.
Использование Web-сервисов (SOAP) или HTTP-сервисов (REST) позволяет организовать прямое взаимодействие «память-в-память». Сайт отправляет запрос напрямую к веб-серверу (IIS или Apache), который передает его в сеанс 1С. Мы получаем ответ мгновенно, без использования промежуточных файлов. Рассмотрим, как это настроить на стороне 1С и IIS.
Первая проблема, с которой сталкиваются разработчики — ошибка HTTP 404.0 - Not Found при попытке открыть описание сервиса (WSDL). Рассмотрим алгоритм публикации, который поможет избежать этой ошибки:
C:\inetpub\wwwroot\Kolibri).Если после сообщения «Публикация выполнена» вы получаете 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
Разберем важный нюанс: веб-сервис 1С корректно работает только с Функциями. Попытка вызвать Процедуру часто приводит к ошибкам или отсутствию отклика. Даже если вам не нужно ничего возвращать, создайте функцию, которая возвращает, например, логическое Истина.
Проанализируем пример простейшей функции веб-сервиса, которая записывает событие в журнал регистрации и возвращает строку:
Функция ReturnTestString(ВходнойПараметр)
ЗаписьЖурналаРегистрации("Web-сервис", УровеньЖурналаРегистрации.Информационный, , , "Вызов функции с параметром: " + ВходнойПараметр);
Возврат "Сервер 1С получил данные: " + ВходнойПараметр;
КонецФункции
Важно: Не забудьте проверить права доступа. У пользователя, под которым выполняется подключение к базе через веб-сервис, должны быть установлены роли, дающие право на использование конкретного веб-сервиса и выполнение соответствующих функций.
Ошибка 500 - Internal Server Error часто возникает при несовпадении структуры запроса и метаданных 1С. Рассмотрим основные причины:
ID_Заказа, а с сайта приходит id_заказа, вы получите ошибку 500. Проверьте соответствие каждой буквы.Пример вызова на языке 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: { "ВходнойПараметр" => "Тестовые данные" })
Рано или поздно вам потребуется передать не просто строку, а массив объектов или таблицу значений. Для этого в 1С используются XDTO-пакеты. Проанализируем, как вернуть структуру или таблицу.
Для возврата структуры мы можем использовать встроенный механизм сериализации. Однако для этого тип возвращаемого значения в настройках функции веб-сервиса должен быть определен в XDTO-пакете.
Чтобы вернуть таблицу значений или массив, выполним следующие шаги:
СтрокаТаблицы), где свойствами будут колонки вашей таблицы.СписокСтрок), в котором будет одно свойство с типом СтрокаТаблицы.Теперь в коде 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С и внешним веб-приложением.