Почему в запросе OData не работает поиск по текстовому полю?

Друзья, интегрирую 1С через OData, в 1С особо не разбираюсь. <br/> <br/> Есть регистр AccountingRegister_Хозрасчетный/RecordsWithExtDimensions. <br/> <br/> Он возвращает такой ответ: <br/> <br/> <pre><code class="javascript">{
  • 28 марта 2026 г. 9:00
Ответы на вопрос 2
Коротко — причин может быть несколько. Чтобы точно сказать, нужен конкретный запрос и ответ (и /odata/$metadata). Ниже — самое распространённое, что проверять, и примеры правильного фильтра для разных случаев/версий OData.

1) Проверьте, что поле вообще доступно в метаданных
- Откройте /odata/$metadata и найдите сущность RecordsWithExtDimensions — как называется текстовое поле в схеме. Часто в регистрах 1С «дополнительные измерения» идут не как одно поле, а как коллекция ExtDimensionValues с разными типами (ValueString, ValueNumber, ValueRef и т.д.). Если поле — внутри коллекции, фильтр надо строить по коллекции, а не по корневому свойству.

2) Правильный синтаксис фильтра в зависимости от OData-версии
- OData v2: используйте substringof:
  $filter=substringof('поиск', Field) eq true
- OData v4: используйте contains:
  $filter=contains(Field,'поиск')
Не забудьте URL-encode (кириллица -> %D0...).

3) Если текстовое значение — в коллекции (ExtDimensionValues)
- Пример: если значение хранится в ExtDimensionValues[].ValueString, то фильтр через any:
  $filter=ExtDimensionValues/any(d: d/ValueString eq 'текст')
или для подстроки (v4):
  $filter=ExtDimensionValues/any(d: contains(d/ValueString,'текст'))
(для v2 — использовать substringof внутри any).

4) Ограничения 1С OData-провайдера
- Некоторые реализации 1С OData не поддерживают все функции (contains/substringof/any) или поддерживают их частично. В таком случае запрос либо вернёт ошибку, либо просто не даст нужного результата.
- Возможно, поле не индексировано и поиск медленный/ограничен, либо провайдер не делает поиск по большим текстовым полям/мемо-полям.

5) Кодировка и регистрозависимость
- Не забудьте URL-encode (особенно кириллицу и пробелы).
- Сравнения могут быть регистрозависимыми. Попробуйте оба варианта или привести к одному регистру (если провайдер поддерживает).

6) Права доступа
- По данным пользователя, под которым выполняется запрос, могут быть ограничения видимости полей/записей.

Примеры запросов
- OData v4, простое поле Name:
  /odata/YourService/RecordsWithExtDimensions?$filter=contains(Name,'Иван')
- OData v2, простое поле:
  /odata/YourService/RecordsWithExtDimensions?$filter=substringof('Иван',Name) eq true
- Поле внутри ExtDimensionValues (v4):
  /odata/YourService/RecordsWithExtDimensions?$filter=ExtDimensionValues/any(d: contains(d/ValueString,'текст'))

Что мне нужно от вас, чтобы помочь дальше
- Текст запроса (URL) и ответ сервера (или код ошибки).
- Вырез из /odata/$metadata для RecordsWithExtDimensions.
- Пример того, где в 1С хранится нужный текст (какое свойство вы ожидаете).

Пришлите эти данные — и я покажу точный фильтр и/или обойдём ограничение.
<a href="https://wonderland.v8.1c.ru/blog/rasshirenie-podderzhki-protokola-odata/" rel="nofollow">https://wonderland.v8.1c.ru/blog/rasshirenie-podde...</a> <br/> Вот здесь в самом начале статьи примеры есть для простого и составного типа. Сравните, всё ли так делали.
Похожие вопросы