Условие запроса по списку из ТЗ #326843


#0 by Kalen Towr
Нужно задать условие в запросе по вхождению в список. Только вот условие это не одно, и списки лежат в ТЗ. Этот код конечно же работать не будет:
#1 by Злой Бобр
вместо <> подставь нужное тебе
#2 by ВосточныйПарень
ТекстЗапроса = ТекстЗапроса + "Условие (" + СтрНЕ + "(ФА." + Реквизит + ".Получить(ДатаЗапроса) в тзОтбора.ПолучитьЗначение("+ Строка(Стр) +", ""Список"")));";
#3 by Kalen Towr
т.е. предлагаешь всё свалить в один список? Этих "<>" много. И для каждой "<>" свой список значений.
#4 by ВосточныйПарень
ты пробывал ?
#5 by Kalen Towr
Примерно так и сделал. Только вынес во внешнюю функцию. В результате не используются индексы :(
#6 by ВосточныйПарень
какие индексы?
#7 by Kalen Towr
Кто знает логику использования индексов запросами? в данном случае запрос по регистру.
#8 by Ёпрст
С массивом вполне покатит: ......
#9 by ВосточныйПарень
а в ТЗ можно затолкать по какому реквизиту отбор и оператор "НЕ"
#10 by Ёпрст
из одномерного масива можно легко сделать многомерный .. ЗЫ: И по ОЛЕ с ТЗ/СЗ никак не выйдет, если чего ....  :)
#11 by Kalen Towr
Еще раз. В запросе по регистру с условием отбора по конкретному значению измерения: время выполнения запроса по способу в : 300539 ms классический вариант типа Условие (Клиент в ВыбКлиент), где ВыбКлиент поле ввода на форме: 3318 ms Как победить?
#12 by Kalen Towr
тут в разделе "Использование граф отбора" все вроде написано однако все равно не понятно почему не является "элементарным". Чем оно принципиально отличается от Условие(Клиент = ВыбКлиент);
#13 by Kalen Towr
+ ..и как его сделать элементарным? неужели только через массив? :(
#14 by Злой Бобр
Ну дык при заполнении тФильтров формируй и сп1. Или заполняй только сп1, если тФильтров больше нигде неиспользуешь. Плюс проверяй сп1 на вложенность элементов, что б небыло в списке например в справочнике элементов и их родителей - это "тормозит" фильтр по списку.
#15 by Kalen Towr
насколько я понял, "В" никак не ускоряет перебор движений, в я написал неправильно. Должно быть "=".
#16 by Злой Бобр
"=" работает действительно быстрее чем "в" - сам понимаешь - там равенство одному значению, а там списку. Ты уж как-то определись что тебе нужно для условия - значение или список. А написал для списка. Если нужен список то ускориться можно только "прямым" запросом.
#17 by Kalen Towr
действительно я немного ушел от темы. Просто понял, что штатно со списком ловить нечего. Хочется простейшей на первый взгляд вещи, в случае когда в списке 1-но значение свести все к элементарному условию. А вот подиж ты, не работает :( 2 часа туплю
#18 by Ёпрст
Зато работает .
#19 by Kalen Towr
Вот так (конечно для 1-го условия) тоже работает (ВыбКлиент - поле ввода):
#20 by Злой Бобр
#21 by Kalen Towr
под "не работает" подразумеваю "работает медленно НЕ используя индекс"! <> = сп1.ПолучитьЗначение проверял на этот счет?
#22 by Kalen Towr
а работает даже если ВыбКлиент простая переменная :) зато Куда копать-то дальше???
#23 by Kalen Towr
Ну так как заставить запрос использовать индекс? Как ему "объяснить", что задаваемые условия "элементарны"?
#24 by Kalen Towr
ап
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С