1. request4t 10.09.19 17:11 Сейчас в теме

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

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

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

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

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

Если ЗначениеЗаполнено(ВыбТовар) Тогда
     Запрос.УстановитьПараметр("ОтбиратьТовар", Истина);
     Запрос.УстановитьПараметр("ВыбТовар", ВыбТовар);
Иначе
     Запрос.УстановитьПараметр("ОтбиратьТовар", Ложь);
     Запрос.УстановитьПараметр("ВыбТовар", Null);
КонецЕсли;
Показать
7. user614822 29 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. user614822 29 11.09.19 09:52 Сейчас в теме
(13) это самый оптимальный вариант- продолжайте делать по старому ;-)

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

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

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

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

Вакансии

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


Программисты 1С УТ / БУЗ/ЗУП / БИТ ФИНАНС
Москва
зарплата от 100 000 руб. до 180 000 руб.
Полный день

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

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству