Как открыть базу 1С внешним системам через HTTP

· 10 мин

Содержание

Чтобы 1С работала как веб-сервис, базу публикуют на веб-сервере (IIS или Apache) из Конфигуратора: Администрирование → Публикация на веб-сервере. После этого внешние системы обращаются к ней по HTTP: к своим REST-методам через HTTP-сервисы (/hs/…), к SOAP-методам через Web-сервисы (/ws/…) или к автоматическому REST-интерфейсу OData (/odata/…).

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

Как устроен веб-доступ к 1С

Сама платформа HTTP-запросы не слушает. Между внешним миром и базой стоит веб-сервер с модулем расширения 1С.

Цепочка выглядит так:

  1. 🌐 Внешняя система отправляет запрос на https://сервер/имя_публикации/hs/….
  2. 🧩 Веб-сервер (IIS или Apache) передаёт его модулю расширения 1С: wsisapi.dll для IIS, wsap24.dll для Apache 2.4.
  3. 🔌 Модуль читает файл default.vrd в каталоге публикации. В нём строка подключения к базе и список того, что разрешено публиковать.
  4. 🗄 Для файловой базы модуль открывает её прямо в процессе веб-сервера. Для клиент-серверной — подключается к кластеру 1С (по умолчанию к агенту на порту 1540).
  5. ⚙️ В базе стартует сеанс, выполняется код обработчика, ответ уходит обратно по той же цепочке.

Отсюда два практических вывода. Модуль расширения ставится вместе с платформой (компонент «Модули расширения веб-сервера») и должен совпадать по разрядности с веб-сервером. А у учётной записи веб-сервера должны быть права на каталог файловой базы или сетевой доступ к серверу 1С.

REST, SOAP или OData: что выбрать

СпособАдресКогда подходитМинусы
HTTP-сервисы (REST)/hs/корневой_URL/…Свой API под задачу: сайт, CRM, мобильное приложениеКаждый метод пишет программист
Web-сервисы (SOAP)/ws/имя.1cws?wsdlКорпоративные шины, системы, которые ждут WSDLГромоздкий XML, сложнее отладка
Стандартный OData/odata/standard.odata/Быстро отдать данные справочников и документов без кодаВнутренняя структура базы торчит наружу, при обновлении конфигурации меняется

Для новой интеграции чаще всего берут HTTP-сервис с JSON. SOAP оставляют там, где его требует другая сторона. OData удобен для отчётов и выгрузок «только чтение».

Подготовка веб-сервера под публикацию 1С

IIS на Windows Server

IIS — выбор по умолчанию, если сервер 1С уже на Windows.

  1. В диспетчере сервера добавьте роль «Веб-сервер (IIS)».
  2. В компонентах роли отметьте «Расширения ISAPI» и «Фильтры ISAPI» в группе «Разработка приложений». Без них публикация пройдёт, а запросы вернут ошибку.
  3. Установите платформу 1С с компонентом «Модули расширения веб-сервера» той же версии, что и сервер 1С.
  4. Если модуль 32-разрядный, а IIS 64-разрядный, в дополнительных параметрах пула приложений включите «Разрешить 32-разрядные приложения». Проще сразу ставить 64-разрядную платформу.

Apache на Windows или Linux

Apache удобен на Linux и там, где IIS не хотят. Платформа 8.3 поддерживает Apache 2.2 и 2.4, на практике берут 2.4.

  • 🪟 На Windows обычно ставят сборку Apache 2.4 x64 как службу. Учётная запись службы должна иметь доступ к каталогу публикации.
  • 🐧 На Linux ставят пакет apache2 (или httpd), веб-компоненты 1С и публикуют утилитой webinst из каталога платформы.
КритерийIISApache
ОСТолько WindowsWindows и Linux
Модуль 1Сwsisapi.dllwsap24.dll / wsap24.so
Настройка HTTPSПривязка сертификата в диспетчере IISmod_ssl в конфигурации
Права на файловую базуГруппа IIS_IUSRS или удостоверение пулаПользователь службы Apache

Публикация базы 1С на веб-сервере

Через Конфигуратор

  1. Запустите Конфигуратор от имени администратора Windows: без этого он не сможет записать файлы в каталог веб-сервера и изменить его конфигурацию.
  2. Откройте Администрирование → Публикация на веб-сервере.
  3. Укажите имя публикации (оно станет частью адреса, латиницей, без пробелов), веб-сервер и каталог.
  4. На вкладках отметьте, что публиковать: тонкий и веб-клиент, Web-сервисы, HTTP-сервисы, стандартный интерфейс OData.
  5. Нажмите «Опубликовать». Для Apache Конфигуратор попросит перезапустить службу — перезапуск оборвёт текущие веб-сеансы, делайте его вне рабочего пика.

Из командной строки

На сервере без графики или в скрипте развёртывания используют webinst. Пример для Apache 2.4 и клиент-серверной базы:

"C:\Program Files\1cv8\8.3.25.1374\bin\webinst.exe" -publish -apache24 ^
  -wsdir trade -dir "C:\Apache24\htdocs\trade" ^
  -connstr "Srvr=srv1c;Ref=trade;" ^
  -confpath "C:\Apache24\conf\httpd.conf"

Для IIS вместо -apache24 указывают -iis, а -confpath не нужен. Номер версии в пути подставьте свой.

Что появится после публикации

В httpd.conf Apache добавятся строки примерно такого вида:

LoadModule _1cws_module "C:/Program Files/1cv8/8.3.25.1374/bin/wsap24.dll"
Alias "/trade" "C:/Apache24/htdocs/trade/"
<Directory "C:/Apache24/htdocs/trade/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "C:/Apache24/htdocs/trade/default.vrd"
</Directory>

А в каталоге публикации — default.vrd:

<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/trade" ib="Srvr=srv1c;Ref=trade;">
  <ws publishExtensionsByDefault="true"/>
  <httpServices publishExtensionsByDefault="true"/>
  <standardOdata enable="true"/>
</point>

В строку ib можно вписать Usr= и Pwd=, и тогда все запросы пойдут под одним пользователем без авторизации. Для внешнего доступа так делать нельзя: любой, кто знает адрес, получит данные базы.

Атрибут publishExtensionsByDefault нужен, если HTTP- или Web-сервис добавлен расширением конфигурации. Без него сервис из расширения по адресу не откроется.

Защита веб-сервиса 1С: пользователи, права и HTTPS

Аутентификация и права

По умолчанию HTTP- и Web-сервисы требуют Basic-аутентификацию пользователем информационной базы. Внешняя система передаёт логин и пароль в заголовке Authorization.

Правила для такого пользователя:

  • 👤 Отдельный пользователь под каждую интеграцию, а не общий «Администратор». Так видно в журнале регистрации, кто что изменил.
  • 🔒 Роль только с теми правами, которые нужны обработчику: чтение справочника, добавление документа и так далее.
  • 🚫 Запретите ему интерактивный вход, оставив только доступ через сервисы. В карточке пользователя это видно как набор флажков способов входа.
  • 🔑 Пароль длинный и случайный, хранится в настройках внешней системы, а не в коде.

HTTPS-сертификат

Basic-аутентификация по голому HTTP передаёт пароль почти открытым текстом (Base64). Поэтому всё, что выходит за пределы локальной сети, публикуют только по HTTPS.

  • IIS: импортируйте сертификат в хранилище сервера, в диспетчере IIS откройте сайт → «Привязки» → добавьте https на порт 443 и выберите сертификат. Бесплатный сертификат Let’s Encrypt удобно выпускать и продлевать утилитой win-acme.
  • Apache: включите mod_ssl, в описании виртуального хоста на 443 порту укажите SSLCertificateFile и SSLCertificateKeyFile. На Linux сертификат выпускает и продлевает certbot.

После этого закройте порт 80 или настройте с него перенаправление на 443.

Не выставляйте порты кластера 1С (1540, 1541 и диапазон рабочих процессов) в интернет. Наружу смотрит только веб-сервер на 443, а связь веб-сервера с кластером идёт внутри сети.

Дополнительные меры, которые часто забывают:

  • 🧱 Разрешите доступ к публикации только с IP внешней системы (в IIS — «Ограничения IP-адресов и доменов», в Apache — Require ip).
  • 📂 Делайте отдельную публикацию для интеграции, без веб-клиента. Пользователям веб-клиента и роботам нужны разные настройки.

Обмен данными через HTTP-сервисы 1С

Создание HTTP-сервиса

В Конфигураторе (или в расширении, чтобы не снимать типовую конфигурацию с поддержки):

  1. В дереве метаданных Общие → HTTP-сервисы добавьте сервис, задайте «Корневой URL», например api.
  2. Добавьте шаблон URL, например /item/{code}. Фигурные скобки — параметр.
  3. В шаблоне добавьте метод GET и создайте обработчик.
  4. Обновите конфигурацию базы данных и переопубликуйте базу с флажком HTTP-сервисов.

Пример обработчика, который по коду номенклатуры возвращает её наименование в JSON:

Функция НоменклатураGET(Запрос)

	Код = Запрос.ПараметрыURL.Получить("code");

	ЗапросБД = Новый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Н.Наименование КАК Наименование
	|ИЗ
	|	Справочник.Номенклатура КАК Н
	|ГДЕ
	|	Н.Код = &Код");
	ЗапросБД.УстановитьПараметр("Код", Код);
	Выборка = ЗапросБД.Выполнить().Выбрать();

	Если Не Выборка.Следующий() Тогда
		Возврат Новый HTTPСервисОтвет(404);
	КонецЕсли;

	Данные = Новый Структура("code, name", Код, Выборка.Наименование);
	Запись = Новый ЗаписьJSON;
	Запись.УстановитьСтроку();
	ЗаписатьJSON(Запись, Данные);

	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8);
	Возврат Ответ;

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

Проверка с любой машины:

curl -u integration:пароль https://1c.example.ru/trade/hs/api/item/00-00000123

Для приёма данных добавьте метод POST. Тело запроса читают через Запрос.ПолучитьТелоКакСтроку(), а JSON разбирают ЧтениеJSON и ПрочитатьJSON.

SOAP: Web-сервисы

Web-сервис создают в ветке Общие → Web-сервисы. У него задают пространство имён, имя файла публикации (например, exchange.1cws) и операции с типами параметров из XDTO-пакета. Описание для другой стороны лежит по адресу https://сервер/trade/ws/exchange.1cws?wsdl. Проверять операции удобно в SoapUI: он сам строит запросы по WSDL.

Обратное направление: 1С вызывает чужой API

Когда 1С сама ходит во внешний сервис, публикация не нужна. Используют объекты:

  • HTTPСоединение и HTTPЗапрос — для REST. Для HTTPS в конструктор соединения передают Новый ЗащищенноеСоединениеOpenSSL().
  • WSОпределения и WSПрокси — для SOAP по WSDL.

Правила хорошего API на 1С

  • 📦 Отдавайте данные страницами (параметры limit и offset), а не весь справочник за раз.
  • 🔁 Возвращайте честные коды: 200, 201 при создании, 400 при кривом запросе, 404 если объекта нет. Внешней системе так проще разбирать ответы.
  • 🆔 Ищите объекты по уникальному идентификатору (GUID) или внешнему коду, а не по наименованию.
  • 🧾 Пишите в журнал регистрации входящий запрос и результат: при споре «мы отправили, а вы не приняли» это главный аргумент.
Диагностика: выберите симптом

Диагностика и скорость работы 1С как веб-сервиса

Где искать причину ошибки

  1. Журнал регистрации базы — исключения в обработчиках и попытки входа. Отфильтруйте по пользователю интеграции.
  2. Журнал веб-сервера — для IIS каталог логов сайта, для Apache access.log и error.log. Там видно, дошёл ли запрос и какой код ушёл обратно.
  3. Журнал событий Windows — если модуль расширения не загружается (частая причина — разная разрядность модуля и пула IIS или версия платформы, удалённая после обновления).
  4. Технологический журнал 1С — когда нужно поймать медленные запросы к базе и долгие вызовы. Его включают файлом logcfg.xml на сервере 1С.

После обновления платформы на сервере переопубликуйте базу или поправьте путь к модулю в httpd.conf. Старая версия часто удаляется, а Apache продолжает ссылаться на неё и не стартует.

Как ускорить ответы

  • ♻️ Повторное использование сеансов. В свойствах HTTP-сервиса есть параметр повторного использования сеансов и время жизни сеанса. Если включить, 1С не создаёт новый сеанс на каждый запрос — для частых коротких вызовов разница заметна.
  • 🎯 Тонкие обработчики. Один запрос к базе вместо цикла с обращением через точку к реквизитам ссылок.
  • 📄 Пагинация и фильтры на стороне 1С, а не «выгрузить всё и отфильтровать у себя».
  • 🔀 Отдельная публикация для интеграций и для веб-клиента, чтобы тяжёлый обмен не тормозил пользователей.
  • ⏱ Таймауты. Внешней системе выставьте таймаут с запасом на долгие операции, а длинные задачи (перепроведение, массовая загрузка) переносите в фоновые задания: сервис принимает запрос, отвечает 202 и номером задания, результат забирают отдельным методом.

Перезапуск пула IIS или службы Apache обрывает все текущие веб-сеансы и незавершённые запросы интеграции. Делайте это в согласованное окно и предупредите владельцев внешних систем.

Частые вопросы

Можно ли опубликовать файловую базу как веб-сервис?
Да. Веб-сервер должен стоять на той же машине или иметь доступ к каталогу базы, а его учётной записи нужны права на чтение и запись в этот каталог. Для нагруженного обмена лучше клиент-серверный вариант.
Нужен ли отдельный сервер для веб-публикации?
Нет. IIS или Apache можно поставить на сервер 1С. Отдельная машина в демилитаризованной зоне нужна, если базу открывают в интернет и хотят изолировать сервер 1С от внешнего трафика.
Как отдать данные из типовой конфигурации без доработки кода?
Через стандартный интерфейс OData. Его включают при публикации, затем задают состав доступных объектов (в программе это делает метод УстановитьСоставСтандартногоИнтерфейсаOData, в типовых конфигурациях есть форма настройки). Доступ — по адресу /odata/standard.odata/.
Почему HTTP-сервис лучше добавлять расширением?
Конфигурация остаётся на поддержке и обновляется без ручного сравнения. Расширения появились в платформе 8.3.6. При публикации проверьте, что в default.vrd разрешена публикация сервисов из расширений.
Какой формат выбрать для обмена: JSON или XML?
Если другая сторона ничего не требует — JSON: он короче и проще в отладке. XML и SOAP оставьте для систем, которые работают только по WSDL.