Имя: Пароль:
1C
1С v8
Как задать данное условие в параметре виртуальной таблицы?
,
0 SherifSP
 
03.05.13
17:51
Есть запрос, знаю если условие стоит на виртуальной таблице, данные выбираются быстрее, как извратится над данным запросом, чтобы поставить условие с проверкой в параметр?

ТекстЗапроса = "ВЫБРАТЬ
                  |    Расчеты.ТорговаяТочка,
                  |    Расчеты.ТорговыйПредставитель,
                  |    Расчеты.МаршрутКоманды,
                  |    Расчеты.Документ,
                  |    Расчеты.Склад,
                  |    Расчеты.Сумма,
                  |    Расчеты.ДатаОплаты,
                  |    Расчеты.Просрочка,
                  |    Расчеты.СуммаПросрочки,
                  |    Расчеты.СуммаДолга
                  |ИЗ
                  |    (ВЫБРАТЬ
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ТорговаяТочка КАК ТорговаяТочка,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ТорговыйПредставитель КАК ТорговыйПредставитель,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.МаршрутКоманды КАК МаршрутКоманды,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом КАК Документ,
                  |        ВЫБОР
                  |            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг
                  |                ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Склад
                  |            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.ВозвратТоваровОтПокупателя
                  |                ТОГДА ВЫБОР
                  |                        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер ССЫЛКА Справочник.Склады
                  |                            ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер
                  |                        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер ССЫЛКА Документ.ПриходныйОрдерНаТовары
                  |                            ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер.Склад
                  |                        ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
                  |                    КОНЕЦ
                  |            ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
                  |        КОНЕЦ КАК Склад,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК Сумма,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты КАК ДатаОплаты,
                  |        РАЗНОСТЬДАТ(&ДатаИтогов, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты, ДЕНЬ) КАК Просрочка,
                  |        ВЫБОР
                  |            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.УсловиеОплаты = ЗНАЧЕНИЕ(Перечисление.ВидыУсловийОплат.ОтПоставкиДоПоставки)
                  |                ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
                  |            КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.УсловиеОплаты = ЗНАЧЕНИЕ(Перечисление.ВидыУсловийОплат.ПоФакту)
                  |                ТОГДА ВЫБОР
                  |                        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты < НАЧАЛОПЕРИОДА(&ДатаРасчета, ДЕНЬ)
                  |                            ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
                  |                        ИНАЧЕ 0
                  |                    КОНЕЦ
                  |            ИНАЧЕ ВЫБОР
                  |                    КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.ДатаОплаты < &ДатаИтогов
                  |                        ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток
                  |                    ИНАЧЕ 0
                  |                КОНЕЦ
                  |        КОНЕЦ КАК СуммаПросрочки,
                  |        ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаДолга
                  |    ИЗ
                  |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&ДатаРасчета, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки) КАК Расчеты
                  |ГДЕ
                  |    Расчеты.Склад <> ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)";
                 
   Если ЗначениеЗаполнено(ТорговаяТочка) Тогда
      ТекстЗапроса = ТекстЗапроса+"
      |    И Расчеты.ТорговаяТочка = &ТорговаяТочка";
   КонецЕсли;
1 SherifSP
 
03.05.13
17:52
+(0) А именно по ТорговойТочке
2 mistеr
 
03.05.13
18:07
Ровно так же, как сейчас оно ставится в ГДЕ. Только вставлять в другое место запроса.
3 Любопытная
 
03.05.13
18:08
Ты ж контрагента в условиях прописал. Дальше припиши И и твое условие из ГДЕ
4 SherifSP
 
03.05.13
18:20
Реализовал это вот так, вроде отбирает, но на сколько это оптимально, подскажите

ИЗ
                  |        РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(&ДатаРасчета, Контрагент = &Контрагент {ДокументРасчетовСКонтрагентом.ТорговаяТочка = &ТорговаяТочка}) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки) КАК Расчеты
5 SherifSP
 
03.05.13
18:21
(3) Но если ТорговаяТочка будит пустой, тогда запрос ничего не выберет
6 SherifSP
 
03.05.13
18:22
+(4)

Если ЗначениеЗаполнено(ТорговаяТочка) Тогда
       Запрос.УстановитьПараметр("ТорговаяТочка",ТорговаяТочка);
   КонецЕсли;
7 SherifSP
 
03.05.13
18:34
Надо апать, а то все уснули )
8 zak555
 
03.05.13
18:36
зачем вложенный запрос и почему Расчеты.Склад вынесен в ГДЕ ?
9 SherifSP
 
03.05.13
18:40
(8) Птому что склад вычисляется как

ВЫБОР
   КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.РеализацияТоваровУслуг
       ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.Склад
   КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом ССЫЛКА Документ.ВозвратТоваровОтПокупателя
       ТОГДА ВЫБОР
               КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер ССЫЛКА Справочник.Склады
                   ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер
               КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер ССЫЛКА Документ.ПриходныйОрдерНаТовары
                   ТОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.СкладОрдер.Склад
               ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
           КОНЕЦ
   ИНАЧЕ ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
КОНЕЦ
10 SherifSP
 
03.05.13
18:41
(8) А на счет вложенного запроса, для меня пока остается загадкой
11 SherifSP
 
03.05.13
18:46
Вложенный запрос не влияет на скорость выборки данных?
12 Sammo
 
03.05.13
19:11
(11) Использование вложенных запросов приводит к непредсказуемому плану запроса. Именно с этим связана рекомендация 1с переписывать через временные таблицы.