Имя: Пароль:
1C
1С v8
Помогите с синтаксисом запроса
,
0 Глупый дятел
 
12.02.16
06:57
Запрос должен меняться в зависимости от заполненности параметра. Такой вариант выдает ошибку, если параметр заполнен, с пустым параметром работает.

запрос1=новый запрос;
    запрос1.Текст="ВЫБРАТЬ
                  |    ПоступлениеТоваровУслуг.Ссылка,
                  |    ПоступлениеТоваровУслугТовары.Номенклатура,
                  |    ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа,
                  |    ПоступлениеТоваровУслуг.Дата КАК Дата
                  |ИЗ
                  |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
                  |        ПО ПоступлениеТоваровУслугТовары.Ссылка = ПоступлениеТоваровУслуг.Ссылка
                  |ГДЕ
                  |    ПоступлениеТоваровУслуг.Партнер = &Партнер";
                  Если значениезаполнено(объект.склад) тогда  запрос1.Текст=запрос1.Текст+
                  "И ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа = &СкладскаяГруппа";
              конецесли;
                  запрос1.Текст=запрос1.Текст+"
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Дата";
    запрос1.УстановитьПараметр("партнер",объект.Поставщик);    
    запрос1.УстановитьПараметр("СкладскаяГруппа",объект.склад);
1 cw014
 
12.02.16
06:59
Потому что:
1) В результате у тебя "ПоступлениеТоваровУслуг.Партнер = &ПартнерИ ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа = &СкладскаяГруппа

2) Из "ГДЕ" перетащи условие в "ЛЕВОЕ СОЕДИНЕНИЕ" иначе внутреннее  будет
2 KishMish
 
12.02.16
07:01
поменяй условие на такой.

ГДЕ
ПоступлениеТоваровУслуг.Партнер = &Партнер
и (&НеУчитыватьСкладскаяГруппа или ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа.объект.склад)
запрос1.УстановитьПараметр("СкладскаяГруппа",объект.склад);
запрос1.УстановитьПараметр("НеУчитыватьСкладскаяГруппа ",Истина);

НеУчитыватьСкладскаяГруппа  равно
   Истина если не учитывать
   Ложь если надо учитывать.
3 cw014
 
12.02.16
07:01
&ПартнерИ...
4 cw014
 
12.02.16
07:01
Вот что у него получается
5 cw014
 
12.02.16
07:02
А вообще в (2) логично
6 KishMish
 
12.02.16
07:05
+(2) в условити равенство склада забыл и условие не парвильно написал

и (&НеУчитыватьСкладскаяГруппа или ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа = &СкладскаяГруппа)
7 Глупый дятел
 
12.02.16
07:14
(6)
интересный вариант. А с 2 параметрами его можно сделать, то есть проверку неучитываемости?
8 KishMish
 
12.02.16
07:17
(7) да в приципе то разнцииы нет
главное чтобы выполнялось условие в запросе
и ИСТИНА
и ИСТИНА

то есть

И (&НеПроверятьСклад или Табл.Склад=&Склад) //истина будет если не проверять или Нужный склад
И (&НеПроверятьТовар или Табл.Товар=&Товар) //истина если не проверять или нужный товар

Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("НеПроверятьСклад ",Склад.Пустая());

Запрос.УстановитьПараметр("Товар",Товар);
Запрос.УстановитьПараметр("НеПроверятьТовар ",Товар.Пустая());

ну и куча других проверок...
9 Глупый дятел
 
12.02.16
07:21
(8)
огромный респект. Теперь запрос получился устойчивым к открытию конструктором. это конечно огромный плюс, раньше сложнее разгребать его было.
10 KishMish
 
12.02.16
07:22
(9) рад, что помог )))
11 cw014
 
12.02.16
07:27
(9) Я смотрю про внутреннее соединение ты проигнорировал сообщение
12 KishMish
 
12.02.16
07:30
(9) кстати, да. обрати внимание на (11)
13 cw014
 
12.02.16
07:31
(12) Ага, спасибо. А то я смотрю, что меня таки игнорят на форумах :)
14 rabbidX
 
12.02.16
10:23
(11) Это имеет значение в данном случае? Документ со своей же табличной частью соединяется. По-моему, соединение вообще не нужно прописывать в явном виде, достаточно
добавить условие Ссылка.Партнер = &Партнер.
15 rabbidX
 
12.02.16
10:24
+(14) как минимум, читабельнее будет выглядеть.
16 sash-ml
 
12.02.16
10:34
(0)
ПоступлениеТоваровУслуг.Партнер = &Партнер И
(&СкладскаяГруппа = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
    ИЛИ &СкладскаяГруппа = ПоступлениеТоваровУслугТовары.Номенклатура.СкладскаяГруппа)
17 darius357
 
12.02.16
12:24
Ну как всегда побакланили, и нифига толку.