Перейти к основному содержимому

OData в 1С

Разработчику Архитектору

Автоматический REST-интерфейс

Платформа 1С:Предприятие 8.3 может автоматически опубликовать REST-интерфейс OData к выбранным объектам конфигурации. Внешняя система читает и изменяет данные HTTP-запросами без написания отдельного HTTP-сервиса на каждый сценарий.

ODataHTTP-сервис
НастройкаОтметить объекты в публикацииШаблоны URL + BSL
КонтрактИмена ресурсов по правилам платформыЛюбой JSON/XML
Когда удобенВитрины, BI, универсальный доступУзкий API «под интеграцию»

Теория протокола OData — в статье энциклопедии про OData. Здесь — реализация на стороне 1С.


Публикация

  1. Опубликовать информационную базу на веб-сервере.
  2. В мастере публикации включить стандартный интерфейс OData.
  3. Указать, какие объекты конфигурации доступны через интерфейс.

Корень сервиса:

https://host/base/odata/standard.odata/

Проверка в браузере: откройте этот URL. Если интерфейс жив, но ни один объект не опубликован, придёт минимальный XML/atom-ответ с пустым workspace. После добавления объектов в публикации список ресурсов расширится.


Имена ресурсов

Идентификатор ресурса: ПрефиксИмяОбъектаСуффикс.

Объект конфигурацииПрефикс в URL
СправочникCatalog
ДокументDocument
Регистр сведенийInformationRegister
Регистр накопленияAccumulationRegister
КонстантаConstant
План обменаExchangePlan
План видов характеристикChartOfCharacteristicTypes

ИмяОбъекта — как в конфигураторе (например, Номенклатура). Пример:

GET .../odata/standard.odata/Catalog_Номенклатура?$format=json

Суффиксы:

  • _ИмяТабличнойЧасти — строки табличной части всех документов типа;
  • _RecordSet / поля набора записей регистра;
  • виртуальные таблицы регистра — функции вроде SliceLast() (срез последних), с параметрами как в языке запросов.

Пример среза последних:

.../InformationRegister_ЦеныТоваров/SliceLast()

Параметры запроса

ПараметрНазначение
$format=jsonОтвет в JSON (иначе часто atom-xml)
$metadataОписание модели интерфейса
$filterУсловие отбора
$selectСписок полей

Заголовок Accept: application/json тоже запрашивает JSON у многих клиентов.

$filter — примеры

ОперацияКлючПример
Равноeq$filter=Description eq 'Товар А'
Не равноne$filter=Code ne '00001'
Большеgt$filter=Цена gt 1000
Иand$filter=Цена gt 10 and Цена lt 100
ИЛИor$filter=...
Начинается сstartswith$filter=startswith(Description, 'ООО') eq true

Строковые литералы в фильтре — в одинарных кавычках.

$select

Catalog_Сотрудники?$format=json&$select=Description,Code

Для табличной части: ИмяТабличнойЧасти/ИмяПоля.


HTTP-методы и API 1С

ОперацияHTTPМетод HTTPСоединение
ЧтениеGETПолучить()
СозданиеPOSTОтправитьДляОбработки()
Частичное изменениеPATCHИзменить()
Полная заменаPUTЗаписать()
УдалениеDELETEУдалить()

Клиентский код — 130.md. Тело POST/PATCH обычно JSON с полями сущности.


Обращение к одному элементу

Ссылка на элемент — GUID в скобках:

Catalog_Должности(guid'88d54406-36a1-11e9-8bb2-642737df2048')?$format=json

GUID берут из поля Ref в ответе списка или из базы 1С.


Типичные ошибки

Сначала убедитесь, что открывается корень .../odata/standard.odata/.

СимптомКод odata.errorПричина
«Тип сущности не найден»8Ошибка в имени объекта (CatalogДолжности вместо Catalog_Должности)
«Экземпляр сущности не найден»9Неверный GUID или объект удалён
«Error parsing $filter»14Опечатка в $filter (например, startwith вместо startswith)
Пустой workspaceOData включён, объекты не отмечены в публикации

Тело ошибки JSON:

{
"odata.error": {
"code": "8",
"message": { "lang": "ru", "value": "..." }
}
}

Разбирайте КодСостояния HTTP и поле code внутри ответа.


Безопасность и производительность

  • Ограничивайте состав опубликованных объектов — не открывайте всю конфигурацию без необходимости.
  • Назначьте отдельного пользователя интеграции с минимальными ролями.
  • Тяжёлые выборки без $filter и $select нагружают СУБД — проектируйте запросы так же, как запросы 1С.
  • Переиспользование сеансов интернет-сервисов ускоряет частые вызовы (отдельная тема фазы 3).

HTTP-сервис или OData
Нужен жёсткий контракт для одного партнёра — чаще HTTP-сервис. Нужна витрина «все справочники для отчётности» — OData.


Связанные материалы


Проверка себя

  • Как проверить, что OData опубликован, но объекты не выбраны?
  • Как получить JSON вместо atom-xml?
  • Какой URL у среза последних регистра сведений?

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").