Имя: Пароль:
1C
1С v8
помогите плиз с ПОДОБНО и %% в запросе
,
0 I_learn_1c
 
20.10.22
17:59
всем доброго времени суток)

есть небольшой тупик, прошу помощи)

у меня есть временная таблица, в которой список заказов (ссылки на документы).
и есть строка с описанием платежа типа "это платеж к заказу МТ-000001 за трубы".
нужно из списка заказов выбрать заказ МТ-000001 и вернуть на него ссылку, остальные отсеять.

по логике напрашивается что-то типа
ВЫБРАТЬ
ВТ_Заказы.ЗаказСсылка
ИЗ ВТ_Заказы КАК ВТ_Заказы
ГДЕ
&ОписаниеПлатежа ПОДОБНО "%"+ВТ_Заказы.ЗаказСсылка.Номер+"%"

Запрос.УстановитьПараметр("ОписаниеПлатежа", "это платеж к заказу МТ-000001 за трубы");

но это не работает.
и на ИТС пишут что так делать нельзя (https://its.1c.ru/db/v8std/content/726/hdoc)
мол допустимо использовать только константные строковые литералы или параметры запроса. Запрещается формировать строку шаблона при помощи вычислений, использовать конкатенацию строк средствами языка запросов.

как обойти проблему? только выгружать и проверять таблицу в цикле?
1 Волшебник
 
модератор
20.10.22
18:09
ГДЕ ВТ_Заказы.ЗаказСсылка.Номер ПОДОБНО "%&ОписаниеПлатежа%"

Запрос.Текст = СтрЗаменить(Запрос.Текст, "%&ОписаниеПлатежа%", "%" + "это платеж к заказу МТ-000001 за трубы" + "%"

Но тормозить будет адски
2 mistеr
 
20.10.22
18:09
(0) Я бы это кодом делал, не запросом. Ну или сначала выделить номер из описания, а потом

ГДЕ Номер = &Номер
3 alarm2020
 
20.10.22
18:22
(1)
Не будет работать
МТ-000001 не подобно "%это платеж к заказу МТ-000001 за трубы%"
только наоборот
"это платеж к заказу МТ-000001 за трубы" подобно %МТ-000001%
4 RomanYS
 
20.10.22
18:28
(1) так с параметром нет проблем. Проблема якобы с правой частью где выражение  "%"+ВТ_Заказы.ЗаказСсылка.Номер+"%".
На своем опыте могу сказать, что проблем с такими конструкциями не было. Но я например никогда не работал c PG или специфическими СУБД
5 I_learn_1c
 
20.10.22
18:29
(1) по смыслу не то. надо проверить содержится ли в описании платежа номер, (3) верно заметил
6 I_learn_1c
 
20.10.22
18:33
(4) не работает это... ошибки нет, но возвращает все время ЛОЖЬ, поэтому все заказы не проходят отбор, в том числе и нужный МТ-000001.
а смысл условия как раз в том, чтоб МТ-000001 оставить, а остальные отсеять.
7 Волшебник
 
модератор
20.10.22
18:35
(3) (5) Ну поменяйте местами
8 I_learn_1c
 
20.10.22
18:37
(7) в том и прикол что &ОписаниеПлатежа ПОДОБНО "%"+ВТ_Заказы.ЗаказСсылка.Номер+"%" не работает
9 RomanYS
 
20.10.22
19:04
(6) именно, что конструкции работали как ожидаешь, даже в соединениях (это не рекомендация).

Проверь номер, возможно лишние символы, префиксы и т.п.
10 rudnitskij
 
21.10.22
00:00
&ОписаниеПлатежа ПОДОБНО "%"+ВТ_Заказы.ЗаказСсылка.Номер+"%"

Запрос.УстановитьПараметр("ОписаниеПлатежа", "это платеж к заказу МТ-000001 за трубы");
---------------------
еще эта фигня может не работать когда в одном месте МТ русские буквы, а в другом английские.
А еще она может не работать когда номер заканчивается в документе пробелом или двумя (например, в свойствах длина номера заказа 11 знаков, а в МТ-000001 их 9)