Ламерский вопрос)

Что дописать в запросе, чтобы в него попали все товары, если ВыбТовар не заполнен?

```1c
    "ВЫБРАТЬ
    | Продажи.Номенклатура КАК Номенклатура,
    //| Продажи.Регистратор КАК Регистратор,
    | СУММА(Продажи.Сумма) КАК Сумма,
    | СУММА(Продажи.Себестоимость) КАК Себестоимость
    |ИЗ
    | РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    | Продажи.Номенклатура = &ВыбТовар
    |
    |СГРУППИРОВАТЬ ПО
    | Продажи.Номенклатура";
    //| Продажи.Регистратор";

    Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
```
---
ГДЕ
    Продажи.Номенклатура = &ВыбТовар ИЛИ &ВыбТовар = Значение(Справочник.Номенклатура.ПустаяСсылка)
---
ГДЕ
    Продажи.Номенклатура = &ВыбТовар ИЛИ &ВыбТовар = Значение(Справочник.Номенклатура.ПустаяСсылка)
---
хотел именно такое решение. спасибо)
---
```1c
    ...
    |ГДЕ
    | НЕ &ОтбиратьТовар ИЛИ Продажи.Номенклатура = &ВыбТовар
    ...

    Если ЗначениеЗаполнено(ВыбТовар) Тогда
    Запрос.УстановитьПараметр("ОтбиратьТовар", Истина);
    Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
    Иначе
    Запрос.УстановитьПараметр("ОтбиратьТовар", Ложь);
    Запрос.УстановитьПараметр("ВыбТовар", Null);
    КонецЕсли;
```
---
Лучше применить замену текста запроса

```1c
    Если ЗначениеЗаполнено(ВыбТовар) Тогда
    Запрос.Текст=" текст с условием ГДЕ ..."

    Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
    Иначе
    Запрос.Текст=" текст без ГДЕ ..."
    КонецЕсли;
```

так куда оптимальнее
---
да так по-любому оптимальнее
правда страдает читабельность, но для маленьких пактов этим можно пренебречь
---
спасибо за ответ. так я обычно и делаю. но всегда думал, что это не оптимальный вариант)
---
это самый оптимальный вариант- продолжайте делать по старому ;-)

Универсальность всегда менее предпочтительна чем специализированное средство.
Типа врач ЛОР быстрее и лучше вылечит ангину чем терапевт ( при прочих равных условиях...)
Применять универсальность не возбраняется, но обязательно нужно учитывать отрицательные последствия.
Для ИЛИ в условиях запросов - это всегда тормоза...
---
Единственная особенность - быстродействие такого запроса в РАЗЫ медленнее, чем более конкретного запроса где- либо в тексте есть условие либо его там нету
---
в моем варианте быстродействие не страдает вроде, на скуле. таблицы больше.
можете протестить, может я не прав.
---
В вашем варианте все те же грабли...
Вот я немного подправил - так идеально....
---
Хотя я пожалуй погорячился...
Быстродействие в вашем варианте будет нормальным, просто решение другое...
Можно просто добавлять в конце текста запроса текст условия при выборе ВыбТовар
---
У меня на больших регистрах разница доходила до десятков минут...
То есть без предлагаемого ИЛИ скажем 1 минуту, а с ИЛИ 15-20 минут
---
если быть совсем уж модным то согласно механизму представлений пишут так

```1c
    ТекстЗапроса =
    "ВЫБРАТЬ
    | Продажи.Номенклатура КАК Номенклатура,
    | СУММА(Продажи.Сумма) КАК Сумма,
    | СУММА(Продажи.Себестоимость) КАК Себестоимость
    |ИЗ
    | РегистрНакопления.Продажи КАК Продажи
    |ГДЕ &СтрокаУсловия
    |
    |СГРУППИРОВАТЬ ПО
    | Продажи.Номенклатура";

    ТекстЗапроса =
    СтрЗаменить(ТекстЗапроса, "&СтрокаУсловия", ?(ЗначениеЗаполнено(ВыбТовар),"Продажи.Номенклатура = &ВыбТовар","Истина"));

    Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
```
---
Можно и в самом запросе условие через ВЫБОР сделать. А если редактировать текст запроса, то проще так:
Если НЕ ЗначениеЗаполнено(ВыбТовар) Тогда СтрЗаменить(ТекстЗапроса, "ГДЕ Продажи.Номенклатура = &ВыбТовар", "") КонецЕсли;