Почему не работает OData в типовой конфигурации 1С и как включить состав стандартного интерфейса?

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

При публикации типовой конфигурации 1С на веб-сервере с включенным стандартным интерфейсом OData разработчики часто сталкиваются с неожиданным поведением. При переходе по базовому адресу сервиса возвращается практически пустой XML-документ с пустым рабочим пространством workspace, а любая попытка обратиться к конкретной сущности (например, к справочнику контрагентов) завершается ошибкой HTTP 404. Разберем причины такого поведения платформы и подробно рассмотрим способы настройки состава интерфейса OData.

Выясним причину: почему интерфейс возвращает пустой список

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

Пока состав явно не инициализирован, обращение к корню сервиса возвращает пустой корневой каталог, а попытки запросить сущности вроде Catalog_Контрагенты приводят к ошибке 404 Not Found, так как сервис не знает об их публикации. Для того чтобы сущности стали доступны во внешних интеграциях, необходимо передать платформе список разрешенных объектов с помощью встроенного метода УстановитьСоставСтандартногоИнтерфейсаOData.

Способ 1. Программное включение состава объектов OData

Рассмотрим самый быстрый способ публикации необходимых объектов. Нам не обязательно использовать сторонние обработки с графическим интерфейсом: достаточно сформировать массив имен метаданных и применить его встроенной командой.

Разберем по шагам, как настроить публикацию нужных сущностей программно:

  1. Откроем базу в режиме «1С:Предприятие» под пользователем с административными правами.
  2. Воспользуемся любой внешней обработкой с возможностью выполнения серверного кода или создадим простейшую команду.
  3. Зададим массив объектов метаданных, к которым требуется предоставить доступ по OData.
  4. Вызовем метод платформы для сохранения настроек.

Посмотрим на пример кода, который регистрирует справочники и документы в интерфейсе OData:


МассивИмен = Новый Массив;
МассивИмен.Добавить("Контрагенты");
МассивИмен.Добавить("Номенклатура");
МассивИмен.Добавить("Организации");
МассивИмен.Добавить("СчетНаОплатуПокупателю");

УстановитьСоставСтандартногоИнтерфейсаOData(МассивИмен);

Чтобы проверить, какие объекты в данный момент уже опубликованы, используем парную функцию ПолучитьСоставСтандартногоИнтерфейсаOData():


ТекущийСостав = ПолучитьСоставСтандартногоИнтерфейсаOData();
Для Каждого ИмяОбъекта Из ТекущийСостав Цикл
    Сообщить("Опубликован объект: " + ИмяОбъекта);
КонецЦикла;

Способ 2. Использование интерактивной обработки для настройки состава

Если требуется регулярная визуальная настройка состава объектов с помощью флажков, удобно использовать внешнюю обработку управления OData. Однако при открытии старых типовых обработок в современных версиях конфигураций на базе БСП (Библиотеки Стандартных Подсистем) могут возникать ошибки.

1. Ошибка «Метод объекта не обнаружен (СведенияОВнешнейОбработке)»

Эта ошибка возникает, когда обработку пытаются подключить через справочник «Дополнительные отчеты и обработки», но в ее модуле объекта отсутствует стандартная экспортная функция регистрации. Чтобы это исправить, откроем обработку в Конфигураторе, перейдем в модуль объекта и добавим функцию:


Функция СведенияОВнешнейОбработке() Экспорт
    РегистрационныеДанные = Новый Структура();
    РегистрационныеДанные.Вставить("Наименование", "Редактирование состава стандартного интерфейса OData");
    РегистрационныеДанные.Вставить("БезопасныйРежим", Истина);
    РегистрационныеДанные.Вставить("Версия", "v 1.0");
    РегистрационныеДанные.Вставить("Информация", "Настройка состава OData");
    РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
    
    ТаблицаКоманд = Новый ТаблицаЗначений;
    ТаблицаКоманд.Колонки.Добавить("Идентификатор");
    ТаблицаКоманд.Колонки.Добавить("Использование");
    ТаблицаКоманд.Колонки.Добавить("Представление");
    
    НоваяСтрока = ТаблицаКоманд.Добавить();
    НоваяСтрока.Идентификатор = "ОткрытьОбработку";
    НоваяСтрока.Использование = "ОткрытиеФормы";
    НоваяСтрока.Представление = "Открыть настройку OData";
    
    РегистрационныеДанные.Вставить("Команды", ТаблицаКоманд);
    Возврат РегистрационныеДанные;
КонецФункции

2. Блокировка из-за режима совместимости конфигурации

В некоторых версиях обработок в коде формы присутствует устаревшая проверка, запрещающая запуск при включенном режиме совместимости. В модуле формы в процедуре ПриСозданииНаСервере закомментируем следующий блок:


//Если Не Метаданные.РежимСовместимости = Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
//    Сообщить("В конфигурации установлен режим совместимости. Настроить состав интерфейса невозможно!");
//    Возврат;
//КонецЕсли;

После сохранения изменений откроем обработку через главное меню «Файл» — «Открыть», отметим нужные объекты метаданных и нажмем кнопку сохранения.

Важные требования к публикации и правам доступа

После того как состав интерфейса определен, обратим внимание на сопутствующие системные параметры, без которых сервис может продолжить выдавать ошибки:

  1. Проверка метаданных сервиса: Убедиться, что сервис применил изменения, можно по адресу http://<сервер>/<база>/odata/standard.odata/$metadata. В возвращенной XML-схеме должны появиться описания опубликованных справочников и документов.
  2. Файл публикации (default.vrd): В каталоге публикации на веб-сервере откроем файл default.vrd и убедимся, что интерфейс OData активен. Внутри должен присутствовать тег <standardOData enable="true"/>.
  3. Права пользователя: Пользователь 1С, под учетной записью которого отправляются запросы к веб-серверу, обязательно должен иметь роль с правом Удаленный доступ (OData) (в метаданных — УдаленныйДоступOData). Дополнительно у пользователя должны быть права на чтение конкретных запрашиваемых таблиц с учетом ограничений RLS.
  4. Кэш веб-сервера: Если после вызова метода УстановитьСоставСтандартногоИнтерфейсаOData веб-сервер по-прежнему выдает ошибку 404, необходимо перезапустить пул приложений веб-сервера (IIS или Apache), чтобы обновились рабочие процессы, удерживающие предыдущую схему метаданных.
  5. Ограничения базовых версий: В базовых версиях конфигураций 1С стандартный интерфейс OData поддерживается, однако действует платформенное ограничение на единственный сеанс. Если интеграция занимает активное соединение, интерактивный вход в программу будет заблокирован.
← На главную