Коротко — причин может быть несколько. Чтобы точно сказать, нужен конкретный запрос и ответ (и /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С хранится нужный текст (какое свойство вы ожидаете).
Пришлите эти данные — и я покажу точный фильтр и/или обойдём ограничение.