Выбрать запросом все или по значению реквизита

1. request4t 10.09.19 17:11 Сейчас в теме
Ламерский вопрос)

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

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

Показать
По теме из базы знаний
Найденные решения
2. zarankony 305 10.09.19 17:14 Сейчас в теме
ГДЕ
Продажи.Номенклатура = &ВыбТовар ИЛИ &ВыбТовар = Значение(Справочник.Номенклатура.ПустаяСсылка)
request4t; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zarankony 305 10.09.19 17:14 Сейчас в теме
ГДЕ
Продажи.Номенклатура = &ВыбТовар ИЛИ &ВыбТовар = Значение(Справочник.Номенклатура.ПустаяСсылка)
request4t; +1 Ответить
14. request4t 10.09.19 19:00 Сейчас в теме
(2)
хотел именно такое решение. спасибо)
3. VmvLer 10.09.19 17:17 Сейчас в теме
...
|ГДЕ
    |    НЕ  &ОтбиратьТовар ИЛИ Продажи.Номенклатура = &ВыбТовар
...

Если ЗначениеЗаполнено(ВыбТовар) Тогда
     Запрос.УстановитьПараметр("ОтбиратьТовар", Истина);
     Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
Иначе
     Запрос.УстановитьПараметр("ОтбиратьТовар", Ложь);
     Запрос.УстановитьПараметр("ВыбТовар", Null);
КонецЕсли;
Показать
7. YannikAlx 43 10.09.19 17:24 Сейчас в теме
(3) Лучше применить замену текста запроса
Если ЗначениеЗаполнено(ВыбТовар) Тогда
Запрос.Текст="   текст с условием ГДЕ ..."

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


так куда оптимальнее
request4t; +1 Ответить
10. VmvLer 10.09.19 17:33 Сейчас в теме
(7) да так по-любому оптимальнее
правда страдает читабельность, но для маленьких пактов этим можно пренебречь
13. request4t 10.09.19 18:56 Сейчас в теме
(7)
спасибо за ответ. так я обычно и делаю. но всегда думал, что это не оптимальный вариант)
15. YannikAlx 43 11.09.19 09:52 Сейчас в теме
(13) это самый оптимальный вариант- продолжайте делать по старому ;-)

Универсальность всегда менее предпочтительна чем специализированное средство.
Типа врач ЛОР быстрее и лучше вылечит ангину чем терапевт ( при прочих равных условиях...)
Применять универсальность не возбраняется, но обязательно нужно учитывать отрицательные последствия.
Для ИЛИ в условиях запросов - это всегда тормоза...
4. YannikAlx 43 10.09.19 17:18 Сейчас в теме
Единственная особенность - быстродействие такого запроса в РАЗЫ медленнее, чем более конкретного запроса где- либо в тексте есть условие либо его там нету
6. VmvLer 10.09.19 17:22 Сейчас в теме
(4) в моем варианте быстродействие не страдает вроде, на скуле. таблицы больше.
можете протестить, может я не прав.
8. YannikAlx 43 10.09.19 17:25 Сейчас в теме
(6) В вашем варианте все те же грабли...
Вот я немного подправил - так идеально....
9. YannikAlx 43 10.09.19 17:31 Сейчас в теме
(6) Хотя я пожалуй погорячился...
Быстродействие в вашем варианте будет нормальным, просто решение другое...
Можно просто добавлять в конце текста запроса текст условия при выборе ВыбТовар
5. YannikAlx 43 10.09.19 17:19 Сейчас в теме
У меня на больших регистрах разница доходила до десятков минут...
То есть без предлагаемого ИЛИ скажем 1 минуту, а с ИЛИ 15-20 минут
11. VmvLer 10.09.19 17:39 Сейчас в теме
если быть совсем уж модным то согласно механизму представлений пишут так

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

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот