Параметры запроса переводятся в запрос 1С. Значения из адреса всегда передаются параметрами запроса, а не вставляются в его текст. Имена таблиц и полей берутся только из модели метаданных.
$filter
Операторы
Функции
Перечисления
Значение перечисления сравнивается по имени: 'Значение' или StandardODATA.ВидОперации'Продажа'. Сравнение «больше-меньше» идёт в порядке значений в конфигурации, как в $orderby.
Составные поля
Поля составного типа (Recorder, ExtDimension1 и т. п.) сравниваются только через eq и ne:
Строки неограниченной длины
Такие реквизиты нельзя сравнивать и упорядочивать (400), но contains по ним работает.
Синтаксис OData v3
Клиенты, которые писались под standard.odata, продолжают работать. Принимаются:
- функция
substringof('часть', Description);
- литералы
datetime'2026-01-01T00:00:00', datetimeoffset'…', guid'…', time'…', X'…', binary'…';
- суффиксы чисел
M L D F;
$inlinecount=allpages вместо $count=true.
$select
@odata.context ответа перечисляет выбранные свойства. Узкий $select заметно ускоряет большие выгрузки.
$orderby
Принимаются выражения и пути через навигации, до 32 элементов. Порядок по ссылке упорядочивает по самой ссылке, а не по её представлению: так порядок однозначен и постраничное чтение не теряет строк. Порядок по наименованию задаётся явно: $orderby=Контрагент/Description. Это сознательное отличие — см. Отличия от standard.odata.
topиskip
$top — сколько строк вернуть, $skip — сколько пропустить (не больше 10 000). Для обхода больших наборов используйте не $skip, а постраничное чтение по @odata.nextLink — см. Страницы и большие выгрузки.
$count
$count=true добавляет в ответ @odata.count — число строк с учётом $filter;
…/$count возвращает только число (см. Адреса и наборы).
$format=json — ответ JSON (по умолчанию). Для $metadata $format=json выбирает CSDL JSON — см. $metadata.
Кодирование адреса
Пробел кодируйте как %20, а не +. Знак + вне литерала — это плюс, и сервис отвечает 400 с позицией символа. Внутри литералов + остаётся собой ('9+33', 1e+2, смещение часового пояса). Чтобы передать плюс наверняка, пишите %2B.
Ошибка разбора возвращается как 400 с текстом и позицией символа (с 1), с которой выражение перестало разбираться.
Отличия от OData
Там, где standard.odata расходится со спецификацией OData, сервис ведёт себя как standard.odata:
substring считает позиции с 0;
all по пустой табличной части истинно;
not связывает сильнее eq, поэтому пишите not (A eq B) со скобками.
Что не поддерживается
Ответ 501 Not Implemented:
$search, $compute вне $apply, $levels;
- оператор
has;
- функции
fractionalseconds totalseconds totaloffsetminutes mindatetime maxdatetime isof geo.* matchesPattern hassubset hassubsequence;
cast к типам Edm.* и cast выражения;
- литералы
binary и duration в сравнениях.
Агрегирование и группировка — через $apply.