Запуск HTTP-сервиса в 1С открывает возможности для интеграции вашей конфигурации с внешними системами, мобильными приложениями или веб-сайтами. Этот механизм позволяет обрабатывать входящие запросы по протоколам HTTP или HTTPS, возвращать данные в формате JSON, XML или даже генерировать динамические страницы. Но несмотря на всю мощь инструмента, его настройка часто вызывает вопросы у разработчиков — от выбора между встроенным веб-сервером и внешними решениями (IIS, Nginx, Apache) до обработки ошибок аутентификации и оптимизации производительности.
В этой статье мы разберём процесс запуска HTTP-сервиса в 1С с нуля: от создания простейшего обработчика до развёртывания на боевом сервере. Вы узнаете, как настроить web-сервер для работы с 1С, какие модули нужно модифицировать в конфигурации, и как избежать типичных ошибок при тестировании. Особое внимание уделим обходу ограничений встроенного веб-сервера платформы 1С 8.3.20+, которые могут блокировать внешние запросы без правильной конфигурации.
Материал будет полезен как начинающим разработчикам, так и опытным специалистам, которые хотят систематизировать знания или найти решение для специфических задач — например, организации REST API на базе 1С или интеграции с Telegram-ботами через вебхуки.
1. Что такое HTTP-сервис в 1С и зачем он нужен
HTTP-сервис в 1С:Предприятие — это механизм, позволяющий конфигурации обрабатывать внешние HTTP-запросы и возвращать ответы в заданном формате. Фактически, он превращает вашу базу 1С в миниатюрный веб-сервер, способный:
- 📤 Принимать данные от мобильных приложений (например, заказы из 1С:Мобильной торговли)
- 🔄 Обмениваться информацией с другими системами (CRM, ERP, сайтами на Bitrix или WordPress)
- 🤖 Обрабатывать вебхуки от платежных систем (ЮKassa, Сбербанк Эквайринг) или мессенджеров
- 📊 Генерировать отчёты в реальном времени по запросу из браузера
Основное отличие HTTP-сервиса от традиционных методов интеграции (например, COM-соединения или OData) — это инициация запроса со стороны внешней системы. То есть не 1С отправляет данные куда-то по расписанию, а внешний сервис "стучится" в 1С, когда ему это необходимо. Это критично для сценариев, где важна оперативность — например, обновление статуса заказа сразу после оплаты на сайте.
С технической точки зрения, HTTP-сервис в 1С реализован через:
- 📂 Обработчики URL — специальные процедуры в модуле управляемого приложения, которые срабатывают на конкретные пути (например,
/api/orders) - 🔧 Конфигурацию веб-сервера — настройки IIS, Nginx или встроенного сервера 1С для маршрутизации запросов
- 🔒 Протоколы аутентификации — от базовой авторизации до OAuth 2.0 (поддерживается с версии платформы 8.3.18+)
⚠️ Внимание: В версиях 1С ниже 8.3.15 HTTP-сервис работает только через внешний веб-сервер (IIS или Apache). Встроенный веб-сервер платформы появился позже и имеет ограничения по количеству одновременных соединений (по умолчанию — до 10).
2. Подготовка конфигурации 1С: создаём обработчик HTTP-запросов
Прежде чем настраивать веб-сервер, нужно подготовить саму конфигурацию 1С. Для этого потребуется:
- Создать модуль HTTP-сервиса в дереве объектов конфигурации.
- Определить обработчики URL — процедуры, которые будут вызываться при обращении к конкретным адресам.
- Настроить права доступа для пользователей, которые смогут вызывать сервис.
Рассмотрим процесс на примере простейшего сервиса, который возвращает текущую дату и версию платформы.
2.1. Создание модуля HTTP-сервиса
Откройте конфигуратор и выполните следующие шаги:
- В дереве объектов найдите ветку
Общие → HTTPСервисы. - Добавьте новый элемент (например,
МойПервыйСервис). - В свойствах сервиса укажите:
- 📌 Имя —
APIv1(будет частью URL) - 🔗 Корневой URL —
/api/(базовый путь для всех обработчиков) - 🔒 Аутентификация — выберите
БазоваяилиВстроенная
- 📌 Имя —
- 📅 При обращении к
/api/dateвозвращает текущую дату. - 🔢 При запросе
/api/version— версию платформы 1С. - ❌ Для всех остальных путей выдаёт ошибку
404.
2.2. Написание обработчиков
В модуле созданного сервиса добавьте процедуру для обработки GET-запросов:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
// Определяем путь запроса (например, /api/date)
Путь = Запрос.Путь;
// Обрабатываем конкретный маршрут
Если Путь = "/date" Тогда
Ответ.УстановитьТелоИзСтроки(ТекущаяДата(), "text/plain", "utf-8");
ИначеЕсли Путь = "/version" Тогда
Ответ.УстановитьТелоИзСтроки(Платформа.Версия(), "text/plain", "utf-8");
Иначе
Ответ.УстановитьКодСостояния(404);
Ответ.УстановитьТелоИзСтроки("Маршрут не найден", "text/plain", "utf-8");
КонецЕсли;
КонецПроцедуры
Этот код:
⚠️ Внимание: В реальных проектах избегайте хардкода маршрутов внутри процедуры. Лучше используйте аннотации (доступны с версии 8.3.18) или отдельный модуль для маршрутизации. Пример:&АннотацияПеред(Маршрут="/api/orders")Процедура ПолучитьЗаказы(Запрос, Ответ) Экспорт
// Логика обработки
КонецПроцедуры
☑️ Чек-лист перед публикацией HTTP-сервиса
3. Выбор веб-сервера: встроенный vs внешний (IIS/Nginx)
Платформа 1С предлагает два варианта развёртывания HTTP-сервиса:
- Встроенный веб-сервер — запускается вместе с 1С, не требует дополнительных настроек.
- Внешний веб-сервер (IIS, Nginx, Apache) — более гибкий, но сложный в настройке.
Сравним их ключевые характеристики:
| Параметр | Встроенный сервер | IIS/Nginx |
|---|---|---|
| 🔧 Настройка | Минимальная (включается в параметрах запуска) | Требует конфигурации web.config или nginx.conf |
| 🚀 Производительность | Ограничено 10-50 одновременными соединениями | Масштабируется до тысяч запросов |
| 🔒 Безопасность | Базовая (HTTPS только через обратный прокси) | Поддержка Let’s Encrypt, fail2ban, WAF |
| 💰 Стоимость | Бесплатно | Может потребовать лицензию на Windows Server |
3.1. Встроенный веб-сервер: быстро и просто
Чтобы запустить HTTP-сервис через встроенный сервер:
- Откройте файл запуска 1С (
1cv8.exeили1cv8s.exeдля серверного варианта). - Добавьте параметры:
ENTERPRISE /WSDir "C:\inetpub\wwwroot\1c" /WSPort 8080где:
/WSDir— папка для временных файлов/WSPort— порт прослушивания
Теперь сервис будет доступен по адресу http://localhost:8080/api/date.
3.2. Внешний веб-сервер: гибкость и масштабируемость
Для развёртывания на IIS:
- Установите компонент 1С:Предприятие для Windows (x86/x64) с опцией
Web-сервер. - Создайте в IIS Manager новый сайт, указав путь к файлу
default.vrdиз каталога 1С. - Настройте
web.config:<configuration><system.webServer>
<handlers>
<add name="1C" path=".1c" verb="" modules="IsapiModule" scriptProcessor="C:\Program Files\1cv8\8.3.20.1549\bin\wsap24.dll" />
</handlers>
</system.webServer>
</configuration>
- В свойствах HTTP-сервиса установите
ТипАутентификации = Базовая. - В модуле сервиса проверяйте права пользователя:
Если Не Запрос.Аутентифицирован ТогдаОтвет.УстановитьКодСостояния(401);
Ответ.УстановитьЗаголовок("WWW-Authenticate", "Basic realm=""1C API""");
Возврат;
КонецЕсли;
- 🔑 В свойствах сервиса выберите
ТипАутентификации = Встроенная. - 👤 Настройте права доступа в ролях (например, создайте роль
HTTPПользователь). - 🔗 Внешняя система должна отправлять логин/пароль в теле запроса или заголовках.
- 🔐 Настройте SSL-сертификат на веб-сервере (Let’s Encrypt выдаёт бесплатные сертификаты).
- 🛡️ Ограничьте IP-адреса в фаерволе или через
.htaccess:Order Deny,AllowDeny from all
Allow from 192.168.1.0/24
- 🕵️ Включите логирование запросов для аудита.
- ✅ Успешный запрос:
http://localhost:8080/api/dateдолжен вернуть текущую дату. - ❌ Ошибка 404: проверьте корректность
Корневого URLв настройках сервиса. - ❌ Ошибка 500: изучите логи 1С (
C:\Users\Public\1C\1Cv8\logs\).
Для Nginx потребуется конфигурация с проксированием:
server {
listen 80;
server_name api.yourdomain.ru;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
4. Настройка аутентификации и безопасности
По умолчанию HTTP-сервис в 1С открыт для анонимных запросов, что создаёт риски несанкционированного доступа. Рассмотрим основные способы защиты:
4.1. Базовая аутентификация
Самый простой метод — передача логина/пароля в заголовке Authorization. Чтобы включить её:
4.2. Встроенная аутентификация 1С
Более надёжный вариант — использование пользователей базы 1С. Для этого:
Пример проверки прав в обработчике:
Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени(Запрос.Параметры.Получить("username"));
Если Пользователь.Пустая() Или Не Пользователь.ПроверитьПароль(Запрос.Параметры.Получить("password")) Тогда
Ответ.УстановитьКодСостояния(403);
Возврат;
КонецЕсли;
4.3. HTTPS и защита от атак
Для шифрования трафика:
⚠️ Внимание: При использовании базовой аутентификации через HTTP (без HTTPS) логин и пароль передаются в открытом виде. Это критично уязвимо для MITM-атак (перехват трафика). Всегда настраивайте HTTPS для производственных систем.
curl -u login:password http://localhost:8080/api/date-->
5. Тестирование и отладка HTTP-сервиса
После настройки сервиса необходимо проверить его работоспособность. Рассмотрим инструменты и подходы для тестирования:
5.1. Ручное тестирование через браузер или Postman
Простейший способ — открыть в браузере адрес сервиса:
Для сложных запросов (с заголовками или телом) используйте Postman:
- Создайте новый запрос типа
GETилиPOST. - Укажите URL:
http://your-server/api/version. - Вкладка
Headers: добавьтеAuthorization: Basic base64(login:password). - Отправьте запрос и проверьте ответ.
- 📄 В файлах:
C:\Program Files\1cv8\conf\logcfg.xml(настройка уровней логирования). - 🖥️ В Журнале регистрации 1С (раздел
Администрирование). - 🔄 Разверните несколько экземпляров 1С за Nginx с балансировкой:
upstream backend {server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
- 📊 Используйте Redis для распределённого кэша между серверами.
- 🛒 На стороне Bitrix настройте вебхук на событие "Создание заказа".
- 📤 Вебхук отправляет
POST-запрос на/api/ordersс данными заказа вJSON. - 📥 В 1С обработчик создаёт документ
ЗаказПокупателя: - 🤖 Создайте бота через
@BotFatherи получите токен. - 🔗 Настройте вебхук в Telegram:
https://api.telegram.org/bot{TOKEN}/setWebhook?url=https://your-server/api/telegram. - 📩 В 1С обработчик парсит входящие сообщения:
- 📱 В мобильном приложении настройте подключение к
https://your-server/api/mobile. - 📋 В 1С создайте обработчики для основных сущностей:
&АннотацияПеред(Маршрут="/api/mobile/products")Процедура ПолучитьТовары(Запрос, Ответ) Экспорт
Товары = Справочники.Номенклатура.Выбрать();
Ответ.УстановитьТело(JSON.Записать(Товары), "application/json");
КонецПроцедуры
- 🔹 Встроенный веб-сервер работает только в клиент-серверном варианте.
- 🔹 Для файлового варианта потребуется внешний веб-сервер (IIS или Apache).
- 🔹 Производительность будет ниже из-за блокировок файловой базы.
5.2. Логирование ошибок
В модуле HTTP-сервиса добавьте обработку исключений:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
Попытка
// Основная логика
Исключение
ЗаписатьЛог(ОписатьОшибку(ИнформацияОбОшибке()));
Ответ.УстановитьКодСостояния(500);
Ответ.УстановитьТелоИзСтроки("Внутренняя ошибка сервера", "text/plain");
КонецПопытки;
КонецПроцедуры
Логи можно просматривать:
5.3. Типичные ошибки и их решения
| Ошибка | Причина | Решение |
|---|---|---|
403 Forbidden |
Недостаточно прав у пользователя | Проверьте роль в 1С и настройки аутентификации |
404 Not Found |
Неверный маршрут или корневой URL | Убедитесь, что путь в запросе совпадает с Путь в обработчике |
502 Bad Gateway (при использовании Nginx) |
Некорректное проксирование | Проверьте директиву proxy_pass в конфиге Nginx |
| Таймаут запроса | Долгая обработка на стороне 1С | Оптимизируйте код или увеличьте proxy_read_timeout в Nginx |
Как включить подробные логи для HTTP-сервиса?
В файле logcfg.xml добавьте строку:
<property name="log4j.logger.ru._1c.g5.v8.wsh" value="DEBUG"/>
После этого в логах появятся детали всех входящих запросов, включая заголовки.
6. Оптимизация производительности
HTTP-сервис в 1С может стать узким местом при высокой нагрузке. Рассмотрим способы оптимизации:
6.1. Кэширование ответов
Если данные редко меняются (например, справочники товаров), кэшируйте их:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
Если Не Кэш.Содержит(Запрос.Путь) Тогда
Данные = ПолучитьДанныеИзБазы(); // Долгая операция
Кэш.Добавить(Запрос.Путь, Данные, 3600); // Кэш на 1 час
КонецЕсли;
Ответ.УстановитьТело(Кэш.Получить(Запрос.Путь));
КонецПроцедуры
6.2. Асинхронная обработка
Для долгих операций (например, генерация отчётов) используйте фоновые задания:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
Если Запрос.Путь = "/report" Тогда
Задание = ФоновыеЗадания.Создать("ОбработатьОтчет", Запрос.Параметры);
Ответ.УстановитьТелоИзСтроки("{\"status\": \"processing\", \"task_id\": """ + Задание.УникальныйИдентификатор + """}", "application/json");
КонецЕсли;
КонецПроцедуры
6.3. Балансировка нагрузки
При большом количестве запросов:
Кэширование и асинхронная обработка снижают нагрузку на базу 1С в 3-5 раз при пиковых нагрузках.
7. Примеры реальных сценариев использования
Рассмотрим практические кейсы, где HTTP-сервис в 1С решает бизнес-задачи.
7.1. Интеграция с интернет-магазином
Задача: синхронизировать заказы между 1С:УТ и сайтом на Bitrix.
Решение:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
Если Запрос.Метод = "POST" И Запрос.Путь = "/api/orders" Тогда
Данные = JSON.Прочитать(Запрос.Тело);
НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Данные.Клиент);
// Заполнение остальных полей
НовыйЗаказ.Записать();
Ответ.УстановитьКодСостояния(201);
КонецЕсли;
КонецПроцедуры
7.2. Telegram-бот для уведомлений
Задача: отправлять уведомления в Telegram о новых документах.
Решение:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
Если Запрос.Путь = "/api/telegram" Тогда
Данные = JSON.Прочитать(Запрос.Тело);
Если Данные.message.text = "/start" Тогда
ОтправитьСообщение(Данные.message.chat.id, "Бот запущен!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
7.3. REST API для мобильного приложения
Задача: предоставить данные справочников для 1С:Мобильной торговли.
Решение:
FAQ: Частые вопросы по HTTP-сервису в 1С
🔹 Как включить CORS для запросов с фронтенда?
Добавьте в обработчик заголовки:
Ответ.УстановитьЗаголовок("Access-Control-Allow-Origin", "*");
Ответ.УстановитьЗаголовок("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
Ответ.УстановитьЗаголовок("Access-Control-Allow-Headers", "Content-Type, Authorization");
Для OPTIONS-запросов (preflight) возвращайте пустой ответ с кодом 204.
🔹 Можно ли использовать HTTP-сервис в файловом варианте 1С?
Да, но с ограничениями:
🔹 Как обработать большие файлы (загрузка через API)?
Для загрузки файлов:
- Используйте
POST-запрос сmultipart/form-data. - В 1С читайте файл из
Запрос.Телопорциями:Поток = Новый ЧтениеДанных(Запрос.Тело);Файл = Новый ДвоичныеДанные();
Пока Истина Цикл
Буфер = Поток.Прочитать(1024);
Если Буфер.Размер() = 0 Тогда Прервать; КонецЕсли;
Файл.Добавить(Буфер);
КонецЦикла;
- Сохраните файл во временное хранилище или базу.
🔹 Почему сервис работает локально, но не отвечает из внешней сети?
Проверьте:
- 🔹 Фаервол: порт (например,
8080) должен быть открыт. - 🔹 Маршрутизатор: пробросьте порт на IP-адрес сервера с 1С.
- 🔹 Веб-сервер: в IIS или Nginx проверьте привязку к внешнему IP.
- 🔹 1С: в параметрах запуска укажите
/WSHost=0.0.0.0(слушать все интерфейсы).
🔹 Как ограничить количество запросов в секунду?
Реализуйте rate limiting в обработчике:
Процедура ОбработатьЗапрос(Запрос, Ответ) Экспорт
IP = Запрос.АдресКлиента;
Если Кэш.Содержит("limit_" + IP) Тогда
Если Кэш.Получить("limit_" + IP) > 10 Тогда
Ответ.УстановитьКодСостояния(429); // Too Many Requests
Возврат;
КонецЕсли;
Кэш.Добавить("limit_" + IP, Кэш.Получить("limit_" + IP) + 1, 1); // Сброс каждую секунду
Иначе
Кэш.