Неверные параметры "ПОДОБНО", если передавать ПРЕДСТАВЛЕНИЕ ссылочного поля

1. native-api 08.11.23 17:35 Сейчас в теме
Поле ГруппаСредствИзмерений имеет ссылочный тип. Необходимо найти вхождения по подстроке его представления.
Запрос

ВЫБРАТЬ
	АккредитацияПоверкаКалибровкаИспытанияСИ.Ссылка КАК Ссылка,
	АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений КАК ГруппаСредствИзмерений
ИЗ
	Документ.Аккредитация.ПоверкаКалибровкаИспытанияСИ КАК АккредитацияПоверкаКалибровкаИспытанияСИ
ГДЕ
	ПРЕДСТАВЛЕНИЕ(АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений) ПОДОБНО "%" + &Наименование + "%"
Показать


выдает ошибку: Неверные параметры "ПОДОБНО"
<<?>>ПРЕДСТАВЛЕНИЕ(АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений) ПОДОБНО "%" + &Наименование + "%"


С просто "АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений" то же самое. Если я вместо "ПРЕДСТАВЛЕНИЕ(...)" передаю поле строкового типа, запрос работает.

Это недокументированное ограничение платформы? В Глава 8. Работа с запросами :: Руководство разработчика :: 1С:Предприятие 8.3.17. Документация не говорится, что левыи аргументом "ПОДОБНО" может быть только простое поле: там черным по белому написано, что допустимо любое выражение:


<Логическое выражение>

<Выражение> |
(<Выражение> | <Логическое выражение>) <Операция сравнения> (<Выражение> | <Логическое выражение>) |
<Выражение> [Не] В [ИЕРАРХИИ] (<Список значений>) |
<Выражение> [Не] В [ИЕРАРХИИ](<Описание запроса>) |
<Выражение> [Не] МЕЖДУ <Выражение> И <Выражение> |
<Выражение> ЕСТЬ [Не] NULL |
<Выражение> ССЫЛКА <Имя таблицы> |
<Выражение> [Не] ПОДОБНО <Литерал типа СТРОКА>
[СПЕЦСИМВОЛ <Литерал типа СТРОКА>]
Показать
По теме из базы знаний
Найденные решения
7. Said-We 09.11.23 11:20 Сейчас в теме
(2) Там слишком заумно написано.
Если коротко, то у каждого объекта есть представление. Есть представление по умолчанию, но оно может быть переопределено на языке 1С в модуле программистом 1С.

В запросе же, обращение к Представлению, это лишь указание на то, что Представление нужно будет получить после выполнения запроса. В том числе, возможно, выполняя процедурный код на языке 1С (если Представление переопределено).

Строка значения Представления по факту формируется уже после исполнения запроса, поэтому на момент выполнения запроса и нет никого значения и нельзя его к чему-то преобразовать. Его просто нет.
native-api; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. polax 08.11.23 20:21 Сейчас в теме
(1) Почему недокументировано? Вполне документировано
Поле Представление
Каждая объектная таблица в информационной базе имеет виртуальное поле - "Представление". Это поле содержит текстовое представление объекта. В запросе возможно получать данное поле точно также как и другие поля таблиц, однако никакие операции с данным полем выполнять нельзя. Данная особенность связана с тем, что это поле является виртуальным, и, на самом деле, при получении данного поля из базы данных, запрос получает несколько полей, а при получении значения поля из результата запроса преобразовывает полученные значения в строку. Таким образом, единственное, что можно сделать с полем "Представление", это получить его в результат запроса.

ИТС ссылка https://its.1c.ru/db/metod8dev/content/2655/hdoc

И что мешает взять Наименование? К примеру:
АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.Наименование

Ну и последнее. Учебники рекомендуют не использовать конструкцию "%" + &Наименование + "%" Проще и правильней - &Наименование, а уже в установке параметра указывать значение параметра типа: "%РеальноеИмя%"
Sashares; native-api; +2 Ответить
3. native-api 09.11.23 10:29 Сейчас в теме
(2) С ".Представление" тоже не работает: {(1, 1)}: Неверные параметры "ПОДОБНО"
<<?>>АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.Представление
ПОДОБНО &Представпение


С ".Наименование" сработало (точнее, в моем конкретном случае его роль играет поле "НаименованиеГруппы"):

ГДЕ
	АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.НаименованиеГруппы ПОДОБНО &ШаблонПредставления


---

Под "недокументированным ограничением" я понимаю тот факт, что на поверку слева от "ПОДОБНО" можно использовать только имя поля, и то только определенного (строковое и невиртуальное). Тогда как спецификация (цитата в (1)) говорит, что допустимо произвольное выражение.
4. polax 09.11.23 11:03 Сейчас в теме
(3)
С "АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.Представление
А почему вот эта глупость ответ мне? такого точно не предлагал
5. native-api 09.11.23 11:11 Сейчас в теме
(4)
С "АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.Представление
А почему вот эта глупость ответ мне? такого точно не предлагал


Тогда я не понимаю, что вы предлагали.
Изначально у меня было ПРЕДСТАВЛЕНИЕ(АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений). Вы предложили вместо вызова функции ПРЕДСТАВЛЕНИЕ() использовать виртуальное поле .Представление (и оно действительно есть в конструкторе запросов). Что я и проделал...
6. Sashares 34 09.11.23 11:19 Сейчас в теме
(5)
Тогда я не понимаю, что вы предлагали.

Действительно, сложно...=))
Прикрепленные файлы:
7. Said-We 09.11.23 11:20 Сейчас в теме
(2) Там слишком заумно написано.
Если коротко, то у каждого объекта есть представление. Есть представление по умолчанию, но оно может быть переопределено на языке 1С в модуле программистом 1С.

В запросе же, обращение к Представлению, это лишь указание на то, что Представление нужно будет получить после выполнения запроса. В том числе, возможно, выполняя процедурный код на языке 1С (если Представление переопределено).

Строка значения Представления по факту формируется уже после исполнения запроса, поэтому на момент выполнения запроса и нет никого значения и нельзя его к чему-то преобразовать. Его просто нет.
native-api; +1 Ответить
8. native-api 09.11.23 11:42 Сейчас в теме
(7) Спасибо, наконец-то кто-то четко объяснил, что, как и почему происходит!

Написано не "заумно", а просто неверно (8.4.16.4. Встроенные функции языка запросов):


Функция ПРЕДСТАВЛЕНИЕ

Описание:

Данная функция предназначена для получения строкового представления значения произвольного типа.

Параметр функции ‑ выражение любого типа.

Возвращаемое значение ‑ представление значения, тип Строка.

Результат работы функции не может быть использован внутри других функций, за исключением функции ПРЕДСТАВЛЕНИЕ.


Ну так ПОДОБНО -- это не функция, а оператор (и операторы в запросах -- не эквивалент функций, т.к. синтаксически они не взаимозаменяемы). Если ограничение касается любых действий, не только вызовов функций, следовало употребить термин, который не задействован уже для чего-то другого -- например, "в любых других операциях" или "для любых дальнейших действий".
9. polax 09.11.23 15:41 Сейчас в теме
(5) Наименование в вашем понимании - это Представление? Я не знал. Написал четко - указать наименование ни о каком представлении речи не было
цитата
И что мешает взять Наименование? К примеру:
АккредитацияПоверкаКалибровкаИспытанияСИ.ГруппаСредствИзмерений.Наименование

Где здесь Представление?
10. native-api 09.11.23 16:35 Сейчас в теме
(9) Я понял, что вы предлагали попробовать и то, и то. Что я и сделал. И написал, что с Наименованием сработало (и поставил за это плюсик).

Если вы не предлагали попробовать поле Представление -- непонятно, зачем вы про него написали: я в (1) использовал не поле, а функцию.

Да, теперь я прочел, что они в данном случае выдают один и тот же результат. Но это совсем не очевидно. Как и автоматический переход ограничений с одного на другое -- тоже совсем не сам собой разумеющийся факт (т.к. технически и то, и то реализовать можно как угодно). В приведенной цитате говорится, что "никакие действия делать нельзя", но не объясняется, почему (то, что это -- вычисляемое поле -- ни разу не причина), в обтекаемых выражениях, и она находится в каком-то постороннем документе, а не 8. Работа с запросами, которая претендует на полную документацию языка запросов.

Т.е. объяснить вы объяснили, но совсем не четко и не понятно. Я не понял.
11. spacecraft 09.11.23 17:40 Сейчас в теме
(10) одной книжкой не обойтись, даже если это документация.
Нужно по возможности искать и другие официальные (и не только) источники.
В приведенной цитате четко описан механизм получения представления. Строка Представление получается не в самом запросе, а уже в результате запроса. Когда данные уже получены. В следствии этого и невозможно использовать Представление как аргумент внутри запроса.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот