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

В этой статье мы разберём весь процесс — от создания и публикации веб-сервиса в до его вызова из внешних систем, включая обработку ошибок и оптимизацию производительности. Особое внимание уделим практическим примерам с кодом на встроенном языке, а также нюансам работы с протоколами SOAP и REST. Если вы только начинаете осваивать интеграции или уже столкнулись с конкретной проблемой (например, ошибкой 403 Forbidden при вызове), здесь вы найдёте решения.

Материал будет полезен как 1С-разработчикам, так и специалистам, которые интегрируют сторонние системы с (например, веб-разработчикам или администраторам). Все примеры актуальны для платформы 1С:Предприятие 8.3 (включая последние релизы), но основные принципы применимы и к более ранним версиям.

1. Что такое веб-сервис в 1С и зачем он нужен

Веб-сервис в 1С:Предприятие — это программный интерфейс, который позволяет внешним системам обращаться к данным и функционалу по протоколу HTTP/HTTPS. Фактически это "мост" между вашей базой и любым другим ПО, поддерживающим веб-запросы. Например, с помощью веб-сервисов можно:

  • 📊 Автоматически загружать заказы с сайта в 1С:УТ;
  • 💳 Отправлять платежные поручения в банк-клиент;
  • 📄 Получать данные из 1С:ЗУП для отчётности в госорганы;
  • 🔄 Синхронизировать остатки товаров между несколькими базами.

В поддерживаются два типа веб-сервисов:

  1. HTTP-сервисы — упрощённый вариант для внутренних задач (например, обмен между базами );
  2. WS-сервисы (SOAP) — стандартный протокол для интеграции со сторонними системами (банки, госуслуги, CRM).

Ключевое отличие от других механизмов обмена (например, COM-соединение или файловый обмен) — веб-сервисы работают по сети, не требуют установки дополнительного ПО на клиентской машине и поддерживают аутентификацию, шифрование (через HTTPS) и логирование запросов.

📊 Какой тип веб-сервисов вы используете чаще?
HTTP-сервисы для внутреннего обмена
SOAP для интеграции со сторонними системами
REST API через HTTP-сервисы
Ещё не работал с веб-сервисами в 1С

2. Подготовка к созданию веб-сервиса: требования и настройки

Прежде чем публиковать веб-сервис, убедитесь, что ваша система соответствует минимальным требованиям:

Компонент Требование Примечание
Платформа 1С 8.3.6 и выше Ранние версии поддерживают только SOAP
Режим работы Файловый или клиент-серверный Для HTTP-сервисов обязателен веб-сервер
Веб-сервер Apache, IIS, nginx Для публикации через .htcgi или .hs
Права доступа Администратор 1С Для настройки публикации и разрешений

Если вы используете клиент-серверный вариант, веб-сервис будет опубликован через сервер 1С:Предприятия. Для файлового варианта потребуется настроить веб-сервер (например, Apache или IIS) и указать путь к базе в конфигурационном файле. Обратите внимание: в файловом режиме веб-сервисы работают медленнее и менее надёжно, поэтому для производственных систем рекомендуется клиент-серверная архитектура.

Также проверьте, что в настройках информационной базы разрешён доступ по HTTP:

  1. Откройте конфигуратор ;
  2. Перейдите в Администрирование → Публикация на веб-сервере;
  3. Убедитесь, что галочка Разрешить публикацию активна.
💡

Если вы тестируете веб-сервис локально, используйте localhost вместо реального домена. Это избавит от проблем с SSL-сертификатами на этапе разработки.

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

Рассмотрим пошагово, как создать простой веб-сервис на примере HTTP-сервиса (для SOAP процесс аналогичен, но требует дополнительной настройки WSDL).

1. Создайте новый объект конфигурации:

  • Откройте конфигуратор;
  • В дереве объектов выберите Веб-сервисы;
  • Нажмите ДобавитьHTTP-сервис.

2. Настройте свойства сервиса:

  • Укажите Имя (например, ОбменДанными);
  • В поле Имя пространства имён задайте уникальный префикс (например, http://example.com/ws);
  • Отметьте галочку Опубликовывать.

3. Добавьте операции (методы):

  • В разделе Операции нажмите Добавить;
  • Укажите имя операции (например, ПолучитьСписокТоваров);
  • В модуле операции напишите код на встроенном языке (пример ниже).

Пример кода для операции, возвращающей список товаров:

Функция ПолучитьСписокТоваров() Экспорт

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Номенклатура.Ссылка КАК Ссылка,

| Номенклатура.Наименование КАК Наименование,

| Номенклатура.Артикул КАК Артикул

|ИЗ

| Справочник.Номенклатура КАК Номенклатура";

Результат = Запрос.Выполнить();

Возврат Результат.Выгрузить();

КонецФункции

4. Сохраните и опубликуйте сервис:

  • Нажмите ОК и обновите конфигурацию;
  • В меню Администрирование выберите Публикация на веб-сервере;
  • Укажите виртуальный каталог (например, /ws) и подтвердите публикацию.

Код операции отлажен и не содержит ошибок|

Имя сервиса и пространство имён уникальны|

В конфигураторе разрешена публикация на веб-сервере|

Веб-сервер (Apache/IIS) настроен для работы с 1С|Права доступа к каталогу публикации настроены-->

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

После создания сервиса в конфигураторе его нужно опубликовать, чтобы внешние системы могли к нему обращаться. Рассмотрим два варианта: через встроенный веб-сервер 1С (для тестирования) и через Apache/IIS (для производственной среды).

Вариант 1: Встроенный веб-сервер (для разработки)

Этот способ подходит для быстрого тестирования без настройки внешнего веб-сервера:

  1. В конфигураторе перейдите в Администрирование → Публикация на веб-сервере;
  2. Выберите Опубликовать на встроенном веб-сервере;
  3. Укажите порт (например, 8080) и виртуальный каталог (например, /testws);
  4. Нажмите Опубликовать.

После публикации сервис будет доступен по адресу:

http://localhost:8080/testws/hs/ОбменДанными

Вариант 2: Публикация на Apache/IIS (для production)

Для рабочей среды рекомендуется использовать внешний веб-сервер. Пример настройки для Apache:

  1. Установите модуль mod_proxy и mod_proxy_http;
  2. В конфигурационном файле (httpd.conf или виртуальном хосте) добавьте:
<Location /ws>

SetHandler proxy:

ProxyPass http://localhost:1541/ws/hs

ProxyPassReverse http://localhost:1541/ws/hs

</Location>

Где 1541 — порт сервера 1С:Предприятия (по умолчанию).

Что делать, если после публикации сервис не отвечает?

Проверьте, что порт 1540 (или другой, указанный в настройках кластера 1С) открыт в брандмауэре.

Убедитесь, что служба Apache или IIS запущена и нет ошибок в логах.

В конфигураторе проверьте, что сервис отмечен как Опубликован и нет ошибок при обновлении конфигурации.

Если используете HTTPS, убедитесь, что SSL-сертификат корректно установлен и не просрочен.

5. Вызов веб-сервиса из внешних систем

Теперь разберём, как обратиться к опубликованному сервису из других приложений. Рассмотрим три распространённых сценария: вызов из другой базы 1С, из PHP/Python и через Postman (для тестирования).

Сценарий 1: Вызов из другой базы 1С

Используйте объект HTTPСоединение или WSПрокси (для SOAP). Пример для HTTP-сервиса:

АдресСервиса = "http://server/ws/hs/ОбменДанными/ПолучитьСписокТоваров";

HTTPСоединение = Новый HTTPСоединение(АдресСервиса);

Ответ = HTTPСоединение.Получить();

Результат = JSON.Прочитать(Ответ.ПолучитьТекст());

Сценарий 2: Вызов из PHP

Для HTTP-сервиса (возвращающего JSON):

$url = 'http://server/ws/hs/ОбменДанными/ПолучитьСписокТоваров';

$response = file_get_contents($url);

$data = json_decode($response, true);

print_r($data);

Сценарий 3: Тестирование через Postman

  1. Укажите метод GET или POST (в зависимости от настройки сервиса);
  2. Введите URL сервиса (например, http://server/ws/hs/ОбменДанными/ПолучитьСписокТоваров);
  3. Если требуется аутентификация, добавьте заголовок Authorization;
  4. Отправьте запрос и проверьте ответ.
💡

Для SOAP-сервисов обязательно используйте WSDL-описание. Его адрес обычно имеет вид http://server/ws/ws/Сервис.1cws?wsdl. Внешние системы (например, PHP с SoapClient) смогут автоматически сгенерировать классы для работы с сервисом.

6. Обработка ошибок и отладка

При работе с веб-сервисами чаще всего возникают следующие ошибки:

Ошибка Причина Решение
403 Forbidden Нет прав доступа Проверьте настройки аутентификации в публикации и права пользователя
404 Not Found Неверный URL или сервис не опубликован Убедитесь, что виртуальный каталог указан правильно
500 Internal Server Error Ошибка в коде операции Проверьте логи сервера 1С и веб-сервера
Ошибка соединения Порт закрыт или сервер не отвечает Проверьте брандмауэр и статус службы 1С

Для отладки используйте:

  • 🔍 Логи веб-сервера (Apache error.log или IIS Logs);
  • 📝 Журнал регистрации 1С (Администрирование → Журнал регистрации);
  • 🛠️ Инструменты разработчика в браузере (вкладка Network);
  • 📡 Снифферы трафика (например, Fiddler или Wireshark).

Критическая ошибка: если веб-сервис возвращает пустой ответ или ошибку 413 Payload Too Large, проверьте ограничение на размер передаваемых данных в настройках веб-сервера (параметр LimitRequestBody в Apache).

💡

Чтобы включить подробное логирование ошибок в 1С, добавьте в параметры запуска сервера 1С ключ /L:ALL. Логи будут сохранены в каталоге %TEMP%.

7. Безопасность веб-сервисов: аутентификация и шифрование

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

1. Базовая аутентификация

Настройте проверку логина/пароля в публикации сервиса:

  • В конфигураторе откройте Администрирование → Публикация на веб-сервере;
  • Выберите сервис и установите галочку Требуется аутентификация;
  • Укажите пользователя , от имени которого будут выполняться запросы.

2. HTTPS вместо HTTP

Настройте SSL-сертификат на веб-сервере, чтобы шифровать трафик. Для тестирования можно использовать самоподписные сертификаты (например, через OpenSSL), но для production потребуется сертификат от доверенного центра (например, Let’s Encrypt).

3. Ограничение по IP

В настройках веб-сервера (Apache/IIS) добавьте правило, разрешающее доступ только с определённых IP-адресов:

<Location /ws>

Require ip 192.168.1.0/24 10.0.0.5

</Location>

💡

Для повышения безопасности отключите отображение подробных ошибок 1С в ответах веб-сервиса. Это можно сделать в настройках кластера серверов 1С, отключив параметр ДетализацияОшибокВОтветах.

8. Оптимизация производительности веб-сервисов

Если веб-сервис обрабатывает большое количество запросов или работает с объёмными данными, следуйте этим рекомендациям:

  • Кэшируйте результаты: если данные редко меняются (например, справочник товаров), кэшируйте ответы на стороне 1С или веб-сервера;
  • 📦 Пагинация: для больших выборок (например, документов за год) реализуйте постраничную выдачу;
  • 🔄 Асинхронная обработка: для долгих операций используйте Фоновые задания;
  • 🗜️ Сжатие данных: включите gzip-сжатие на веб-сервере для уменьшения трафика;
  • 🛡️ Ограничение частоты запросов: настройте Rate Limiting на веб-сервере, чтобы предотвратить перегрузку.

Пример кода для кэширования результата на 5 минут:

Функция ПолучитьСписокТоваров() Экспорт

Кэш = Новый Структура("Значение, Время");

Если НЕ ЗначениеЗаполнено(Кэш.Значение) ИЛИ ТекущаяДата() - Кэш.Время > 300 Тогда

// Получаем данные из базы

Запрос = Новый Запрос("ВЫБРАТЬ ......");

Кэш.Значение = Запрос.Выполнить().Выгрузить();

Кэш.Время = ТекущаяДата();

КонецЕсли;

Возврат Кэш.Значение;

КонецФункции

💡

Для высоконагруженных систем рассмотрите возможность вынесения веб-сервисов на отдельный сервер 1С или использования балансировщика нагрузки (например, Nginx).

FAQ: Частые вопросы по веб-сервисам 1С

Как проверить, опубликован ли веб-сервис?

Откройте в браузере адрес вида http://ваш_сервер/виртуальный_каталог/hs (для HTTP-сервиса) или http://ваш_сервер/виртуальный_каталог/ws/сервис.1cws?wsdl (для SOAP). Если сервис опубликован, вы увидите список доступных операций или WSDL-описание.

Можно ли вызвать веб-сервис 1С из JavaScript в браузере?

Да, но с оговорками: из-за политики CORS запрос должен идти либо с того же домена, либо сервер 1С должен отправлять заголовок Access-Control-Allow-Origin: *. Для production лучше использовать промежуточный бэкенд (например, на Node.js или PHP).

Как передать параметры в веб-сервис 1С?

Для HTTP-сервиса параметры передаются в URL (например, /ПолучитьТовар?id=123) или в теле POST-запроса (в формате JSON или XML). Для SOAP параметры описываются в WSDL и передаются в теле запроса согласно стандарту.

Почему веб-сервис работает медленно?

Причины могут быть разные: от неоптимизированных запросов в 1С до сетевых задержек. Начните с анализа логов сервера 1С (включите Технологический журнал), проверьте индексы в базе данных и используйте EXPLAIN для медленных SQL-запросов. Также убедитесь, что на веб-сервере включено сжатие (gzip).

Как отладить SOAP-сервис, если клиент не может подключиться?

Используйте утилиту SoapUI для тестирования WSDL. Проверьте, что:

  1. WSDL доступен по указанному адресу;
  2. Пространства имён в запросе совпадают с WSDL;
  3. Сертификат SSL доверенный (если используется HTTPS).