Как открыть базу 1С внешним системам через HTTP
Содержание
Чтобы 1С работала как веб-сервис, базу публикуют на веб-сервере (IIS или Apache) из Конфигуратора: Администрирование → Публикация на веб-сервере. После этого внешние системы обращаются к ней по HTTP: к своим REST-методам через HTTP-сервисы (/hs/…), к SOAP-методам через Web-сервисы (/ws/…) или к автоматическому REST-интерфейсу OData (/odata/…).
Сайт хочет получать остатки, CRM — создавать заказы, мобильное приложение — показывать статусы. Всё это решается одной публикацией базы и парой обработчиков. Описание ниже относится к платформе 8.3 и подходит для любой конфигурации: БП, УТ, ЗУП или своей.
Как устроен веб-доступ к 1С
Сама платформа HTTP-запросы не слушает. Между внешним миром и базой стоит веб-сервер с модулем расширения 1С.
Цепочка выглядит так:
- 🌐 Внешняя система отправляет запрос на
https://сервер/имя_публикации/hs/…. - 🧩 Веб-сервер (IIS или Apache) передаёт его модулю расширения 1С:
wsisapi.dllдля IIS,wsap24.dllдля Apache 2.4. - 🔌 Модуль читает файл
default.vrdв каталоге публикации. В нём строка подключения к базе и список того, что разрешено публиковать. - 🗄 Для файловой базы модуль открывает её прямо в процессе веб-сервера. Для клиент-серверной — подключается к кластеру 1С (по умолчанию к агенту на порту 1540).
- ⚙️ В базе стартует сеанс, выполняется код обработчика, ответ уходит обратно по той же цепочке.
Отсюда два практических вывода. Модуль расширения ставится вместе с платформой (компонент «Модули расширения веб-сервера») и должен совпадать по разрядности с веб-сервером. А у учётной записи веб-сервера должны быть права на каталог файловой базы или сетевой доступ к серверу 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.
- В диспетчере сервера добавьте роль «Веб-сервер (IIS)».
- В компонентах роли отметьте «Расширения ISAPI» и «Фильтры ISAPI» в группе «Разработка приложений». Без них публикация пройдёт, а запросы вернут ошибку.
- Установите платформу 1С с компонентом «Модули расширения веб-сервера» той же версии, что и сервер 1С.
- Если модуль 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из каталога платформы.
| Критерий | IIS | Apache |
|---|---|---|
| ОС | Только Windows | Windows и Linux |
| Модуль 1С | wsisapi.dll | wsap24.dll / wsap24.so |
| Настройка HTTPS | Привязка сертификата в диспетчере IIS | mod_ssl в конфигурации |
| Права на файловую базу | Группа IIS_IUSRS или удостоверение пула | Пользователь службы Apache |
Публикация базы 1С на веб-сервере
Через Конфигуратор
- Запустите Конфигуратор от имени администратора Windows: без этого он не сможет записать файлы в каталог веб-сервера и изменить его конфигурацию.
- Откройте
Администрирование → Публикация на веб-сервере. - Укажите имя публикации (оно станет частью адреса, латиницей, без пробелов), веб-сервер и каталог.
- На вкладках отметьте, что публиковать: тонкий и веб-клиент, Web-сервисы, HTTP-сервисы, стандартный интерфейс OData.
- Нажмите «Опубликовать». Для 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-сервиса
В Конфигураторе (или в расширении, чтобы не снимать типовую конфигурацию с поддержки):
- В дереве метаданных
Общие → HTTP-сервисыдобавьте сервис, задайте «Корневой URL», напримерapi. - Добавьте шаблон URL, например
/item/{code}. Фигурные скобки — параметр. - В шаблоне добавьте метод
GETи создайте обработчик. - Обновите конфигурацию базы данных и переопубликуйте базу с флажком 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С как веб-сервиса
Где искать причину ошибки
- Журнал регистрации базы — исключения в обработчиках и попытки входа. Отфильтруйте по пользователю интеграции.
- Журнал веб-сервера — для IIS каталог логов сайта, для Apache
access.logиerror.log. Там видно, дошёл ли запрос и какой код ушёл обратно. - Журнал событий Windows — если модуль расширения не загружается (частая причина — разная разрядность модуля и пула IIS или версия платформы, удалённая после обновления).
- Технологический журнал 1С — когда нужно поймать медленные запросы к базе и долгие вызовы. Его включают файлом
logcfg.xmlна сервере 1С.
После обновления платформы на сервере переопубликуйте базу или поправьте путь к модулю в httpd.conf. Старая версия часто удаляется, а Apache продолжает ссылаться на неё и не стартует.
Как ускорить ответы
- ♻️ Повторное использование сеансов. В свойствах HTTP-сервиса есть параметр повторного использования сеансов и время жизни сеанса. Если включить, 1С не создаёт новый сеанс на каждый запрос — для частых коротких вызовов разница заметна.
- 🎯 Тонкие обработчики. Один запрос к базе вместо цикла с обращением через точку к реквизитам ссылок.
- 📄 Пагинация и фильтры на стороне 1С, а не «выгрузить всё и отфильтровать у себя».
- 🔀 Отдельная публикация для интеграций и для веб-клиента, чтобы тяжёлый обмен не тормозил пользователей.
- ⏱ Таймауты. Внешней системе выставьте таймаут с запасом на долгие операции, а длинные задачи (перепроведение, массовая загрузка) переносите в фоновые задания: сервис принимает запрос, отвечает 202 и номером задания, результат забирают отдельным методом.
Перезапуск пула IIS или службы Apache обрывает все текущие веб-сеансы и незавершённые запросы интеграции. Делайте это в согласованное окно и предупредите владельцев внешних систем.
Частые вопросы
Можно ли опубликовать файловую базу как веб-сервис?
Нужен ли отдельный сервер для веб-публикации?
Как отдать данные из типовой конфигурации без доработки кода?
УстановитьСоставСтандартногоИнтерфейсаOData, в типовых конфигурациях есть форма настройки). Доступ — по адресу /odata/standard.odata/.Почему HTTP-сервис лучше добавлять расширением?
default.vrd разрешена публикация сервисов из расширений.