Arbuz писал(а) 19. Декабря 2019 :: 13:50:Добавлено: упс! это тоже неправильно - надо либо тогда INNER JOIN вместо LEFT либо условие из ON - AND UPPER(left($Номенклатура.ПолнНаименование,254)) LIKE (:СтрокаПоиска) - перенести в блок WHERE, как и было, только там изначально было пропущено AND
Да, так правильно. Либо так, либо сяк.
Но нужно учесть что :СтрокаПоиска видимо (с mssql проверить не могу) возможно должна быть ограничена с обоих сторон одинарной кавычкой и знаком %.
Для mssql есть ПодготовленныйЗапрос и установка некоторых параметров на ходу? Не в курсе, должно наверное быть...
У меня на 1sqlite вот так
LEFT JOIN ()
...
WHERE
CASE WHEN @Наименование='*' THEN 1 ELSE Т.Наименование LIKE @Наименование END
@Наименование='*' устанавливаем сразу при установки в ТП.
А в ТП в ПриБыстромПоиске
Поиск="%"+СтрЗаменить(СокрЛП(Данные)," ","%")+"%";
Шустро, и не нужно запоминать или вводить %, просто считаем что пробел это любые символы. Юзверям такое понять и запомнить значительно проще
Ну и при ESC сбрасываем @Наименование на '*'.
И ESC, блокируем в
Процедура тпОстатки_ПриНажатииКлавиши(тп,ВиртКод, Данные,
Клавиатура, ФСО)
Если ВиртКод=27 Тогда // ESC
ФСО=0;
тп.ТекущаяКолонка.Параметр = "*";
тп.ТекущаяКолонка.Заголовок="Товар";
тп.ТекущаяКолонка.ШрифтЗаголовка=ШрифтТекста;
тп.ПоставщикДанных.УстановитьПараметр("@Наименование","*");
тп.ПоставщикДанных.Перечитать();
Иначе
P.S. Микросекунды (а может и нет) на подготовку запроса могут быть важны.