Имя: Пароль:
1C
1С v8
Условие в вирт. таблице ☑
0 John83
 
20.09.11
✎
14:49
Есть необходимость не выполнять вложенный запрос, если передается параметр в виде пустой ссылки.
Сам запрос:

ВЫБРАТЬ
   ЗаказСПб.Номенклатура,
   0 КАК Поле1,
   0 КАК Поле2,
   0 КАК Поле3,
   0 КАК Поле4,
   0 КАК Поле5,
   0 КАК Поле6,
   0 КАК Поле7,
   0 КАК Поле8,
   ЕСТЬNULL(ЗаказСПб.ОсталосьОтгрузить, 0) КАК Поле9,
   ЗаказСПб.Характеристика
ИЗ
   (ВЫБРАТЬ
       ЗаказыПокупателейОстатки.Номенклатура КАК Номенклатура,
       СУММА(ЗаказыПокупателейОстатки.КоличествоОстаток) КАК ОсталосьОтгрузить,
       ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры КАК Характеристика
   ИЗ
       РегистрНакопления.ЗаказыПокупателей.Остатки(
               &Дата,
               ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).СкладГруппа В ИЕРАРХИИ (&ЗаказСПб)
                   И ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
                   И Номенклатура В
                       (ВЫБРАТЬ
                           ЗначенияСвойствОбъектов.Объект
                       ИЗ
                           РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                       ГДЕ
                           ЗначенияСвойствОбъектов.Свойство = &Свойство
                           И ЗначенияСвойствОбъектов.Значение В (&Значение))
                   И ЗаказПокупателя В
                       (ВЫБРАТЬ
                           ВЫРАЗИТЬ(СводЗаказыПокупателейОстатки.ЗаказПокупателя КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя
                       ИЗ
                           РегистрНакопления.ЗаказыПокупателей.Остатки(&Дата, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
                       ГДЕ
                           СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)) КАК ЗаказыПокупателейОстатки
   
   СГРУППИРОВАТЬ ПО
       ЗаказыПокупателейОстатки.Номенклатура,
       ЗаказыПокупателейОстатки.ХарактеристикаНоменклатуры) КАК ЗаказСПб

Проверка на пустую ссылку у параметра &ЗаказСПб.
Сначала попробовал без всяких вложений сделать так:
ВЫБОР
  КОГДА &ЗаказСПб = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
     ТОГДА NULL
  ИНАЧЕ <условие>
КОНЕЦ
все замечательно - никаких записей по условию не выводит, но если добавить это условие при использовании вложенного запроса, то все очень глубоко задумывается...
1 John83
 
20.09.11
✎
14:50
Собственно, как еще можно задать такое условие?
2 Sammo
 
20.09.11
✎
14:51
Номенклатура В (вложенный запрос)
может очень грустно выполняться.
Лучше переписать, имхо
3 John83
 
20.09.11
✎
14:52
(2) всей мистой думали - это оказался самый производительный вариант :)
4 palpetrovich
 
20.09.11
✎
15:02
(3) не могет быть :)  ...2 запроса не пошустрей будет?
5 John83
 
20.09.11
✎
15:06
6 palpetrovich
 
20.09.11
✎
15:07
(5) многа букав ..я первый день из отпуска, боюсь неосилю :)
7 John83
 
20.09.11
✎
15:08
+(5) в любом случае сейчас переделывать запрос не буду...
пока что в качестве параметра попробовал передать NULL - все работает, но по ходу запрос все равно отрабатывает
8 IronDemon
 
20.09.11
✎
15:14
Пакетный запрос с временными таблицами.
ВТ = ВЫБРАТЬ
                           ВЫРАЗИТЬ(СводЗаказыПокупателейОстатки.ЗаказПокупателя КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя
                       ИЗ
                           РегистрНакопления.ЗаказыПокупателей.Остатки(&Дата, ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя) КАК СводЗаказыПокупателейОстатки
                       ГДЕ
                           СводЗаказыПокупателейОстатки.КоличествоОстаток > 0)


ВЫБОР
  КОГДА &ЗаказСПб = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
     ТОГДА Истина
  ИНАЧЕ ... ЗаказПокупателя В (выбрать из ВТ)
КОНЕЦ
9 John83
 
20.09.11
✎
15:24
(8) надо будет попробовать
спасибо