Разработка и Конфигурация · 10 мин
Как подключить HTTP-сервис в 1С
Пошаговая инструкция по созданию и публикации HTTP-сервиса в 1С: настройка в конфигураторе, публикация на веб-сервере, проверка работы и типичные ошибки.
HTTP-сервис в 1С — это механизм, который позволяет информационной базе принимать HTTP-запросы от внешних систем: сайтов, мобильных приложений, других учётных программ. Через него можно отдавать данные об остатках, принимать заказы, синхронизировать справочники и строить обмен в реальном времени без промежуточных файлов.
Подключение HTTP-сервиса состоит из двух независимых этапов: создания сервиса в конфигураторе и публикации его на веб-сервере. Без первого этапа некому обрабатывать запросы, без второго — внешние системы физически не смогут до них достучаться. Ошибка на любом из этапов приводит к одному и тому же симптому — запрос уходит «в никуда», поэтому важно понимать всю цепочку.
Материал рассчитан на файловый и клиент-серверный режимы работы с публикацией на Apache или IIS. Примеры кода приведены на встроенном языке 1С и подходят для типовых и самописных конфигураций на управляемых формах.
Что такое HTTP-сервис в 1С и когда он нужен
HTTP-сервис — это объект метаданных конфигурации, который связывает URL-шаблон с программным обработчиком на встроенном языке. Когда внешняя система отправляет запрос на опубликованный адрес, платформа находит подходящий шаблон и вызывает вашу функцию, передавая ей объект HTTPСервисЗапрос. Обработчик формирует ответ — обычно JSON, XML или простой текст.
Типовые сценарии применения: приём заказов с сайта, выгрузка остатков и цен для маркетплейсов, получение статусов оплаты от платёжных агрегаторов, webhook-уведомления от CRM, интеграция с мобильным приложением. Везде, где нужен обмен «по запросу» в реальном времени, HTTP-сервис удобнее регламентных заданий и файлового обмена.
Альтернатива — веб-сервисы (SOAP). Они строже описаны через WSDL, но тяжелее в интеграции с современными системами, где стандартом де-факто стал REST-подход с JSON. Если внешняя система не требует именно SOAP, выбирайте HTTP-сервис.
Подготовка: что проверить перед настройкой
Перед созданием сервиса убедитесь, что у вас есть права на изменение конфигурации (или возможность работать через расширение), а база доступна для публикации. Для файловой базы потребуется установленный веб-сервер и модуль расширения веб-сервера 1С — он ставится вместе с платформой при выборе соответствующего компонента установки.
Определите, какие данные будет отдавать или принимать сервис, и кто будет его вызывать. От этого зависят требования к аутентификации: сервис, открытый в интернет без проверки доступа, — прямая угроза утечке данных. Минимум — базовая аутентификация по пользователю 1С с ограниченными правами, лучше — дополнительная проверка токена в заголовках запроса.
Создание HTTP-сервиса в конфигураторе
Откройте конфигуратор, в дереве конфигурации найдите ветку «Общие → HTTP-сервисы» и добавьте новый объект. В свойствах сервиса задайте имя и «Корневой URL» — это сегмент адреса, по которому сервис будет доступен после публикации. Например, при корневом URL «api» адрес будет выглядеть как /hs/api/….
Далее создайте шаблон URL — он определяет, какие адреса внутри сервиса обрабатываются. В шаблоне можно использовать параметры в фигурных скобках, например /goods/{Артикул}. Для каждого шаблона добавьте метод (GET, POST, PUT, DELETE и другие) и укажите имя процедуры-обработчика — платформа создаст её заготовку в модуле сервиса автоматически.
- 1Создайте объект HTTP-сервис в ветке «Общие → HTTP-сервисы» и задайте корневой URL
- 2Добавьте шаблон URL, например /orders или /goods/{Артикул}
- 3Для шаблона создайте метод GET или POST и сгенерируйте обработчик
- 4Напишите код обработчика: чтение параметров, обращение к данным, формирование ответа
- 5Обновите конфигурацию базы данных (F7)
- 6Опубликуйте сервис на веб-сервере и проверьте запросом из браузера
Пример простейшего обработчика, возвращающего JSON:
Функция GoodsПолучить(Запрос)
Ответ = Новый HTTPСервисОтвет(200);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Артикул = Запрос.ПараметрыURL["Артикул"];
// ... поиск номенклатуры по артикулу ...
Структура = Новый Структура("Артикул, Наименование", Артикул, "Пример товара");
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
ЗаписатьJSON(Запись, Структура);
Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
Возврат Ответ;
КонецФункции
Обратите внимание: обработчик должен всегда возвращать объект HTTPСервисОтвет с корректным кодом состояния. Возврат «ничего» или необработанное исключение приведут к ошибке 500 на стороне клиента без внятной диагностики.
Публикация HTTP-сервиса на веб-сервере
Сервис становится доступен извне только после публикации. В конфигураторе откройте «Администрирование → Публикация на веб-сервере». Укажите имя публикации (латиницей, без пробелов), выберите веб-сервер (Apache 2.2/2.4 или IIS) и каталог публикации. На вкладке «HTTP-сервисы» установите флаг «Публиковать HTTP-сервисы» — по умолчанию он может быть снят, и это частая причина «неработающего» сервиса.
После нажатия «Опубликовать» платформа создаст в каталоге файл default.vrd с описанием сервисов и настроит веб-сервер. Для Apache потребуется перезапуск службы; для IIS убедитесь, что пул приложений работает под учётной записью с доступом к базе. Если публикация проходит с ошибкой прав, запустите конфигуратор от имени администратора.
Особенности клиент-серверного режима
В клиент-серверном варианте HTTP-запросы обрабатываются рабочими процессами кластера, поэтому важно, чтобы веб-сервер «видел» агент сервера 1С. Проверьте, что имя сервера в публикации совпадает с реальным, а порт агента доступен с машины веб-сервера. При большом числе запросов следите за нагрузкой: каждый запрос занимает соединение рабочего процесса.
Ручная правка default.vrd
В сложных случаях (несколько сервисов, нестандартные настройки) файл default.vrd можно отредактировать вручную или создать отдельный файл публикации и подключить его через утилиту webinst. Это даёт контроль над параметрами пула соединений и таймаутами, но требует аккуратности: ошибка в XML делает всю публикацию недоступной.
Аутентификация и безопасность
По умолчанию платформа проверяет запросы по пользователям информационной базы: внешняя система передаёт логин и пароль в заголовке Authorization. Создайте для интеграции отдельного пользователя с минимально необходимыми правами — только на чтение нужных справочников или на запись конкретных документов. Никогда не используйте для сервиса учётную запись администратора.
Дополнительно реализуйте проверку токена в обработчике: внешняя система передаёт секретный ключ в заголовке, а код сравнивает его с хранимым значением. Это защищает даже в случае компрометации пароля пользователя. Для публикации в интернете обязательно включите HTTPS на веб-сервере — базовая аутентификация передаёт учётные данные в легко декодируемом виде.
Проверка работы и диагностика ошибок
Простейшая проверка — GET-запрос из браузера по адресу вида http://сервер/ИмяПубликации/hs/КорневойURL/ресурс. Если сервис требует аутентификации, браузер запросит логин и пароль пользователя 1С. Для POST-запросов и работы с заголовками удобнее Postman, curl или аналогичные инструменты.
Если сервис не отвечает, двигайтесь по цепочке: доступен ли вообще веб-сервер (открывается ли хотя бы заглушка), опубликована ли база, включён ли флаг публикации HTTP-сервисов, совпадает ли корневой URL и шаблон с запрашиваемым адресом, нет ли ошибки в коде обработчика. Ошибки выполнения смотрите в журнале регистрации — туда попадают необработанные исключения обработчиков.
Как проверить результат
Возвращается ожидаемый JSON/XML с кодом 200
Ошибка 404 (не опубликован или неверный URL) либо 500 (ошибка в коде)
С верными данными — доступ, с неверными — код 401
Сервис доступен без логина и пароля
Нет ошибок при вызове обработчика
Необработанные исключения после каждого запроса
Частые вопросы
Чем HTTP-сервис отличается от веб-сервиса (SOAP) в 1С?
Веб-сервис работает по протоколу SOAP с формальным описанием WSDL и XML-конвертами, HTTP-сервис — с произвольными запросами и ответами, обычно JSON. Для интеграции с сайтами и мобильными приложениями HTTP-сервис проще и гибче; SOAP оправдан, когда внешняя система требует именно его.
Можно ли создать HTTP-сервис через расширение, не меняя конфигурацию?
Да, HTTP-сервисы поддерживаются в расширениях конфигурации. Это удобный путь для типовых конфигураций на поддержке: сервис добавляется расширением и не мешает обновлениям. Публикация на веб-сервере выполняется так же, как для сервисов основной конфигурации.
Сервис возвращает 404, хотя всё создано. Что проверять?
Сначала — флаг «Публиковать HTTP-сервисы» в настройках публикации. Затем сверьте полный адрес: имя публикации, префикс /hs/, корневой URL сервиса и шаблон. Учтите, что адрес чувствителен к регистру и лишним слешам. После изменения публикации перезапустите веб-сервер.
Как передать в сервис файл или большой JSON?
Используйте метод POST или PUT и читайте тело запроса через Запрос.ПолучитьТелоКакСтроку() или ПолучитьТелоКакПоток(). Для больших объёмов потоковое чтение предпочтительнее. Учтите ограничения веб-сервера на размер тела запроса — при необходимости увеличьте их в настройках Apache или IIS.
Нужен ли отдельный веб-сервер, если база файловая?
Да. HTTP-сервисы работают только через публикацию на веб-сервере (Apache или IIS) независимо от режима базы. Без веб-сервера принимать входящие HTTP-запросы платформа не может. Для исходящих запросов веб-сервер не нужен — там используется объект HTTPСоединение.
Что важно запомнить
Подключение HTTP-сервиса — это создание объекта в конфигураторе с шаблонами URL и обработчиками, затем публикация на веб-сервере с включённым флагом HTTP-сервисов. Проверяйте работу по коду ответа, защищайте сервис отдельным пользователем с минимальными правами и HTTPS, а ошибки ищите в журнале регистрации.