Имя: Пароль:
1C
1С v8
Условия в запросе
,
0 only82
 
02.09.11
20:08
Есть запрос с условием Поле1=&Параметр1. Как поставить условие чтобы отбирало все записи, если Параметр1 не указан?
1 PR
 
02.09.11
20:10
Никак. Запрос ругнется.
2 only82
 
02.09.11
20:12
(1) Почему никак? Я могу проверить на форме заполнение параметра и если он указан то добавить условие в Запрос.Текст, а если не указан - то не добавлять.
3 only82
 
02.09.11
20:13
(2) Но, я думаю есть стандартное решение задачи
4 END
 
02.09.11
20:14
Какого типа параметр?
5 PR
 
02.09.11
20:15
(2) Если так, то "Поле1=&Параметр1 ИЛИ &Параметр1 = 75378"
6 only82
 
02.09.11
20:15
(4) СправочинкСсылка
7 PR
 
02.09.11
20:16
(6) Если так, то "Поле1=&Параметр1 ИЛИ &Параметр1 = Неопределено"
8 END
 
02.09.11
20:17
ВЫБОР КОГДА &Параметр1 ССЫЛКА СправочникСсылка ТОГДА
Поле1=&Параметр1
ИНАЧЕ
ИСТИНА
КОНЕЦ
9 cViper
 
02.09.11
20:17
(0) Ты имеешь ввиду, если не инициализирован параметр?
10 Икогнито
 
02.09.11
20:17
Если НЕ Условие Тогда
ТекстЗАпроса = ТекстЗапросаБаза + ТекстУсловия
Иначе
ТекстЗАпроса = ТекстЗапросаБаза
КонецЕсли
11 only82
 
02.09.11
20:18
(7) Надо попробовать. Хотя я думаю работать не будет
12 PR
 
02.09.11
20:18
(8) Вариант в (7) может быть оптимизирован компилятором 1С, вариант в (8) нет.
13 Икогнито
 
02.09.11
20:18
(8) И нафига запросу по каждой записи молотить условие выбора?
14 PR
 
02.09.11
20:19
(11) Если не будет, значит ты неправильно написал входные условия.
15 truba
 
02.09.11
20:19
КОГДА Поле1 = &Параметр1 ИЛИ &фл_НеОтбирать
а флаг поднимай какой хочешь при любых условиях. Так взлетит?
16 only82
 
02.09.11
20:20
(15) Вот это похоже на правду
17 only82
 
02.09.11
20:21
(15) а без флага никак нельзя?
18 Икогнито
 
02.09.11
20:21
(11) Условие конкатенации в запросах не работает.
19 PR
 
02.09.11
20:22
(16) LOL
20 Икогнито
 
02.09.11
20:22
(15) запрос будет проверять оба условия.
21 Икогнито
 
02.09.11
20:24
Как это умное слово называется, когда в случае, если результат первой половины условия = Истина Тогда вторая часть после ИЛИ  не проверяется?
22 shuhard
 
02.09.11
20:27
(21) бланкированный
23 Икогнито
 
02.09.11
20:28
(22) сам  такой
24 only82
 
02.09.11
20:30
Вариант (10) подходит только для текста модуля, а я хочу через схему компоновки данных
25 shuhard
 
02.09.11
20:32
(24)  пипец
в {} окайми в ГДЕ
26 Икогнито
 
02.09.11
20:32
(22) глупый, это называется "сокращенное вычисление логических выражений".

Митичкин так написал.
27 only82
 
02.09.11
20:33
(25) а пример?
28 Икогнито
 
02.09.11
20:33
(24) бугагашечки, а текст запроса из кода макету компоновки данных установить слабо?
29 only82
 
02.09.11
20:34
(28) я так еще не умею
30 shuhard
 
02.09.11
20:34
(27) примеры в поиске по мисте
31 Lenka_Boo
 
02.09.11
20:35
Null ?
32 only82
 
02.09.11
20:36
(31) у меня значение параметра не Null, а Справочники.Справочник1.ПустаяСсылка
33 Alexandr Puzakov
 
02.09.11
20:36
Если ЗначениеЗаполнено(Переменная) Тогда
    Запрос.УстановитьПараметр("Параметр", Переменная);
Иначе
    СтрЗаменить(ТекстЗапроса, "Поле1 = &Параметр", "");

А в СКД просто фигач в фигурные скобки

{Поле1 = &Параметр}
34 only82
 
02.09.11
20:37
(33) Спс
35 END
 
02.09.11
20:38
Поправка к (8)
ВЫБОР КОГДА &Параметр1 = ЗНАЧЕНИЕ(Справочник.ТвойСправочник.ПустаяСсылка) ТОГДА
ИСТИНА
ИНАЧЕ
Поле1=&Параметр1
КОНЕЦ
36 shuhard
 
02.09.11
20:39
(35) в СКД это не нужно
37 Alexandr Puzakov
 
02.09.11
20:40
Вернее, если передаешь в параметр виртуальной таблицы, то

{Поле1 = &Параметр}

Если же это простое условие отбора, то

{ГДЕ Поле1 = &Параметр}
38 only82
 
02.09.11
20:40
(35) так тоже взлетит, но {} мне нравится больше