Как разработать, опубликовать и вызвать веб-сервис в 1С: подробное руководство

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

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

Создание веб-сервиса в конфигураторе

Начнем с основ. Создание веб-сервиса начинается в дереве метаданных. Нам необходимо добавить новый объект в ветке Общие — Веб-сервисы. Рассмотрим ключевые параметры, которые нам понадобятся:

  1. Имя: Внутреннее имя объекта в 1С (например, wa_LengthString).
  2. Имя файла публикации: Это имя будет частью URL (например, wa_LengthString.1cws). Важно понимать, что физически такого файла на диске не существует, это виртуальный путь.
  3. Пространство имен: Уникальный идентификатор вашего сервиса (URI). Обычно указывается в формате названия вашего домена или проекта.
  4. Операции: Здесь мы определяем методы, которые будет предоставлять сервис. Для каждого метода указываются параметры и тип возвращаемого значения.

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


Функция CalcLengthString(ПереданнаяСтрока)
    Возврат СтрДлина(ПереданнаяСтрока);
КонецФункции

Секреты успешной публикации на веб-сервере

После создания объекта его необходимо опубликовать. В 1С это делается через меню Администрирование — Публикация на веб-сервере. Проанализируем важные настройки в окне публикации:

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

Проанализируем файл default.vrd, который создается в каталоге публикации. Это XML-файл, управляющий тем, как веб-сервер (например, Apache или IIS) взаимодействует с 1С. В нем содержатся секции <ws>, где описаны все доступные сервисы. Если вы вносите изменения в конфигураторе, 1С автоматически обновляет этот файл. Однако опытные разработчики иногда редактируют его вручную для тонкой настройки, например, для добавления параметров отладки или управления временем жизни сеанса.

Важный нюанс: Если вы используете Apache на операционных системах семейства Linux, помните о регистрозависимости. Путь в URL должен в точности соответствовать именам, указанным в 1С.

Как правильно обратиться к веб-сервису из другой базы

Когда сервис опубликован, нам нужно получить к нему доступ. Адрес для обращения строится по следующему шаблону:

http://[ИмяСервера]/[ИмяПубликации]/ws/[ИмяФайлаПубликации]?wsdl

Параметр ?wsdl в конце строки крайне важен — он заставляет сервер вернуть XML-описание структуры сервиса, которое необходимо для создания объекта WSОпределения. Разберем программный код для подключения к сервису из другой базы 1С:


// Шаг 1: Создаем определения веб-сервиса
АдресWSDL = "http://server-ip/my_base/ws/wa_LengthString.1cws?wsdl";
WSDL = Новый WSОпределения(АдресWSDL, "ИмяПользователя", "Пароль");

// Шаг 2: Инициализируем прокси-объект
// Важно правильно указать пространство имен и имя порта
ПространствоИмен = "http://www.mycompany.ru/ws";
ИмяСервиса = "wa_LengthString";
ИмяПорта = "wa_LengthStringSoap";

ВСПрокси = Новый WSПрокси(WSDL, ПространствоИмен, ИмяСервиса, ИмяПорта);
ВСПрокси.Пользователь = "ИмяПользователя";
ВСПрокси.Пароль = "Пароль";

// Шаг 3: Вызываем метод сервиса
Результат = ВСПрокси.CalcLengthString("Тестовая строка");
Сообщить("Длина строки: " + Результат);

Выясним, откуда берутся параметры ИмяСервиса и ИмяПорта. Самый надежный способ — открыть ссылку с ?wsdl в браузере. В самом конце XML-документа вы найдете теги <service name="..."> и <port name="...">. Именно эти значения нужно подставлять в конструктор WSПрокси.

Оптимизация передачи больших объемов данных

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

  1. Передача по одному объекту: Это крайне неэффективно. На каждый вызов тратятся ресурсы на установку соединения, авторизацию и создание сеанса в 1С.
  2. Передача одним огромным пакетом: Может привести к превышению лимитов памяти или тайм-аутов веб-сервера.

Наилучшим решением будет пакетная передача. Мы разбиваем данные на порции (например, по 50-100 заказов в одном вызове). Также стоит обратить внимание на следующие технические приемы:

Настройка тайм-аутов: У объекта WSПрокси есть свойство Таймаут. По умолчанию оно может быть слишком малым для обработки тяжелых запросов. Увеличьте его, если планируете передавать большие пакеты данных.

Сжатие данных: XML — текстовый формат, который отлично сжимается. Вы можете упаковать данные в ZIP-архив на стороне отправителя, передать его как Base64 строку, и распаковать на стороне получателя. Это значительно сократит сетевой трафик.

Использование MTOM: 1С поддерживает механизм оптимизированной передачи двоичных данных MTOM. Это позволяет передавать файлы или архивы внутри SOAP-сообщения без их кодирования в тяжелый Base64.

Безопасность и авторизация

При работе с веб-сервисами вопросы безопасности выходят на первый план. Рассмотрим основные рекомендации:

Во-первых, всегда используйте HTTPS. При обычном HTTP логин и пароль передаются в открытом виде (заголовок Authorization использует кодировку Base64, которую легко декодировать). Настройка SSL-сертификата на стороне Apache или IIS защитит ваши данные от перехвата.

Во-вторых, создавайте для веб-сервисов отдельного пользователя в базе 1С. У этого пользователя должны быть минимально необходимые права. В роли, назначенной этому пользователю, обязательно должно быть разрешено право Использование веб-сервиса для конкретного объекта метаданных. Также полезно включить флаг Разделение сеансов, чтобы запросы не блокировали друг друга.

Отладка и логирование

Выясним, как искать ошибки в работе сервиса. Если метод веб-сервиса работает некорректно, вы можете воспользоваться стандартным отладчиком 1С. Для этого сервер 1С должен быть запущен с параметром -debug. В конфигураторе перейдите в меню Отладка — Подключение и убедитесь, что в списке доступных предметов есть типы Веб-сервисы.

Однако отладка на "живом" сервере не всегда возможна. В таких случаях мы рекомендуем внедрить систему логирования. Перед началом обработки запроса записывайте входящий XML-пакет в текстовый файл или в специальный справочник "Лог запросов". Это позволит вам воспроизвести ошибку на копии базы, используя те же данные, что прислал клиент.

Также для тестирования веб-сервисов без написания кода в 1С отлично подходят сторонние инструменты, такие как SoapUI или Postman. Они позволяют быстро проверить корректность WSDL и увидеть структуру ответа сервера.

Альтернативный взгляд: SOAP или HTTP (REST)?

Хотя мы подробно разобрали работу с SOAP (веб-сервисами), современная платформа 1С предлагает альтернативу — HTTP-сервисы. Разберем, в чем разница. SOAP (объект Веб-сервис) — это строгий стандарт с жестким описанием типов (WSDL). Это удобно для интеграции двух систем на 1С. HTTP-сервисы (REST) более легковесны, используют JSON вместо XML и проще в освоении для веб-разработчиков. Если ваша задача — простая интеграция с мобильным приложением или внешним сайтом, возможно, стоит рассмотреть именно HTTP-сервисы как более производительный вариант.

← На главную