Имя: Пароль:
1C
1С v8
Запрос. Не обязательные параметры для заполнения
0 Wefast
 
01.09.15
12:39
Табличная часть формы заполняется из запроса. Мне нужно добавить возможность отбора на данные. Типовой метод почему то не доступен(изменить список или что то вроде этого через все действия)

Когда делал отчеты помещая условие где в {} можно было их не заполнять и тогда он их не использовал и не ругался. Тут же что то условие как я не пытался не накладывается

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Регистратор,
    |    КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Организация,
    |    КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Контрагент,
    |    КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Договор,
    |    КА_УчетПлатежейПоЛизингуОстаткиИОбороты.СуммаТелоПриход
    |ИЗ
    |    РегистрНакопления.КА_УчетПлатежейПоЛизингу.ОстаткиИОбороты(, , Регистратор, , ДатаПлатежа МЕЖДУ &ДатаНачало И &ДатаКонец) КАК КА_УчетПлатежейПоЛизингуОстаткиИОбороты
    |{ГДЕ
    |    (КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Организация = &Организация) КАК Организация,
    |    (КА_УчетПлатежейПоЛизингуОстаткиИОбороты.Контрагент = &Контрагент) КАК Контрагент;
    
    Запрос.УстановитьПараметр("ДатаКонец", Объект.ДатаКонца);
    Запрос.УстановитьПараметр("ДатаНачало", Объект.ДатаНачала);
    Если НЕ Объект.Организация.Пустая() Тогда
        Запрос.УстановитьПараметр("Организация", Объект.Организация);
    КонецЕсли;
    Если НЕ Объект.Контрагент.Пустая() = ИСТИНА Тогда
        Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
    КонецЕсли;
        
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
1 Mort
 
01.09.15
12:41
Запросу эти конструкции ({}) до лампочки. Они для построителя.
2 Брегорьян
 
01.09.15
12:41
где А ИЛИ А=ПустоеЗначение
3 Wefast
 
01.09.15
12:48
(1) т.е. это СКД потом обрабатывает эти скобки, а так в запросе они не работают?
(2) не понял
4 hhhh
 
01.09.15
12:51
(3) да, в запросе это идет как комментарий. То что в фигурных скобках.
5 Брегорьян
 
01.09.15
12:57
(3) где Поле=Параметр ИЛИ Параметр=ПустоеЗначение
6 Wefast
 
01.09.15
13:01
(5) Я честно не понимаю как это

Если я не передам параметр то он поругается на его незаполненность
7 Брегорьян
 
01.09.15
13:03
(6) это логика такая. это не кусок текста запроса
8 Брегорьян
 
01.09.15
13:04
+(7) передавай всё
9 Wefast
 
01.09.15
13:06
Лучше прямо на примере справочника Организаций.

ВЫБРАТЬ
    Организации.Ссылка
ИЗ
    Справочник.Организации КАК Организации
ГДЕ
    (Организации.Ссылка = &Ссылка
            ИЛИ &Ссылка = &СсылкаПустая)
10 Wefast
 
01.09.15
13:08
И вот в &Ссылка я передаю значение реквизита. И это пустая ссылка так как нет там ничего

И что то я не понимаю, ничего же не измениться. Он мне ничего не выдаст и все
11 Sammo
 
01.09.15
13:09
(9) Тогда уж = Значение(Справочник.Организации.ПустаяСсылка)
12 Wefast
 
01.09.15
13:10
Если уж передавать все, то сделать условие пустая ссылка ли параметр, если да то передавать туда все значения справочника организаций, предварительно все их выбрав?

Да это же ад совсем передавать целый справочник в виде параметра
13 Брегорьян
 
01.09.15
13:11
(12) чо? &Организация=Значение(Справочник.Организации.ПустаяСсылка)
14 Wefast
 
01.09.15
13:14
(13) Зачем сравнивать два параметра между собой? это же никак не накладывает отбор на запрос
15 Брегорьян
 
01.09.15
13:14
(14) очень накладывает
16 Брегорьян
 
01.09.15
13:15
сейчас до ТС дойдёт, что ГДЕ рабоатет с логическими выражениями
17 Wefast
 
01.09.15
13:28
(16) Спасибо, так и правда работает, хотя я так и не понял ничего
18 Брегорьян
 
01.09.15
13:36
развлекайся (это готовый запрос):

выбрать
выбор когда NULL=NULL тогда "да" иначе "нет" конец как СравнениеНаРавенство,
выбор когда NULL<>NULL тогда "да" иначе "нет" конец как СравнениеНаНеравенство
19 Wefast
 
01.09.15
14:35
(18) хм был уверен что выдаст
да, нет

А выдал нет нет, я бы подумал что null нельзя сравнивать

Но бывает же условие если Данные = NUll Тогда, т.е. сравнение идет null с null


В любом случае связь не очень ощущаю между этими случаями.

Вот я понимаю к примеру
Организация = А или Организация = Б
Он выведет данные по обеим организациям

Но как работает
Организация = А ИЛИ А = пустота
я не понимаю
ОН по идее должен выдать все данные удовлетворяющие первой части условия и все данные второй части.

Хм в первой части накладывается отбор на данные.  А во второй просто либо выводит все если ИСТИНА либо ничего если ЛОЖЬ
Z
20 Брегорьян
 
01.09.15
16:29
(19) запись включается в результат, если ГДЕ даёт истину. только и всего
21 Брегорьян
 
01.09.15
16:31
+(20) ну и примеряется к каждой строке промежуточного результата
Ошибка? Это не ошибка, это системная функция.