К статье
Практический материал

Разработка и Конфигурация · 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. 1
    Создайте объект HTTP-сервис в ветке «Общие → HTTP-сервисы» и задайте корневой URL
  2. 2
    Добавьте шаблон URL, например /orders или /goods/{Артикул}
  3. 3
    Для шаблона создайте метод GET или POST и сгенерируйте обработчик
  4. 4
    Напишите код обработчика: чтение параметров, обращение к данным, формирование ответа
  5. 5
    Обновите конфигурацию базы данных (F7)
  6. 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 и шаблон с запрашиваемым адресом, нет ли ошибки в коде обработчика. Ошибки выполнения смотрите в журнале регистрации — туда попадают необработанные исключения обработчиков.

Контрольные точки

Как проверить результат

Ответ на GET-запрос из браузера
Норма

Возвращается ожидаемый JSON/XML с кодом 200

Тревожный признак

Ошибка 404 (не опубликован или неверный URL) либо 500 (ошибка в коде)

Аутентификация
Норма

С верными данными — доступ, с неверными — код 401

Тревожный признак

Сервис доступен без логина и пароля

Журнал регистрации
Норма

Нет ошибок при вызове обработчика

Тревожный признак

Необработанные исключения после каждого запроса

Типичные ошибки
01
Не установлен флаг «Публиковать HTTP-сервисы» при публикации — сервис отвечает 404, хотя в конфигураторе всё создано
02
Опечатка в корневом URL или шаблоне — запрос не попадает ни в один шаблон, снова 404
03
Обработчик не возвращает HTTPСервисОтвет — клиент получает 500 без пояснений
04
Использование учётной записи администратора для интеграции — риск полного компромета базы
05
Отсутствие HTTPS при публикации в интернет — перехват учётных данных и тела запросов

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

Чем 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, а ошибки ищите в журнале регистрации.