При интеграции внешних систем с 1С часто возникает потребность в получении данных через веб-запросы. Многие разработчики начинают поиск с вопроса: можно ли выполнить произвольный запрос к базе, используя стандартные механизмы? Давайте разберем эту задачу подробно.
Первым делом при ответе на этот вопрос мы вспоминаем про OData. Это встроенный в платформу 1С протокол, который позволяет работать с данными конфигурации как с набором REST-ресурсов. Однако важно понимать, что OData — это не инструмент для исполнения Запрос.Выполнить(). Он предназначен для прямого доступа к объектам метаданных: справочникам, документам и регистрам.
Основные ограничения OData:
Запрос в формате SQL или на языке запросов 1С.JOIN) нескольких таблиц или специфические группировки, должны выполняться либо на стороне клиента после получения данных, либо заранее подготовленными выборками.OData необходимо, чтобы объект метаданных был включен в публикацию в конфигураторе, а пользователь имел соответствующие права доступа.Если вы видите, что список коллекций в OData пуст или неполный, это верный признак того, что объекты либо не опубликованы, либо на них отсутствуют права доступа. Помните, что доступность данных в OData напрямую зависит от профиля безопасности пользователя, под которым осуществляется запрос.
Так как OData не позволяет выполнять произвольный код, лучшим профессиональным решением будет создание собственного HTTP-сервиса. Использование расширения для этой задачи — самый гибкий и безопасный метод, не требующий внесения изменений в основную конфигурацию.
Рассмотрим, как это реализовать на практике:
HTTP-сервис в расширение./GetCustomData), который будет принимать POST или GET запросы от внешней системы.Пример структуры обработчика для выполнения запроса:
Функция ОбработчикЗапроса(Запрос)
ТекстЗапроса = Запрос.ПолучитьТелоКакСтроку();
// Парсим параметры запроса и формируем объект Запрос
ЗапросКДанным = Новый Запрос;
ЗапросКДанным.Текст = ТекстЗапроса;
Результат = ЗапросКДанным.Выполнить().Выгрузить();
// Преобразуем результат в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Результат);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть());
Возврат Ответ;
КонецФункции
Создание своего HTTP-сервиса дает вам полный контроль над тем, какие данные уходят из базы и как они фильтруются. В отличие от OData, вы можете:
Важный совет по безопасности: никогда не делайте «сырую» трансляцию текста запроса из интернета прямо в базу. Всегда ограничивайте возможности внешнего клиента. Лучше всего использовать заранее определенные процедуры или «белый список» параметров, чтобы избежать несанкционированного доступа к данным.
Таким образом, если типовых инструментов недостаточно для сложной аналитики, смело приступайте к разработке HTTP-сервиса. Это позволит вам превратить 1С в мощный API-сервер, который будет выполнять ровно ту работу, которая требуется вашему бизнесу.