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

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

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

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

Показать
По теме из базы знаний
Найденные решения
2. zarankony 304 10.09.19 17:14 Сейчас в теме
ГДЕ
Продажи.Номенклатура = &ВыбТовар ИЛИ &ВыбТовар = Значение(Справочник.Номенклатура.ПустаяСсылка)
request4t; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. zarankony 304 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 Сейчас в теме
Можно и в самом запросе условие через ВЫБОР сделать. А если редактировать текст запроса, то проще так:
Если НЕ ЗначениеЗаполнено(ВыбТовар) Тогда СтрЗаменить(ТекстЗапроса, "ГДЕ Продажи.Номенклатура = &ВыбТовар", "") КонецЕсли;
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)