Есть ли в типовых 1С веб-сервис для получения данных по запросу?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции внешних систем с 1С часто возникает потребность в получении данных через веб-запросы. Многие разработчики начинают поиск с вопроса: можно ли выполнить произвольный запрос к базе, используя стандартные механизмы? Давайте разберем эту задачу подробно.

Ограничения протокола OData

Первым делом при ответе на этот вопрос мы вспоминаем про OData. Это встроенный в платформу 1С протокол, который позволяет работать с данными конфигурации как с набором REST-ресурсов. Однако важно понимать, что OData — это не инструмент для исполнения Запрос.Выполнить(). Он предназначен для прямого доступа к объектам метаданных: справочникам, документам и регистрам.

Основные ограничения OData:

  1. Вы не можете отправить текст Запрос в формате SQL или на языке запросов 1С.
  2. Сложные операции, такие как объединение (JOIN) нескольких таблиц или специфические группировки, должны выполняться либо на стороне клиента после получения данных, либо заранее подготовленными выборками.
  3. Для работы OData необходимо, чтобы объект метаданных был включен в публикацию в конфигураторе, а пользователь имел соответствующие права доступа.

Если вы видите, что список коллекций в OData пуст или неполный, это верный признак того, что объекты либо не опубликованы, либо на них отсутствуют права доступа. Помните, что доступность данных в OData напрямую зависит от профиля безопасности пользователя, под которым осуществляется запрос.

Реализация через HTTP-сервисы в расширении

Так как OData не позволяет выполнять произвольный код, лучшим профессиональным решением будет создание собственного HTTP-сервиса. Использование расширения для этой задачи — самый гибкий и безопасный метод, не требующий внесения изменений в основную конфигурацию.

Рассмотрим, как это реализовать на практике:

  1. Создание сервиса: В конфигураторе добавьте новый HTTP-сервис в расширение.
  2. Настройка URL: Определите шаблон URL (например, /GetCustomData), который будет принимать POST или GET запросы от внешней системы.
  3. Написание обработчика: В методе обработчика вы можете написать любую логику на языке 1С.

Пример структуры обработчика для выполнения запроса:


Функция ОбработчикЗапроса(Запрос)
    ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку();
    // Парсим параметры запроса и формируем объект Запрос
    ЗапросКДанным = Новый Запрос;
    ЗапросКДанным.Текст = ТекстЗапроса;
    Результат = ЗапросКДанным.Выполнить().Выгрузить();
    
    // Преобразуем результат в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Результат);
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
    Возврат Ответ;
КонецФункции

Почему это лучшее решение

Создание своего HTTP-сервиса дает вам полный контроль над тем, какие данные уходят из базы и как они фильтруются. В отличие от OData, вы можете:

Важный совет по безопасности: никогда не делайте «сырую» трансляцию текста запроса из интернета прямо в базу. Всегда ограничивайте возможности внешнего клиента. Лучше всего использовать заранее определенные процедуры или «белый список» параметров, чтобы избежать несанкционированного доступа к данным.

Таким образом, если типовых инструментов недостаточно для сложной аналитики, смело приступайте к разработке HTTP-сервиса. Это позволит вам превратить 1С в мощный API-сервер, который будет выполнять ровно ту работу, которая требуется вашему бизнесу.

← На главную