> ## Documentation Index
> Fetch the complete documentation index at: https://docs.1unic.com/odatav4/llms.txt
> Use this file to discover all available pages before exploring further.

# Известные ограничения

> Что сервис не поддерживает, редкие сбои платформы и как с ними работать.

## Не поддерживается

На такие запросы сервис отвечает `501 Not Implemented` или `400` с объяснением.

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

* `$search`;
* `$compute` вне `$apply`;
* `$levels`;
* `$apply` внутри `$expand`;
* `$expand` поверх `groupby` и `aggregate`.

**Выражения**

* оператор `has`;
* функции `fractionalseconds`, `totalseconds`, `totaloffsetminutes`, `mindatetime`, `maxdatetime`, `isof`, `geo.*`,
  `matchesPattern`, `hassubset`, `hassubsequence`;
* `cast` к типам `Edm.*` и `cast` выражения (`cast(guid'…','Catalog_X')` для составных свойств работает);
* литералы `binary` и `duration` в сравнениях;
* сравнение и упорядочивание строк неограниченной длины (`400`); `contains` по ним работает.

**`$apply`**

* преобразования `concat`, `expand`, `search`, `nest`, `join`, `rollup`, `$all`, `toppercent`, `topsum`,
  `bottompercent`, `bottomsum`;
* больше 10 шагов в цепочке.

**Регистры**

* `DrCrTurnovers` регистра бухгалтерии;
* виртуальные таблицы регистра расчёта.

**Протокол**

* асинхронная обработка `Prefer: respond-async`;
* повторяемость (`Repeatability-Request-ID`) для `$batch` целиком (для отдельных операций пакета работает).

**Ограничение токена по IP**

* подсети IPv6 (отдельные адреса IPv6 и подсети IPv4 работают).

**Постоянные пределы**

| Предел | Значение |
| - | - |
| Длина параметра запроса | 8000 символов |
| Вложенность скобок | 32 |
| Глубина `$expand` | 3 уровня |
| Переходов в пути через навигацию | 10 |
| `$skip` | не больше 10 000; дальше — постраничная выдача по `$skiptoken` |

Настраиваемые лимиты описаны в разделе [Лимиты запросов](/odatav4/security/limits).

## Rust-компонента и безопасный режим

В безопасном режиме расширения платформа не подключает внешние компоненты. Сервис работает, но всё выполняет
встроенный язык, и большие выгрузки идут медленнее. Подробнее — [Rust-компонента](/odatav4/admin/native). Режим прав
«Привилегированный» в безопасном режиме тоже недоступен: запросы `odatat` отвечают `503`.

## Редкий 500 «Тип не определен» после простоя сеанса

**Признаки:**

* ответ `500`, тело — текст платформы `Тип не определен '<GUID>'`, а не ошибка в формате OData;
* в журнале регистрации нет ошибки `OData4.*` для этого запроса;
* тот же запрос, повторённый сразу, проходит.

**Причина** — гонка в платформе. Сеанс HTTP-сервиса на границе 20 секунд простоя (`sessionMaxAge`) на мгновение не
видит объектов расширения. Чтение настроек, профилей и токенов расширение защищает повтором. А запись журнала
запросов при такой ошибке платформа прерывает мимо обработки исключений, поэтому готовый ответ заменяется на `500`.
Сбой бывает только при включённом [журнале](/odatav4/admin/journal) и редко: единичные случаи за часы непрерывной работы, и не
всегда.

**Что делать клиенту** — повторить запрос. Power BI и Excel повторяют обновление сами.

<Warning>
  Журнал запроса записи пишется после фиксации транзакции. Поэтому `500` может прийти, когда объект **уже записан**,
  и повтор `POST` создаст дубль. Повторяйте запросы записи безопасно:

  * **Любой запрос записи** — с заголовком `Repeatability-Request-ID` или `Idempotency-Key`. Повтор получит
    сохранённый ответ без повторного выполнения.
  * **Создание** — со своим `Ref_Key` и `If-None-Match: *`. Повтор получит `412`, и объект останется один.
  * **`PATCH` и `PUT`** — с `If-Match`. После прошедшей записи версия другая, поэтому повтор получит `412`.
  * **`DELETE`, `Post` и `Unpost`** — после сбоя прочитайте объект и проверьте результат.

  Подробнее — [Надёжная запись](/odatav4/write/reliability).
</Warning>

Если такие ответы участились или GUID в тексте принадлежит не журналу, это другой случай. Сообщите о нём в
[Issues](https://github.com/wiikoservice/odata4/issues): приложите запрос, время, GUID и состояние рабочего процесса
веб-сервера.

## Редкий 500 «Запись не найдена в менеджере имен базы данных»

Ошибка замечена единично, вскоре после обновления конфигурации базы данных на работающем веб-сервере. Отдельно
повторённый запрос проходит. Причина не найдена, возможно, это тот же класс гонки сеанса платформы. Повторите
запрос. Если ошибка повторяется, сообщите запрос, время и было ли перед этим обновление конфигурации.

## `$batch` и сбой журнала после выполнения

Если запись журнала после выполнения пакета упадёт из-за сбоя платформы (см. выше), клиент получит `500` на весь
пакет, хотя его операции уже выполнены и зафиксированы. Повтор такого пакета может создать объекты второй раз.

Как избежать дублей:

* передавайте в каждой операции `Repeatability-Request-ID`;
* или передавайте ключ создаваемого объекта (`Ref_Key`) с `If-None-Match: *`;
* сверяйте результат по `Content-ID` и `id` операций.

## Блокировка журнала в файловой базе

Если весь регистр журнала заблокирован чужой транзакцией, ответ ждёт тайм-аута блокировки платформы, 20 секунд. В
файловой базе так ведёт себя любая незавершённая запись в журнал, потому что блокировки там табличные. Средствами
расширения это не обойти. Для нагруженной работы используйте клиент-серверную базу или выключите журнал.

## Когда действуют изменения доступа

Отзыв токена, изменение профиля и изменение сопоставления пользователя с профилем действуют **со следующего
запроса**. Исключение — запрос, попавший в гонку сеанса платформы (первый запрос после \~20 секунд простоя сеанса).
В нём сервис может взять данные доступа, прочитанные этим сеансом не раньше 5 минут назад. Каждый такой случай
пишется предупреждением `OData4.Безопасность` в журнал регистрации. Если таких данных нет, ответ — `503`.

## Платформа 8.3.11 и адрес клиента

В режиме совместимости 8.3.11 сервису недоступен адрес соединения клиента. Поэтому ограничение токена по IP
проверяется только по заголовку доверенного прокси (`X-Forwarded-For` или `X-Real-IP`). Токен с разрешёнными IP без
настроенного доверенного заголовка отвергается. Подробнее — [Токены](/odatav4/security/tokens).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.