
Расширения в 1С позволяют внедрять собственные механизмы в конфигурацию без изменения её исходного кода. Один из востребованных сценариев – публикация HTTP сервиса, который может принимать запросы извне и возвращать данные в формате JSON или XML. Такой подход используется для интеграции с веб-приложениями, мобильными клиентами или внешними сервисами.
В расширении можно определить HTTP-сервис через подсистему «Веб-сервисы и HTTP-сервисы». Для этого в объекте конфигурации создаётся общий модуль с экспортными методами, которые будут доступны по определённому URL. Важно учитывать, что имя модуля и маршрут сервиса напрямую влияют на конечный адрес публикации. Например, метод ОбработатьЗапрос в модуле HTTPСервисКлиенты будет вызван при обращении к адресу /http/Клиенты.
После добавления сервиса в расширение необходимо активировать его в списке опубликованных HTTP-сервисов. Для этого используется административная консоль 1С:Предприятия или соответствующие команды на сервере. Если расширение загружено в рабочую базу, опубликованные сервисы становятся доступны без внесения изменений в основную конфигурацию.
Чтобы обеспечить корректную работу, рекомендуется явно указывать метод запроса (GET, POST) и возвращать результат через объект HTTPСервисОтвет, устанавливая MIME-тип. Например, для JSON-данных используется application/json. Такой подход гарантирует совместимость с любыми внешними клиентами.
Создание расширения и подключение к конфигурации

В конфигураторе выберите пункт Конфигурация → Расширения конфигурации и создайте новое расширение. Укажите имя, понятное по назначению, например HTTPService. Тип расширения оставьте «Обычное».
После создания расширения перейдите в его свойства и задайте назначение: «Для доработки». Это позволит подключить объекты и модули без изменения основной конфигурации.
Добавьте общий модуль в расширении, установите флажок «Сервер» и «Вызов сервера». В этом модуле будет размещаться обработка HTTP-запросов.
Для подключения расширения откройте Администрирование → Поддержка и обслуживание → Расширения конфигурации, загрузите созданный файл *.cfe и активируйте его. После активации расширение становится частью конфигурации, и доступ к его объектам возможен сразу без публикации полной базы.
Если требуется обновление, используйте выгрузку/загрузку расширения через файл. Это гарантирует переносимость между стендами и минимизирует риск изменения основной конфигурации.
Добавление общего модуля с экспортными методами

В расширении создайте общий модуль и установите флажки Экспорт и Сервер. Это позволит вызывать функции из HTTP-сервиса и обращаться к ним напрямую.
Имена экспортируемых процедур и функций должны быть короткими и уникальными. Рекомендуется использовать префикс, связанный с расширением, например: РасшHTTP_ПолучитьДанные().
Внутри модуля определите отдельные функции для обработки запросов: чтение тела, работа с JSON, формирование ответа. Например, используйте ЧтениеJSONИзСтроки() для разбора данных и ЗаписатьJSONВСтроку() для формирования результата.
Возвращаемое значение функции должно быть приведено к строке, так как HTTP-сервис возвращает именно текстовый ответ. Для передачи структуры или массива всегда выполняйте сериализацию в JSON.
Разделяйте методы по назначению: один отвечает за аутентификацию, другой за обработку запроса, третий за формирование ответа. Это облегчает отладку и дальнейшее расширение функционала.
Регистрация HTTP-сервиса через менеджер расширений
Для регистрации HTTP-сервиса в расширении используется объект МенеджерРасширений. Он обеспечивает доступ к точкам расширения и позволяет подключать собственные обработчики HTTP-запросов без изменения основной конфигурации.
В модуле расширения необходимо вызвать метод МенеджерРасширений.ДобавитьОбработчикHTTPЗапроса(), передав три параметра: путь сервиса, имя общего модуля и экспортируемую процедуру, которая будет обрабатывать входящие запросы.
Пример:
МенеджерРасширений.ДобавитьОбработчикHTTPЗапроса(«/api/orders», «ОбщийМодуль.МодульСервиса», «ОбработатьЗаказ»);
Важно, чтобы модуль был доступен для сервера и имел экспортируемую процедуру с сигнатурой Процедура(HTTPЗапрос, HTTPОтвет). Внутри процедуры можно анализировать метод запроса (GET, POST), заголовки и тело, формировать ответ с помощью объекта HTTPОтвет.
Если требуется зарегистрировать несколько сервисов, каждый маршрут указывается отдельным вызовом ДобавитьОбработчикHTTPЗапроса. Пути должны быть уникальными, иначе последний зарегистрированный обработчик перезапишет предыдущий.
После публикации расширения и его активации сервис становится доступен по адресу http://server:port/имя_базы/api/orders. При изменении маршрутов достаточно перезагрузить расширение, без перекомпиляции основной конфигурации.
Настройка маршрутов и обработка входящих запросов

В расширении 1С маршруты для HTTP-сервиса регистрируются через метод ОпубликоватьМаршрут() объекта HTTPСервис. Каждый маршрут связывается с конкретной серверной процедурой модуля расширения.
- Шаблон маршрута: строка с путём и параметрами, например
/api/orders/{Номер}. - Метод запроса: указывается при регистрации (
GET,POST,PUT,DELETE). - Обработчик: имя экспортной процедуры или функции, которая принимает объект
HTTPЗапроси возвращаетHTTPОтвет.
Пример регистрации:
HTTPСервис.ОпубликоватьМаршрут("GET", "/api/orders/{Номер}", "ПолучитьЗаказ");
HTTPСервис.ОпубликоватьМаршрут("POST", "/api/orders", "СоздатьЗаказ");
При обработке запроса важно:
- Извлекать параметры маршрута через
Запрос.ПараметрыURL. - Читать тело запроса методом
Запрос.ПолучитьТелоКакСтроку()илиЗапрос.ПолучитьТелоКакJSON(). - Формировать ответ через
HTTPОтвет, задавая код состояния (КодыСостоянияHTTP) и тип содержимого. - Возвращать только структурированные данные (JSON, XML) – строки или двоичный поток оборачиваются методом
УстановитьТелоИзСтроки()илиУстановитьТелоИзПотока().
Для обработки ошибок рекомендуется определять единый формат ответа, например:
{
"error": true,
"code": 404,
"message": "Заказ не найден"
}
При необходимости можно создавать групповые маршруты с общим префиксом, что упрощает организацию API, например /api/orders/..., /api/customers/....
Возврат ответа в формате JSON или XML
В обработчике HTTP-запроса из расширения 1С можно формировать ответ в нескольких форматах. Чаще всего используются JSON и XML, так как их понимают внешние системы.
Формирование JSON:
- Создать структуру или массив с результатом.
- Преобразовать в строку функцией
JSONСтрока = ФорматJSON(Данные). - Установить заголовок ответа:
Ответ.УстановитьЗаголовок("Content-Type", "application/json; charset=utf-8"). - Записать строку в тело:
Ответ.УстановитьТелоИзСтроки(JSONСтрока).
Формирование XML:
- Создать объект
XMLДокумент = Новый XMLДокументи заполнить узлы. - Сериализовать документ в строку:
XMLСтрока = XMLДокумент.Записать(). - Установить заголовок:
Ответ.УстановитьЗаголовок("Content-Type", "application/xml; charset=utf-8"). - Передать строку в тело:
Ответ.УстановитьТелоИзСтроки(XMLСтрока).
Рекомендации:
- Явно указывайте кодировку UTF-8, иначе клиенты могут получить искажённые символы.
- При JSON-ответах используйте структуры с примитивными типами, избегайте ссылочных объектов 1С.
- Для XML предпочтительно задавать пространства имён, если предполагается интеграция с внешними системами.
- Проверяйте корректность формата через отладчик браузера или curl, прежде чем отдавать в продуктив.
Использование авторизации и проверка прав доступа
При публикации HTTP сервиса из расширения 1С критически важно настроить авторизацию и проверку прав для предотвращения несанкционированного доступа. В расширениях можно использовать как встроенную авторизацию 1С, так и собственные механизмы через HTTP-заголовки.
Для авторизации через встроенные средства 1С необходимо включить параметр «Требовать аутентификацию» при публикации сервиса и использовать методы объекта Пользователи для проверки текущего пользователя. Пример проверки прав:
| Метод | Описание | Пример использования |
|---|---|---|
| ПользовательАктивен() | Проверяет, активен ли текущий пользователь | Если Не ПользовательАктивен() Тогда Возврат Ошибка("Доступ запрещен"); КонецЕсли; |
| ПроверитьПравоДоступа(Объект, Действие) | Проверяет, имеет ли пользователь право на конкретное действие над объектом | Если Не ПроверитьПравоДоступа("Справочники.Номенклатура", "Чтение") Тогда Возврат Ошибка("Нет прав"); КонецЕсли; |
Для внешней авторизации через HTTP-заголовки рекомендуется использовать токены или ключи API. При этом расширение должно проверять заголовок Authorization и сопоставлять его с актуальными ключами. Пример проверки:
| Заголовок | Проверка | Действие при ошибке |
|---|---|---|
| Authorization: Bearer <токен> | Сравнение с таблицей активных токенов | Возврат HTTP 401 и сообщение «Недопустимый токен» |
Важно использовать дифференцированные права доступа для разных методов сервиса. Для каждого метода создается проверка, например:
| Метод сервиса | Требуемое право |
|---|---|
| ПолучитьЗаказы | ЧтениеЗаказы |
| СоздатьЗаказ | ДобавлениеЗаказы |
| УдалитьЗаказ | УдалениеЗаказы |
Рекомендуется логировать все попытки доступа с указанием пользователя, метода и результата проверки прав. Это позволяет оперативно выявлять попытки несанкционированного использования и предотвращать нарушения безопасности.
Отладка HTTP-сервиса в режиме предприятия

Для отладки HTTP-сервиса в режиме предприятия необходимо использовать встроенные возможности 1С:Предприятия. Первым шагом включите журнал регистрации запросов и ошибок: откройте Администрирование → Настройки серверов → Журнал регистрации и активируйте запись событий уровня Подробный для HTTP-сервисов.
Используйте метод ВызовСервиса в тестовых обработках, передавая точные параметры запроса. Для анализа заголовков и тела ответа включите логирование через HTTPСервис.Передать, фиксируя Метод, URL и Тело запроса. Это позволяет выявить несоответствия формата данных или ошибки сериализации JSON.
В случае получения HTTP 500 или некорректного формата ответа, включите Отладчик предприятия и установите точки останова в методах публикации сервиса, таких как ОбработкаЗапроса и ФормированиеОтвета. Проверяйте, что объект Ответ корректно формируется и не содержит пустых значений обязательных полей.
Для ускорения анализа ошибок рекомендуется использовать утилиту Postman или встроенный REST-клиент. Отправляйте идентичные запросы, сравнивайте тело ответа с ожидаемой структурой, фиксируйте время выполнения и размер данных. Это позволяет выявлять узкие места и исключения на этапе исполнения сервиса.
При отладке многопользовательской среды учитывайте, что сервис выполняется в контексте сеанса конкретного пользователя. Используйте ИмяПользователя и ПраваДоступа для проверки корректности обработки авторизации и доступа к данным. Ошибки в правах часто проявляются как HTTP 403 или пустой JSON-ответ.
Наконец, сохраняйте все тестовые сценарии и журналы для последующего анализа и документирования. Это позволяет быстро воспроизводить ошибки и корректировать обработку запросов без риска повлиять на реальную базу данных.
Публикация и проверка работы сервиса на веб-сервере
Для публикации HTTP сервиса 1С из расширения необходимо использовать встроенный механизм публикации веб-сервисов. В конфигураторе откройте расширение, перейдите в раздел «Веб-сервисы» и добавьте новый объект типа «HTTP-сервис». Укажите имя сервиса, описание и набор методов, которые будут доступны извне.
В свойствах сервиса задайте URL-путь, по которому сервис будет доступен на веб-сервере. Например, для локального тестирования можно использовать путь /MyService. Обязательно укажите, что сервис доступен через HTTP и HTTPS, если требуется защищенное соединение.
На веб-сервере IIS или Apache создайте виртуальный каталог, указывающий на каталог публикации информационной базы 1С. В настройках IIS активируйте обработку запросов к *.wsdl и *.svc, если планируется использование WSDL. В случае HTTPS настройте корректный сертификат SSL и привяжите его к сайту.
После публикации проверьте работу сервиса через стандартный браузер или инструмент типа Postman. Для проверки WSDL введите URL вида http://<сервер>/<путь_сервиса>?wsdl. Должна вернуться корректная XML-схема. Для проверки методов выполните POST-запрос с телом в формате JSON или SOAP, в зависимости от типа сервиса.
Для мониторинга и отладки включите логирование вызовов на сервере 1С. В свойствах HTTP-сервиса отметьте «Вести журнал вызовов». Это позволит анализировать ошибки и проверять корректность обработки входящих запросов.
При обнаружении ошибок доступа убедитесь, что порт веб-сервера открыт в брандмауэре, а права пользователя, под которым работает сервер, позволяют выполнять методы сервиса. Для автоматического тестирования можно использовать скрипты на Python или PowerShell, отправляющие запросы к каждому методу и сверяющие ответы с ожидаемыми.
Вопрос-ответ:
Каким образом можно создать HTTP-сервис в расширении 1С?
Чтобы создать HTTP-сервис в расширении 1С, необходимо добавить объект типа «HTTP-сервис» в конфигурацию расширения. В модуле сервиса описываются процедуры и функции, которые будут доступны внешним клиентам через HTTP-запросы. Далее нужно определить маршруты для вызова этих процедур, а также указать параметры и методы доступа, например, GET или POST.
Как настроить маршрутизацию для методов HTTP-сервиса?
Маршрутизация настраивается через модуль HTTP-сервиса. Для каждого метода сервиса указывается URL, по которому он будет доступен. В модуле можно использовать директиву «Маршрут», чтобы связать конкретную функцию с определённым адресом. Также можно задать фильтры и параметры запроса, чтобы обрабатывать разные варианты вызова одного метода.
Какие ограничения накладывает публикация сервиса из расширения на клиентские вызовы?
Сервис, опубликованный из расширения, работает только при включённой поддержке HTTP-сервисов в конфигурации. Клиентские вызовы ограничены авторизацией и правами доступа, настроенными для пользователя, под которым выполняется сервис. Кроме того, объём передаваемых данных и время выполнения запроса ограничены серверными настройками 1С, что нужно учитывать при проектировании интерфейсов.
Нужно ли регистрировать HTTP-сервис в информационной базе перед публикацией?
Да, сервис необходимо зарегистрировать в информационной базе. Это делается автоматически при добавлении объекта HTTP-сервиса в расширение и публикации расширения. Регистрация позволяет системе отслеживать доступные маршруты и методы, а также обеспечивает корректное взаимодействие с внутренними механизмами безопасности и логирования запросов.
Как тестировать опубликованный HTTP-сервис без внешнего клиента?
Для тестирования можно использовать встроенный в 1С механизм обработки HTTP-запросов через HTTP-клиент или специализированные тестовые процедуры. Также можно воспользоваться инструментами вроде Postman или curl, указывая URL маршрута и необходимые параметры. Это позволяет проверять корректность работы методов, форматы возвращаемых данных и обработку ошибок до того, как сервис будет использоваться внешними приложениями.
