Всем привет! Не могу сообразить, как проще сделать такой запрос:
Имеется 6 параметров. Если все пустые, то отбор не ведется, должно выводиться все. Если задаю параметр, то отбор по этому параметру, а остальные должны выводиться все. Если задаю два и более параметра, то отбор по ним, остальные должны выводиться все. Как такое сделать?
Сделал такое:

```1c
    "ВЫБРАТЬ
    | ВЫБОР
    | КОГДА &Работа = ЗНАЧЕНИЕ(Справочник.Работы.ПустаяСсылка)
    | ТОГДА ИсторияРасценок.Работа
    | ИНАЧЕ &Работа
    | КОНЕЦ КАК Поле1,
    | ВЫБОР
    | КОГДА &Груз = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    | ТОГДА ИсторияРасценок.Груз
    | ИНАЧЕ &Груз
    | КОНЕЦ КАК Поле2,
    | ВЫБОР
    | КОГДА &Объект = НЕОПРЕДЕЛЕНО
    | ТОГДА ИсторияРасценок.Объект
    | ИНАЧЕ &Объект
    | КОНЕЦ КАК Поле3,
    | ВЫБОР
    | КОГДА &Инструмент = НЕОПРЕДЕЛЕНО
    | ТОГДА ИсторияРасценок.Инструмент
    | ИНАЧЕ &Инструмент
    | КОНЕЦ КАК Поле4,
    | ВЫБОР
    | КОГДА &Субъект = НЕОПРЕДЕЛЕНО
    | ТОГДА ИсторияРасценок.Субъект
    | ИНАЧЕ &Субъект
    | КОНЕЦ КАК Поле5,
    | ВЫБОР
    | КОГДА &ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.КлассификаторЕдиницИзмерения.ПустаяСсылка)
    | ТОГДА ИсторияРасценок.ЕдиницаИзмерения
    | ИНАЧЕ &ЕдиницаИзмерения
    | КОНЕЦ КАК Поле6,
    | ИсторияРасценок.Цена КАК Расценка
    |ИЗ
    | РегистрСведений.ИсторияРасценок КАК ИсторияРасценок";
    Запрос.УстановитьПараметр("Работа", Работа);
    Запрос.УстановитьПараметр("Груз", Груз);
    Запрос.УстановитьПараметр("Объект", ОбъектРаботы);
    Запрос.УстановитьПараметр("Инструмент", Инструмент);
    Запрос.УстановитьПараметр("ИнструментВидТехники", ?(ТипЗнч(Инструмент) = Тип("СправочникСсылка.ТранспортныеСредства"), Инструмент.ВидТехники, Инструмент));
    Запрос.УстановитьПараметр("Субъект", Субъект);
    Запрос.УстановитьПараметр("ЕдиницаИзмерения", ЕдиницаИзмерения);
```
---
```1c
    Где
    Выбор Когда &ПервоеПоле = ПустоеПоле1 Тогда ИСТИНА Иначе Таблица.ПервоеПоле = &ПервоеПоле Конец
    И
    Выбор Когда &ВтороеПоле = ПустоеПоле2 Тогда ИСТИНА Иначе Таблица.ВтороеПоле = &ВтороеПоле Конец
```
---
Не вижу в запросе отборов. От слова совсем (Где)
---
Если я задам ГДЕ, то будет отбирать и по пустым параметрам. А мне нужно, чтобы пустые параметры пропускались в отборе.
---
Это смотря как условие написать.
---
Пробовал использовать в ГДЕ конструкцию ...ВЫБОР КОГДА ТОГДА... ничего не вышло.
---
в (8) ответ
---
```1c
    КОГДА &Груз = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    ТОГДА ИСТИНА
    ИНАЧЕ ИсторияРасценок.Груз = &Груз
    КОНЕЦ
```

а вообще вы где этот запрос используете? если будет компоновка, то там можно с её помощью решить этот вопрос.
---
Не совсем то, что я ожидаю:
(первая картинка из вложения)
Я этот запрос использую в обработке, которая должна получить находящиеся в регистре сведений цены с отбором по 6 ресурсам.
(вторая картинка из вложения)
---
```1c
    Где
    Выбор Когда &ПервоеПоле = ПустоеПоле1 Тогда ИСТИНА Иначе Таблица.ПервоеПоле = &ПервоеПоле Конец
    И
    Выбор Когда &ВтороеПоле = ПустоеПоле2 Тогда ИСТИНА Иначе Таблица.ВтороеПоле = &ВтороеПоле Конец
```
---
Так получилось, спасибо!
---
Запрос выглядит так:

```1c
    "ВЫБРАТЬ
    | ИсторияРасценок.Регистратор КАК Регистратор,
    | ИсторияРасценок.Период КАК Период,
    | ИсторияРасценок.Работа КАК Работа,
    | ИсторияРасценок.Груз КАК Груз,
    | ИсторияРасценок.Объект КАК Объект,
    | ИсторияРасценок.Инструмент КАК Инструмент,
    | ИсторияРасценок.Субъект КАК Субъект,
    | ИсторияРасценок.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | ИсторияРасценок.Цена КАК Цена
    |ИЗ
    | РегистрСведений.ИсторияРасценок КАК ИсторияРасценок
    |ГДЕ
    | ВЫБОР
    | КОГДА &Работа = ЗНАЧЕНИЕ(Справочник.Работы.ПустаяСсылка)
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.Работа = &Работа
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА &Груз = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.Груз = &Груз
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА &Объект = НЕОПРЕДЕЛЕНО
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.Объект = &Объект
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА &Инструмент = НЕОПРЕДЕЛЕНО
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.Инструмент = &Инструмент
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА &Субъект = НЕОПРЕДЕЛЕНО
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.Субъект = &Субъект
    | КОНЕЦ
    | И ВЫБОР
    | КОГДА &ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.КлассификаторЕдиницИзмерения.ПустаяСсылка)
    | ТОГДА ИСТИНА
    | ИНАЧЕ ИсторияРасценок.ЕдиницаИзмерения = &ЕдиницаИзмерения
    | КОНЕЦ";

    Запрос.УстановитьПараметр("Работа", Работа);
    Запрос.УстановитьПараметр("Груз", Груз);
    Запрос.УстановитьПараметр("Объект", ОбъектРаботы);
    Запрос.УстановитьПараметр("Инструмент", Инструмент);
    Запрос.УстановитьПараметр("ИнструментВидТехники", ?(ТипЗнч(Инструмент) = Тип("СправочникСсылка.ТранспортныеСредства"), Инструмент.ВидТехники, Инструмент));
    Запрос.УстановитьПараметр("Субъект", Субъект);
    Запрос.УстановитьПараметр("ЕдиницаИзмерения", ЕдиницаИзмерения);
```
---
Еще можно так:

```1c
    |ГДЕ
    | &Работа В (ЗНАЧЕНИЕ(Справочник.Работы.ПустаяСсылка), ИсторияРасценок.Работа)
    | И &Груз В (ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка), ИсторияРасценок.Груз)
```
---
О, спасибо, так короче
---
а если использовать условия в построителе запросов (компоновка данных)?
---
Это у меня обработка. Если бы в построителе, то было бы все просто.
---
Построитель запроса
---
И кто сказал, что компоновку нельзя использовать в обработках?
---
Конструктор запросов - вкладка Построитель - вкладка Условия
---
Может чего-то не понимаю, но проще руками написать, там что-то совсем ничего не подбирается, только справочник встроенного языка.
---
можно добавить произвольное условие по "+", подбирать не обязательно