Часто начинающие разработчики сталкиваются с ситуацией: база опубликована на веб-сервере (например, Apache), галочка публикации OData установлена, но при отправке запросов сервер возвращает пустой результат или ошибку. Давайте разберем по шагам, как правильно настроить стандартный интерфейс OData в 1С, проанализируем возможные причины ошибок и выясним, какие настройки необходимо выполнить внутри самой конфигурации — для этого есть инструмент логирования и анализа HTTP-запросов.
Первое, на что мы обратим внимание — это параметры публикации базы на веб-сервере. Когда мы ставим флаг публикации стандартного интерфейса OData, платформа 1С вносит изменения в специальный файл настроек. Рассмотрим его подробнее.
Перейдите в каталог публикации вашей базы и откройте текстовым редактором файл default.vrd. Проанализируем его содержимое. В нем обязательно должна присутствовать следующая секция:
<standardOData enable="true" reuseSessions="autouse" />
Если атрибут enable установлен в значение false, то интерфейс OData работать не будет. Параметр reuseSessions настоятельно рекомендуем устанавливать в значение autouse. Это позволит веб-серверу переиспользовать сеансы, что значительно повысит производительность, так как серверу не придется создавать новый сеанс под каждый небольшой запрос.
Даже если веб-сервер настроен идеально, мы не получим данные без правильной настройки прав. Выясним причину, по которой запросы часто возвращают пустоту или ошибки 401/403. Дело в том, что OData требует отдельного разрешения для пользователей — для этого подойдёт универсальная обработка для администрирования ролей и прав.
OData должна быть настроена внутри самой конфигурации. По умолчанию платформа не открывает доступ ко всем объектам ради безопасности. Разберем, как программно указать, какие справочники или документы мы хотим отдавать наружу.
Для этого в 1С используется специальный метод УстановитьСоставСтандартногоИнтерфейсаOData. Посмотрим на пример кода, который активирует доступ к контрагентам и номенклатуре:
// Создаём массив метаданных
Массив = Новый Массив;
Массив.Добавить(Метаданные.Справочники.Контрагенты);
Массив.Добавить(Метаданные.Справочники.Номенклатура);
// Активируем состав интерфейса
УстановитьСоставСтандартногоИнтерфейсаOData(Массив);
Важное правило: этот код должен выполняться на стороне сервера в привилегированном режиме или под пользователем с полными правами. Обратите внимание, что данный метод полностью перезаписывает разрешенный состав. Если вы передадите в массив только один справочник, все остальные объекты станут недоступны через OData.
Если вы не хотите писать код в модуле приложения, воспользуйтесь интерактивным способом. Запустите базу в режиме «Предприятие» под пользователем с административными правами. Через меню «Все функции» (или «Функции для технического специалиста») найдите обработку Настройка стандартного интерфейса OData.
В открывшемся окне можно просто отметить флажками те объекты, к которым нужно предоставить доступ. Если в вашей типовой конфигурации такой обработки нет, вы можете скачать или создать простую внешнюю обработку с одной кнопкой, в обработчике которой будет выполняться приведенный выше код.
Теперь давайте проверим, работает ли наша настройка в принципе. Используем системный запрос для получения схемы метаданных — для этого есть обработка для анализа метаданных и прав доступа. Откройте браузер и введите следующий URL:
http://адрес_сервера/имя_базы/odata/standard.odata/$metadata
Если все настроено верно, мы получим объемный XML-документ с описанием всех доступных сущностей. Если сервер возвращает ошибку, значит, проблема кроется в публикации default.vrd или в правах доступа. Если XML открывается, но внутри нет наших справочников — значит, мы не настроили состав интерфейса (не отработал код или обработка).
Проанализируем еще несколько технических нюансов, которые важно знать при работе с OData.
?$format=json, либо передавайте в HTTP-запросе заголовок Accept: application/json.Catalog_, для документов — Document_, для регистров сведений — InformationRegister_. Таким образом, правильное обращение выглядит как Catalog_Контрагенты (само имя объекта пишется в точности так, как в дереве метаданных).Пройдя все эти шаги вместе, мы сможем успешно настроить, опубликовать и протестировать стандартный интерфейс OData, избежав типичных ошибок новичков.