|   |   | 
| 
 | Отбор в 1C ODATA hiwun, dmt, Михаил Козлов, Хряк, RVN, _Batoo, tan76, Гипервизор, Hmster, , ass1c, kir-g, vbus, CaptanG, DeeK, Бычье сердце, Vostochnick, Victor111, Широкий, ЕRPe, DimVad, Prog_man, arsik, Ager, boozin, Anton1307, Страждущий, ReaLg, 2S, calmius, JeHer, PR, Скучный бух, fred001, новичекВ1С, segn, frmdtf1 | ☑ | ||
|---|---|---|---|---|
| 0
    
        hiwun 18.03.25✎ 10:33 | 
        https://server/db/odata/standard.odata/Catalog_ХарактеристикиНоменклатуры?$format=json&$filter=Owner eq 'ae8d0dac-5a7c-11ed-88ce-d8bbc189bb8e'
 Под капотом из метадаты тип поля Owner следующий <Property Name="Owner" Type="Edm.String" Nullable="true"/> Суть в том, что запрос возвращает пустые результаты value = [], но физически элементы с таким guid(но по метадате это строка) существуют, почему так происходит? Причем физически я пробовал с разными guid это делать, КОТОРЫЕ РЕАЛЬНО СУЩЕСТВУЮТ, прямо из списка брал Причем если я делаю аналогичный запрос, но делаю фильтрацию где Description eq 'Наименование какое то', то элементы находятся, хотя у Description точно такой же тип данных как у Owner <Property Name="Description" Type="Edm.String" Nullable="true"/> В чем фокус? Кто сталкивался? | |||
| 1
    
        JeHer 18.03.25✎ 10:43 | 
        Латиница, кирилллица, не? Какие-то неприятные символы?     | |||
| 2
    
        hiwun 18.03.25✎ 10:47 | 
        Все пробовали, точно не в этом проблема, именно с полем Owner не работает, оно даже в функции не попадает, в отличии например от Description
 Вот на всякий случай xml всей модели, из ней видно почему они сделали Owner строкой, а не guid, потому что есть поле Owner_Type, который обозначает справочник на который ссылается, хотя тоже непонятно почему нельзя было сделать guid, но в целом сути это не меняет <EntityType Name="Catalog_ХарактеристикиНоменклатуры" OpenType="true"> <Key> ... </Key> <Property Name="Ref_Key" Type="Edm.Guid" Nullable="false"/> <Property Name="Predefined" Type="Edm.Boolean" Nullable="true"/> <Property Name="PredefinedDataName" Type="Edm.String" Nullable="true"/> <Property Name="DataVersion" Type="Edm.String" Nullable="true"/> <Property Name="Description" Type="Edm.String" Nullable="true"/> <Property Name="Owner" Type="Edm.String" Nullable="true"/> <Property Name="DeletionMark" Type="Edm.Boolean" Nullable="true"/> <Property Name="НаименованиеПолное" Type="Edm.String" Nullable="true"/> <Property Name="Принципал" Type="Edm.String" Nullable="true"/> <Property Name="Контрагент" Type="Edm.String" Nullable="true"/> <Property Name="КиЗГИСМGTIN" Type="Edm.String" Nullable="true"/> <Property Name="ВидНоменклатуры_Key" Type="Edm.Guid" Nullable="true"/> <Property Name="УдалитьВидНоменклатуры_Key" Type="Edm.Guid" Nullable="true"/> <Property Name="ХарактеристикаНоменклатурыДляЦенообразования_Key" Type="Edm.Guid" Nullable="true"/> <Property Name="ыКод" Type="Edm.String" Nullable="true"/> <Property Name="НаименованиеЯзык1" Type="Edm.String" Nullable="true"/> <Property Name="НаименованиеЯзык2" Type="Edm.String" Nullable="true"/> <Property Name="ДополнительныеРеквизиты" Type="Collection(StandardODATA.Catalog_ХарактеристикиНоменклатуры_ДополнительныеРеквизиты_RowType)" Nullable="true"/> <Property Name="Owner_Type" Type="Edm.String" Nullable="true"/> <Property Name="Принципал_Type" Type="Edm.String" Nullable="true"/> <Property Name="Контрагент_Type" Type="Edm.String" Nullable="true"/> <NavigationProperty Name="ВидНоменклатуры" Relationship="StandardODATA.Catalog_ХарактеристикиНоменклатуры_ВидНоменклатуры" FromRole="Begin" ToRole="End"/> <NavigationProperty Name="УдалитьВидНоменклатуры" Relationship="StandardODATA.Catalog_ХарактеристикиНоменклатуры_УдалитьВидНоменклатуры" FromRole="Begin" ToRole="End"/> </EntityType> | |||
| 3
    
        RVN 18.03.25✎ 10:52 | 
        а если написать 
 Owner eq guid'ae8d0dac-5a7c-11ed-88ce-d8bbc189bb8e' ? | |||
| 4
    
        hiwun 18.03.25✎ 10:55 | 
        Тогда ошибка ибо Owner это строка и мы пытаемся сделать сравнение строки с guid
 Код ошибки ниже { "odata.error": { "code": "-1", "message": { "lang": "ru", "value": "{(3, 25)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля\n неограниченной длины и поля несовместимых типов.\n( sourceAlias.Owner ) \u003C\u003C?\u003E\u003E= ( &fc_param0 )" } } } | |||
| 5
    
        RVN 18.03.25✎ 11:01 | 
        для номенклатуры odata включена?     | |||
| 6
    
        hiwun 18.03.25✎ 11:03 | 
        Да, включена     | |||
| 7
    
        dmt 18.03.25✎ 11:08 | 
        (0)
 Отбор по Owner при запросе через oData ИТС: Имеется возможность выполнять отбор сущностей при помощи проверки на равенство поля составного типа и ссылки. Для этого следует использовать функцию cast(). Пример: Копировать в буфер обмена $filter=ДокументПриходаeqcast(guid'0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7','Document_ПриходнаяНакладная') В данном примере у используемой сущности имеет реквизит составного типа ДокументПрихода. Запрос будет отбирать все записи сущности, у которой данный реквизит заполнен ссылкой на документ ПриходнаяНакладная с указанным уникальным идентификатором (0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7). Если требуется выполнить отбор по реквизиту типа УникальныйИдентификатор, то это выполняется с помощью простой операции сравнения: Копировать в буфер обмена $filter=ИмяРеквизитаeqguid'0d4a79cb-9843-4147-bcd9-80ac3ca2b9c7' | |||
| 8
    
        hiwun 18.03.25✎ 11:08 | 
        Уже изучали эту статью, там нет решения, просто комментарий - "разобрался, спасибо"
 В документации про такие случаи не слова, там только типовые и шаблонные варианты Опять же через функции like, substring, substringof, cast тоже пробовали, но они видят поле Owner, но любое другое видят, в чем секрет? Неизвестно | |||
| 9
    
        hiwun 18.03.25✎ 11:10 | 
        (7) Тип Owner обычная строка Edm.String это не Guid, соответственно к нему не применимо guid'', и да, пробовали, не работает
 Это не стандартная ситуация в которой мы не можем разобраться | |||
| 10
    
        dmt 18.03.25✎ 11:12 | 
        (8) секрет видимо в поле составного типа     | |||
| 11
    
        hiwun 18.03.25✎ 11:18 | 
        (10) Кто кто уже сталкивался с работой с ними? Решение в интернете 0, по крайне мере там где искали
 Нейронка тоже в тупике, предлагает типовые решения, не работающие | |||
| 12
    
        hiwun 18.03.25✎ 11:19 | 
        Хотя казалось бы, задача вообще типовая и обычная, просто получить характеристики где guid номенклатуры равен owner, задача первого класса и на ней споткнуться     | |||
| 13
    
        hiwun 18.03.25✎ 11:22 | 
        UPD, разобрались, нашли решение, ответом ниже распишу     | |||
| 14
    
        hiwun 18.03.25✎ 11:25 | 
        Решение следующее $filter=Owner eq cast(guid'ae8d0dac-5a7c-11ed-88ce-d8bbc189bb8e', 'Catalog_Номенклатура')
 Решение заключается в том, что мы тип Owner (который в метадате строка, но по факту никто не знает что он такое) сравниваем с искомым элементов через функцию cast где берем guid искомого элемента и приводим его к целевой сущности 'Catalog_Номенклатура' После этой манипуляции запрос работает как надо, относительного нашего исходного запрос Исходный запрос: Получить все характеристики, которые есть у НОМЕНКЛАТУРЫ | |||
| 15
    
        dmt 18.03.25✎ 11:29 | 
        (14) ну т.е. все как написано в документации     | |||
| 16
    
        hiwun 18.03.25✎ 11:31 | 
        (15) Да, в путаницу вводит то, что в метадате тип поля обычный Edm.String, мы же разработчики прямолинейные, видим тип, знаем как работать
 И когда выходит такое что в метадате ты видишь два поля с одинаковым типом, но к одному применяются правила типа, а к другому нет, это сильно путает и никакая дока не поможет, только метод проб и ошибок | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |