При публикации типовой конфигурации 1С на веб-сервере с включенным стандартным интерфейсом OData разработчики часто сталкиваются с неожиданным поведением. При переходе по базовому адресу сервиса возвращается практически пустой XML-документ с пустым рабочим пространством workspace, а любая попытка обратиться к конкретной сущности (например, к справочнику контрагентов) завершается ошибкой HTTP 404. Разберем причины такого поведения платформы и подробно рассмотрим способы настройки состава интерфейса OData.
Проанализируем архитектуру механизма OData в платформе 1С:Предприятие. По умолчанию в конфигурациях состав сущностей, доступных через стандартный интерфейс OData, не определен. Платформа намеренно не открывает доступ ко всем метаданным конфигурации ради безопасности и оптимизации производительности.
Пока состав явно не инициализирован, обращение к корню сервиса возвращает пустой корневой каталог, а попытки запросить сущности вроде Catalog_Контрагенты приводят к ошибке 404 Not Found, так как сервис не знает об их публикации. Для того чтобы сущности стали доступны во внешних интеграциях, необходимо передать платформе список разрешенных объектов с помощью встроенного метода УстановитьСоставСтандартногоИнтерфейсаOData.
Рассмотрим самый быстрый способ публикации необходимых объектов. Нам не обязательно использовать сторонние обработки с графическим интерфейсом: достаточно сформировать массив имен метаданных и применить его встроенной командой.
Разберем по шагам, как настроить публикацию нужных сущностей программно:
Посмотрим на пример кода, который регистрирует справочники и документы в интерфейсе OData:
МассивИмен = Новый Массив;
МассивИмен.Добавить("Контрагенты");
МассивИмен.Добавить("Номенклатура");
МассивИмен.Добавить("Организации");
МассивИмен.Добавить("СчетНаОплатуПокупателю");
УстановитьСоставСтандартногоИнтерфейсаOData(МассивИмен);
Чтобы проверить, какие объекты в данный момент уже опубликованы, используем парную функцию ПолучитьСоставСтандартногоИнтерфейсаOData():
ТекущийСостав = ПолучитьСоставСтандартногоИнтерфейсаOData();
Для Каждого ИмяОбъекта Из ТекущийСостав Цикл
Сообщить("Опубликован объект: " + ИмяОбъекта);
КонецЦикла;
Если требуется регулярная визуальная настройка состава объектов с помощью флажков, удобно использовать внешнюю обработку управления OData. Однако при открытии старых типовых обработок в современных версиях конфигураций на базе БСП (Библиотеки Стандартных Подсистем) могут возникать ошибки.
1. Ошибка «Метод объекта не обнаружен (СведенияОВнешнейОбработке)»
Эта ошибка возникает, когда обработку пытаются подключить через справочник «Дополнительные отчеты и обработки», но в ее модуле объекта отсутствует стандартная экспортная функция регистрации. Чтобы это исправить, откроем обработку в Конфигураторе, перейдем в модуль объекта и добавим функцию:
Функция СведенияОВнешнейОбработке() Экспорт
РегистрационныеДанные = Новый Структура();
РегистрационныеДанные.Вставить("Наименование", "Редактирование состава стандартного интерфейса OData");
РегистрационныеДанные.Вставить("БезопасныйРежим", Истина);
РегистрационныеДанные.Вставить("Версия", "v 1.0");
РегистрационныеДанные.Вставить("Информация", "Настройка состава OData");
РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
ТаблицаКоманд = Новый ТаблицаЗначений;
ТаблицаКоманд.Колонки.Добавить("Идентификатор");
ТаблицаКоманд.Колонки.Добавить("Использование");
ТаблицаКоманд.Колонки.Добавить("Представление");
НоваяСтрока = ТаблицаКоманд.Добавить();
НоваяСтрока.Идентификатор = "ОткрытьОбработку";
НоваяСтрока.Использование = "ОткрытиеФормы";
НоваяСтрока.Представление = "Открыть настройку OData";
РегистрационныеДанные.Вставить("Команды", ТаблицаКоманд);
Возврат РегистрационныеДанные;
КонецФункции
2. Блокировка из-за режима совместимости конфигурации
В некоторых версиях обработок в коде формы присутствует устаревшая проверка, запрещающая запуск при включенном режиме совместимости. В модуле формы в процедуре ПриСозданииНаСервере закомментируем следующий блок:
//Если Не Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
// Сообщить("В конфигурации установлен режим совместимости. Настроить состав интерфейса невозможно!");
// Возврат;
//КонецЕсли;
После сохранения изменений откроем обработку через главное меню «Файл» — «Открыть», отметим нужные объекты метаданных и нажмем кнопку сохранения.
После того как состав интерфейса определен, обратим внимание на сопутствующие системные параметры, без которых сервис может продолжить выдавать ошибки:
http://<сервер>/<база>/odata/standard.odata/$metadata. В возвращенной XML-схеме должны появиться описания опубликованных справочников и документов.default.vrd и убедимся, что интерфейс OData активен. Внутри должен присутствовать тег <standardOData enable="true"/>.Удаленный доступ (OData) (в метаданных — УдаленныйДоступOData). Дополнительно у пользователя должны быть права на чтение конкретных запрашиваемых таблиц с учетом ограничений RLS.УстановитьСоставСтандартногоИнтерфейсаOData веб-сервер по-прежнему выдает ошибку 404, необходимо перезапустить пул приложений веб-сервера (IIS или Apache), чтобы обновились рабочие процессы, удерживающие предыдущую схему метаданных.