Имя: Пароль:
1C
1С v8
В запросе выбрать всех
0 Zend
 
04.12.12
14:20
Вот допустим в запросе нужно вытащить записи с определённым Контрагентом.
Как написать условие в запросе, что если параметр будет пустой, то нужно вытаскивать всех контрагентов?

ГДЕ
   Документ.Контрагент = &Контрагент


Этот участок кода можно конечно прилеплять к тексту запроса, если Контраент определённый есть. Но как ни будь в запросе можно это указать?
1 PCcomCat
 
04.12.12
14:23
В ИЕРАРХИИ (&Контрагент)
2 Нуф-Нуф
 
04.12.12
14:28
мне одному в слове "выбрать всех" показалось?
3 mikecool
 
04.12.12
14:29
ГДЕ
   Документ.Контрагент = &Контрагент Или &Контрагент = Значение(Справочник.КОнтрагенты.ПустаяСсылка)
4 Heckfy
 
04.12.12
14:30
Можешь еще текст запроса динамически собрать.
5 Мыш
 
04.12.12
14:30
(0) ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ
Но параметр установить всё равно придется, даже и пустой. Иначе запрос не выполнится.
6 Нуф-Нуф
 
04.12.12
14:32
(1) садись, три
(2) садист, кол

ГДЕ
   &УсловиеПоКонтрагентам

Потом СтрЗаменить в зависимости от условия
7 Heckfy
 
04.12.12
14:33
(4) + Как то так:
   Если ЗначениеЗаполнено(Контрагент)=Истина Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |ГДЕ
       |    Документ.Контрагент = &Контрагент";
КонецЕсли;
8 Нуф-Нуф
 
04.12.12
14:33
(7) и прощай конструктор?
9 Heckfy
 
04.12.12
14:34
(8) Ага. :(
10 mikecool
 
04.12.12
14:34
мой вариант круче, вернее он не мой, мне его тоже подсказали
11 Heckfy
 
04.12.12
14:34
(8) Хотя, в этом случае скорее не прощай. :)
12 Maxus43
 
04.12.12
14:35
по феншую - (3)
13 kiruha
 
04.12.12
14:35
ВЫБОР КОГДА
&Контрагент = Значение(Справочник.КОнтрагенты.ПустаяСсылка)
ТОГДА Истина
ИНАЧЕ
Документ.Контрагент = &Контрагент
КОНЕЦ
14 Maxus43
 
04.12.12
14:36
(12) + точней чаще встречается
Документ.Контрагент = &Контрагент Или &ПоВсемКонтрагентам
15 _Demos_
 
04.12.12
14:36
(3) если это соединяемая таблица?
16 kiruha
 
04.12.12
14:42
(14) ?
Документ.Контрагент = &Контрагент Или &Контрагент = Значение(Справочник.КОнтрагенты.ПустаяСсылка)
17 Нуф-Нуф
 
04.12.12
14:43
ИЛИ в запросе - это западло
18 Нуф-Нуф
 
04.12.12
14:43
в условии ГДЕ
19 Maxus43
 
04.12.12
14:44
(16) я чаще видел условия (14) просто
20 kiruha
 
04.12.12
14:49
(17)
Большинство оптимизаторов БД правильно отрабатывают ИЛИ
не занаю как в файловом варианте 1С
21 Zend
 
04.12.12
15:47
Спасибо.
А как отрабатывать если булево сравнивается?
22 Fedot200
 
04.12.12
15:52
(13) для СКД самое то.
23 Zend
 
04.12.12
15:52
Ну вот тоже если оно истина, то отобрать все с истиным, а если ложь то вообще все.
И тоже в запросе, а не генерацией кода.
24 Fedot200
 
04.12.12
15:55
(23) не понял
25 kotletka
 
04.12.12
15:55
(22)если скд то условия никакого ненадо, потом в отбор запихнешь
26 Zend
 
04.12.12
16:06
(25) А как работать программно с этим параметром из отбора? Ну что бы на форму вывести в неупр.приложении?


(24) Ну вот если есть реквизит булевский. И нужно вывести или только те у которых он истина или вообще всех. Как вот это реализовать?
   ВЫБОР
           КОГДА &Параметр = ИСТИНА
               ТОГДА Документ.БулевскийРеквизит = &Параметр
       КОНЕЦ

Не работает:(
27 hhhh
 
04.12.12
16:37
(8) вот так можно

   Если ЗначениеЗаполнено(Контрагент)=Истина Тогда
       ТекстЗапроса=СтрЗаменить(ТекстЗапроса, "Документ.Контрагент = &Контрагент", " ИСТИНА ");
КонецЕсли;

и конструктор по-прежнему с нами.