Имя: Пароль:
1C
1С v8
как сделать в запросе одну штуку...
0 Простенький вопросик
 
05.09.11
08:12
Вопрос, как сделать, чтобы в запросе учитывалось или не учитывалось условие, в зависимости от заполнение на форме. Конкретнее есть запрос

       Запрос.Текст =    
   
   "ВЫБРАТЬ
   |    ПриходныйКассовыйОрдер.Ссылка,
   |    ПриходныйКассовыйОрдер.СуммаДокумента
   |ИЗ
   |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
   |ГДЕ
   |    ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
   |    И ПриходныйКассовыйОрдер.Дата < &НачПериода
   |    И ПриходныйКассовыйОрдер.Касса = &касса"

        ;    

что надо сделать, чтобы если на форме касса не указана, это условие не учитывалось
1 YHVVH
 
05.09.11
08:13
Если тогда....
2 Fragster
 
гуру
05.09.11
08:14
начать уже изучать построитель и СКД
3 ParaWiz
 
05.09.11
08:17
по сути (1)
Если тарампарамвыбран Тогда
Запрос.Текст=Запрос.Текст+"
   |    И ПриходныйКассовыйОрдер.Касса = &касса";
КонецЕсли;
Запрос.Текст=Запрос.Текст+конецтекстазапросакакойтамутебя
4 Escander
 
05.09.11
08:18
(0) послушайте, столько простейших вопросов по одной теме за утро... может пора взять в руки букварь?

параметр передайте в запрос...
5 Fragster
 
гуру
05.09.11
08:18
(3) фуфуфу!
6 ParaWiz
 
05.09.11
08:18
(5) номаное 7шное решение ;)
7 VladimirSK
 
05.09.11
08:19
(3) или сделай так
|ГДЕ
   |    ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
   |    И ПриходныйКассовыйОрдер.Дата < &НачПериода
   |    И (ПриходныйКассовыйОрдер.Касса = &касса"
   |    ИЛИ &кассаНеЗадана)"

Запрос.УстановитьПараметр("кассаНеЗадана",НЕ ЗначениеЗаполнено(Касса);
8 mikeA
 
05.09.11
08:28
(7)+ ИЛИ ПриходныйКассовыйОрдер.Касса = ЗНАЧЕНИЕ(Справочник.Кассы.ПустаяСсылка)
9 MatrosoV AleXXXand_R
 
05.09.11
08:43
ВЫБОР КОГДА &Касса = ЗНАЧЕНИЕ(Справочник.Кассы.ПустаяСсылка) ТОГДА ЛОЖЬ ИНАЧЕ
ПриходныйКассовыйОрдер.Касса = &касса КОНЕЦ
10 badboychik
 
05.09.11
08:57
к первому условию добавить "И &УчитыватьПервоеУсловиеВЗависимостиОтЗаполненияФормы"

и параметр заполнить. Все.
11 mikeA
 
05.09.11
09:46
(9) ему нужно по всем кассам, когда касса не заполнена
12 Fragster
 
гуру
05.09.11
09:54
Построитель = Новый ПостроительЗапроса;
Построитель.Текст =
"ВЫБРАТЬ
   |    ПриходныйКассовыйОрдер.Ссылка,
   |    ПриходныйКассовыйОрдер.СуммаДокумента
   |ИЗ
   |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
   |ГДЕ
   |    ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
|{ГДЕ
   |   ПриходныйКассовыйОрдер.Дата,
|ПриходныйКассовыйОрдер.Касса}";

Если ЗначениеЗаполнено(НачПериода) Тогда
ЭлементОтбора = Построитель.Отбор.Добавить("Дата");
ЭлементОтбора.ВидСравнения = ВидСравнения.Меньше;
ЭлементОтбора.Значение = НачПериода;
КонецЕсли;
Если ЗначениеЗаполнено(Касса) Тогда
ЭлементОтбора = Построитель.Отбор.Добавить("Дата");
ЭлементОтбора.Установить(Касса, Истина);
КонецЕсли;
13 VVi3ard
 
05.09.11
09:59
Используй построитель запроса
Запрос=Новый ПостроительЗапроса("ВЫБРАТЬ
   |    ПриходныйКассовыйОрдер.Ссылка,
   |    ПриходныйКассовыйОрдер.СуммаДокумента
   |ИЗ
   |    Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
   |ГДЕ
   |    ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ
   |    И ПриходныйКассовыйОрдер.Дата < &НачПериода
   |    {ГДЕ ПриходныйКассовыйОрдер.Касса}")

ОтборПоКассе=Запрос.Отбор.Добавить("Касса");
ОтборПоКассе.Установить(Касса,НЕ Касса.Пустая);
Запрос.Выполнить();
Результат=Запрос.Результат;
14 VVi3ard
 
05.09.11
09:59
(12) Опередил :)
15 Wobland
 
05.09.11
10:02
(8) +ИЛИ &Касса = ЗНАЧЕНИЕ(Справочник.Кассы.ПустаяСсылка)
16 Fragster
 
гуру
05.09.11
10:06
(13) вот это: ОтборПоКассе.Установить(Касса,НЕ Касса.Пустая); прикольно, с утра не допер :)
17 VVi3ard
 
05.09.11
10:09
(15) Зачем плохому учишь человека, ИМХО плохо так писать.
На больших объёмах можно и замедление запроса получить.

(16) Ну это я выепнутся захотел на самом деле твой пример легче читается и в нём больше условий можно предусмотреть (например Неопределенно, или Null).