Имя: Пароль:
1C
1С v8
Проверка типа параметра в запросе
,
0 servs
 
28.08.12
10:45
Доброе утро!
В запросе есть параметр "Контрагент"(тип СправочникСсылка.Контрагенты), в СКД на закладке параметры поставил галку "Список значений".
Этот параметр учавствует в конструкции:

ГДЕ Контрагент В (&Контрагент)

основного запроса отчета.
Как сделать так, чтобы если параметр не заполнен, то ограничение не срабатывало?

Раньше я использовал конструкцию
ВЫБОР
 КОГДА &Контрагент = Значение(Справочник.Контрагенты.ПустаяСсылка)
 ТОГДА Истина
 ИНАЧЕ Контрагент = &Контрагент
КОНЕЦ

Сейчас это не работает, т.к. составной тип параметра.
Кто сталкивался, посоветуйте.
1 andrewks
 
28.08.12
10:46
выразить
2 Kashemir
 
28.08.12
10:46
Неопределенное значение составного типа в запросе будет NULL
3 servs
 
28.08.12
10:47
(1) пробовал
(2) спс, ща попробую
4 Kashemir
 
28.08.12
10:47
(1) У него список значений в параметре
5 iceman2112
 
28.08.12
10:48
а почему используешь параметр а не отбор?
6 Kashemir
 
28.08.12
10:49
(3) Тебе надо сначала отдельно список конктрагентов в подзапрос отобрать - а дальше уже строить свои проверки
7 vmv
 
28.08.12
10:54
ВЫБОР
 КОГДА &Контрагент = Неопределно ИЛИ &Контрагент =(Справочник.Контрагенты.ПустаяСсылка)
 ТОГДА Истина
 ИНАЧЕ Контрагент = &Контрагент
КОНЕЦ

это быдет работать когда параметр НЕ коллеция(не массив, не список)

Если параметр может быть как коллекцие, так и значением, то нужно использовать конструкцию вида

|ГДЕ
| ...
| И (&БезОтораКонтрагента
|    ИЛИ ТабБд.Ссылка В (&Контрагент))

т.е. передавать в запрос еще один параметр, определяя "пустоту" параметра до запроса.

Все попытки скрестить вычисления в запросе "пустоты" параметра, который может быть как коллекцией так и значением
будут безуспешны на текущем синтаксисе запросов 1С
8 servs
 
28.08.12
10:57
(5) так запрос построен, показатели считаются в запросе
(6) там не проверки, а отбор в первом запросе пакета, на основании которого потом будут рассчитываться показатели.
(7) спасибо, ответ исчерпывающий.
9 Kashemir
 
28.08.12
11:02
(8) Попробовал покрутить - что-то такое получилось


ВЫБРАТЬ
   ВЫБОР
       КОГДА ВложенныйЗапрос.Количество > 0
           ТОГДА ИСТИНА
       ИНАЧЕ ЛОЖЬ
   КОНЕЦ КАК ЕстьКонтрагенты
ПОМЕСТИТЬ ПроверятьКонтрагентов
ИЗ
   (ВЫБРАТЬ
       КОЛИЧЕСТВО(*) КАК Количество
   ИЗ
       Справочник.Контрагенты КАК Контрагенты
   ГДЕ
       Контрагенты.Ссылка В(&СпсКонтрагентов)) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
   ВзаиморасчетыСКонтрагентамиОстатки.Сделка,
   ВзаиморасчетыСКонтрагентамиОстатки.Организация,
   ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
   ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток,
   ВзаиморасчетыСКонтрагентамиОстатки.СуммаУпрОстаток
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(
           ,
           Контрагент В (&СпсКонтрагентов)
               ИЛИ ЛОЖЬ В
                   (ВЫБРАТЬ
                       ПроверятьКонтрагентов.ЕстьКонтрагенты
                   ИЗ
                       ПроверятьКонтрагентов КАК ПроверятьКонтрагентов)) КАК ВзаиморасчетыСКонтрагентамиОстатки
10 Kashemir
 
28.08.12
11:04
(7) Не то чтобы безуспешны - но далекие от совершенства, типа (9)
11 servs
 
28.08.12
11:08
(9) хорошая идея! Сейчас попробую на своем примере.
12 Kashemir
 
28.08.12
12:59
Хорошая задачка для теста соискателей :)
13 Ненавижу 1С
 
гуру
28.08.12
13:03
идиотизм пустых значений
AdBlock убивает бесплатный контент. 1Сергей