Имя: Пароль:
1C
1С v8
Запросы 1С. Как при "Булево = Истина" убрать условия из запроса.
0 Demanufactyre
 
31.08.17
07:43
Привет друзья. Подскажите, как при неком условии сделать так, чтоб в запросе не учитывалась строчка "Условий"
Вот к примеру

Процедура
   Если Булево=Истина Тогда

"ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И СервисыКонтрагентов.Контрагент =&Контрагент <===== При Булево=Истина запрос не должен брать в расчет вот эту строчку====
";
1 1dvd
 
31.08.17
07:43
"ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И (СервисыКонтрагентов.Контрагент =&Контрагент ИЛИ Булево = Истина)
"
2 Demanufactyre
 
31.08.17
07:52
(1) Ошибка говорит. Что то не так делаю?
"ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И (СервисыКонтрагентов.Контрагент =&Контрагент ИЛИ "//Говорит вот тут ошибка синтаксическая ошибка" Булево = Истина)
"
3 1dvd
 
31.08.17
07:53
(2) подумать
4 breezee
 
31.08.17
07:53
(2)  |    И (СервисыКонтрагентов.Контрагент =&Контрагент ИЛИ &Булево = Истина)
5 France
 
31.08.17
07:53
и, программно формировать запрос, с заменой подстроки
6 VladZ
 
31.08.17
07:55
Можно использовать СтрЗаменить

Либо СтрЗаменить(Запрос.Текст,"И СервисыКонтрагентов.Контрагент =&Контрагент", "")

Либо делать так:

ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И 1 = 1

И менять "1 = 1" на "СервисыКонтрагентов.Контрагент =&Контрагент" в случае, если контрагент выбран.
7 crotnn
 
31.08.17
08:06
Еще вариант
|ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И ВЫБОР КОГДА Булево ТОГДА Истина ИНАЧЕ СервисыКонтрагентов.Контрагент =&Контрагент КОНЕЦ
8 Рэйв
 
31.08.17
08:12
Еще вариант

//-
ТекстЗ="ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2 ";
Если Булево Тогда
ТекстЗ=ТекстЗ+"
        |    И СервисыКонтрагентов.Контрагент =&Контрагент";
КонецЕсли;
9 Рэйв
 
31.08.17
08:12
Вернее
Если НЕ Булево Тогда
...
10 1dvd
 
31.08.17
08:14
ещё вариант (для самых недалёких):
Процедура
   Если Булево=Истина Тогда
      Запрос.Текст =
"ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2";
Иначе
      Запрос.Текст =
"ВЫБРАТЬ
        |    СервисыКонтрагентов.Контрагент,
        |    СервисыКонтрагентов.Период,
        |    СервисыКонтрагентов.Регистратор.Сотрудник
        |ИЗ
        |    РегистрСведений.СервисыКонтрагентов КАК СервисыКонтрагентов
        |ГДЕ
        |    СервисыКонтрагентов.Период МЕЖДУ &Период1 И &Период2
        |    И СервисыКонтрагентов.Контрагент =&Контрагент
";
11 France
 
31.08.17
08:15
а вот за " Булево=Истина", в общем то, нужно бить морду..
12 1dvd
 
31.08.17
08:15
(11) Отнюдь. Там может быть неопределено
13 Рэйв
 
31.08.17
08:16
(11)Согласен с (12).
Лучше перестраховаться. Были прецеденты
14 lEvGl
 
гуру
31.08.17
08:20
а что было в (1) и (4)?
(11)+1, какие там преценденты - если там написано Булево, значит там либо ложь либо истина, а если там может быть неопределено, значит это не булево
15 1dvd
 
31.08.17
08:21
(14) ну тогда надо бить за "Булево"

ахренительная информативность у переменной
16 lEvGl
 
гуру
31.08.17
08:22
сомневаюсь, что у него в модуле так и написано
17 1dvd
 
31.08.17
08:24
(16)
>>если там написано Булево....

>>сомневаюсь, что у него в модуле так и написано
18 Demanufactyre
 
31.08.17
08:27
(11) Извините. Я только учусь. Под словом "Булево" я подразумевал реквизит на форме(в модуле) под названием "Все". Не бейте ИЛИ ЕСЛИ бить=истина ТОГДА не по лицу.
19 France
 
31.08.17
08:28
иех, как тут не вспомнить старый добрый Pascal
20 France
 
31.08.17
08:28
(18) "Не бейте ИЛИ ЕСЛИ бить ТОГДА не по лицу."
21 FIXXXL
 
31.08.17
08:35
(18) учись не плодить без надобности галки
перед запросом проверь, указан ли контрагент, в запрос передай это параметром &КонтрагентУказан
сделай через ВЫБОР КОГДА &КонтрагентУказан ТОГДА СервисыКонтрагентов.Контрагент =&Контрагент ИНАЧЕ ИСТИНА
22 FIXXXL
 
31.08.17
08:36
(21)+ надеюсь не отчет рисуешь? :)
23 Рэйв
 
31.08.17
08:46
(14)Мало ли что там написано. Если это буелевный реквизит то да, = истина излишнею. А если это переменная, приходящая от куда-то параметром, то то что на ней написано совсем не означает что она 100% будет иметь тип булево.
24 lEvGl
 
гуру
31.08.17
08:51
я хз, может во мне на этом форуме телепат родился, но я сразу понял, что под "Булево" он имеет ввиду именно тип переменной, а не имя, первый вариант у меня был - что это галка на форме, а тут он написал "Булево" именно для того, что бы дать понять, какой там тип данных
25 lEvGl
 
гуру
31.08.17
08:53
и судя по (11) я не один такой
26 Demanufactyre
 
31.08.17
09:00
(22) Отчет=)
27 lEvGl
 
гуру
31.08.17
09:15
(26) там можно указывать список необязательных параметров через фигурные скобки в запросе, в конструкторе скд "Условия"...
а вобще Отбор решит все эти проблемы
28 FIXXXL
 
31.08.17
09:15
(26) ну тогда тебе вообще не это надо, а (27)
29 1dvd
 
31.08.17
09:17
Отчет - не обязательно СКД
30 YFedor
 
31.08.17
09:19
(21) + 1 сам так делаю
31 Demanufactyre
 
31.08.17
09:19
(28) У меня пока сложно с СКД. Я еще Язык Запросов Хрусталевой не дочитал. И на СКД я еще не разобрался как поле ввода на форме в 8.2 зацепить с СКД.
32 FIXXXL
 
31.08.17
09:22
(31) сунь свой запрос в СКД, через мастер настрой вывод таб.дока - профит!
33 lEvGl
 
гуру
31.08.17
09:25
(32) +1
+ из запроса условия можно убрать совсем, пользоваться Отбором(это в пользовательском режиме), вопрос то на 5 щелчков мыши
34 Eiffil123
 
31.08.17
09:25
Что за бред тут насоветовали. Вот когда текст запроса врезками правится - за это надо сжигать!

Надо в условии запроса примерно такое писать:
Выбор Когда &Булево Тогда
Истина
Иначе
СервисыКонтрагентов.Контрагент =&Контрагент
Конец
35 Demanufactyre
 
31.08.17
09:26
(32) У меня тут видимо что то с конфигурацией или с платформой. Настраивал поля, но форма выходит без полей.
36 lEvGl
 
гуру
31.08.17
09:27
(29) а должен быть обязательно СКД