Бывает, что при открытии формы отчета или обработки с динамическим списком, нам нужно установить отключаемый или необязательный параметр запроса.
Например, в нем есть условие.
ВЫБРАТЬ Док.Ссылка ИЗ Документы.Реализация КАК Док
ГДЕ Док.Организация = &Организация
Если это обязательный параметр, то все просто. Но если у пользователя есть возможность его не заполнять или отключать, то такой запрос выдаст пустой результат, а должен наоборот отключаться отбор и выводиться все подряд. Тогда приходится прибегать к некоторым хитростям.
Часто используют метод изменения самого текста запроса, просто вырезая из него участки с ненужными условиями.
Но это не наш метод. Мы будем использовать такую конструкцию:
ГДЕ (&ОтборПоОрганизации = ЛОЖЬ ИЛИ Док.Организация = &Организация)
Тогда в модуле формы в процедуре ПриОткрытии нам нужно установить параметр ОтборПоОрганизации
ОтборПоОрганизации = ЗначениеЗаполнено(Организация);
Запрос.УстановитьПараметр("ОтборПоОрганизации", ОтборПоОрганизации);
Такой же код будет и в процедуре ОрганизацияПриИзменении
При этом несмотря на то, что в условии запроса есть оператор ИЛИ, такое условие не приводит к замедлению запроса, индекс все равно используется.