Имя: Пароль:
1C
1С v8
Отбор в запросе по полю
0 ultrannge89
 
08.07.13
10:31
Наверное не раз обсуждало, но все же задам.
Имеется запрос, результат которого надо вывести в табличную часть. Нужно сделать отбор для запроса, желательно на уровне самого запроса. Чтобы в случае если поле не заполнено выдавался результат без отбора, а если поле заполнено по нему.

Запрос имеет вид.

Запрос.Текст ="ВЫБРАТЬ
                 |    Ю_Лимиты.Сотрудник,
                 |    Ю_Лимиты.ВидЛимита,
                 |    Ю_Лимиты.Сумма,
                 |    Ю_Лимиты.Регистратор.Ссылка КАК Документ
                 |ИЗ
                 |    РегистрСведений.Ю_Лимиты КАК Ю_Лимиты
                 |ГДЕ
                 |    Ю_Лимиты.Период = &Период              
                 |    И Ю_Лимиты.ВидЛимита = &ОтборЛимита";
1 ale-sarin
 
08.07.13
10:33
Верно - "не раз обсуждало". И все равно лень искать, да?
2 Cube
 
08.07.13
10:33
Выбор Когда тебе в помощь
3 Галахад
 
гуру
08.07.13
10:33
И
(Ю_Лимиты.ВидЛимита = &ОтборЛимита или &ОтборПоЛимитуНЕзаполенен)
4 andreymongol82
 
08.07.13
10:35
В текст запроса вместо
"|    И Ю_Лимиты.ВидЛимита = &ОтборЛимита"
Добавить что-то вроде
|    И %ДопУсловие%
Потом в коде уже, если реквизит заполнен, то
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%ДопУсловие%","ИСТИНА"),
Если заполнен, то тогда стрзаменить(ТекстЗапроса,"%ДопУсловие%","Ю_Лимиты.ВидЛимита = &ОтборЛимита")
5 Cube
 
08.07.13
10:40
(4) %ДопУсловие% вообще там лишнее...
6 chelentano
 
08.07.13
10:44
(0) построитель запроса чем не устраивает?
7 andreymongol82
 
08.07.13
11:09
(5) Именно в этом лишнее, да. А так, если возникнет куча других запросов, соединений, то может пригодиться.
8 ultrannge89
 
08.07.13
12:33
А вот так может проканать?
ТекДата = ТекущаяДата();
Запрос = Новый Запрос;


ДопУсловие = "";
Если ЗначениеЗаполнено(ВидЛимита) Тогда
   ДопУсловие = "И Ю_Лимиты.ВидЛимита = &ОтборЛимита";
   Запрос.УстановитьПараметр("ОтборЛимита", ВидЛимита);
КонецЕсли;



ДопУсловие1 = "";
Если ЗначениеЗаполнено(СрезДаты) Тогда
   ДопУсловие1 = "Ю_Лимиты.Период =  &Период";
   Запрос.УстановитьПараметр("Период", СрезДаты);
Иначе
   ДопУсловие1 = "Ю_Лимиты.Период =  &Период";
   Запрос.УстановитьПараметр("Период", ТекДата);
КонецЕсли;

   
Запрос.Текст ="ВЫБРАТЬ
             |    Ю_Лимиты.Сотрудник,
             |    Ю_Лимиты.ВидЛимита,
             |    Ю_Лимиты.Сумма,
             |    Ю_Лимиты.Регистратор.Ссылка КАК Документ
             |ИЗ
             |    РегистрСведений.Ю_Лимиты КАК Ю_Лимиты
             |ГДЕ "+ДопУсловие1 +ДопУсловие;
9 Cube
 
09.07.13
05:11
(8) Не занимайся ерундой, используй (2) или (3).
Закон Брукера: Даже маленькая практика стоит большой теории.