Имя: Пароль:
1C
 
Как в запросе проверить наличие реквизита у документа?
0 WED
 
07.07.08
14:26
Есть ряд документов, у которых реквизита контрагент нет, а есть документы у которых он есть.
В запросе нужно получить выборку из регистра накопления по регистратору с контрагентом = &Контрагент и без контрагента вовсе...

вобщем в выборке должны быть все расходные на Пупкина, но и все Перемещения (в которм впринципе реквизита контрагент нет) тоже.....

Проблема именно в том, как узнать есть реквизит у документа или нет?
1 Mitriy
 
07.07.08
14:29
Есть Null?
2 GenV
 
07.07.08
14:29
(0) Через ВЫБОР ССЫЛКА проверяй на тип документов с Контрагентом, для остальных ставь пусто. Выбор в тексте запроса можно сформировать динамически по метаданным.
3 WED
 
07.07.08
14:33
(1) ммм.. может быть, надо проверить
(2) не понял насчет динамического формирования выбора
4 WED
 
07.07.08
14:34
По идее мне надо аналог такого:

Регистратор.Ссылка.Метаданные().Реквизиты.Найти("Контрагент")
5 Лефмихалыч
 
07.07.08
14:35
(0) при помощи Метаданные строй текст запроса динамически
6 GenV
 
07.07.08
14:35
(3) Обходишь типы регистратора, проверяешь у них наличие реквизита Контрагент по метаданным, если есть - добавляешь условие на ВЫБОР.

Можно сделать наоборот, если регистраторов без контрагента меньше.
7 WED
 
07.07.08
14:36
(5) Не пойдет, ибо в запросе мне надо получить ВСЕ регистраторы у которых контрагент = Пупкин и плюсом все документы вообще без контрагента...
8 WED
 
07.07.08
14:37
(6) Построение текста запроса отпадает по причине (7)
9 acsent
 
07.07.08
14:37
Контрагент ЕСТЬ NULL ИЛИ Контрагент = &Контрагент
10 Mitriy
 
07.07.08
14:38
(9) Где Док.Контрагент ЕСТЬ NULL ИЛИ Док.Контрагент = &Контрагент
11 WED
 
07.07.08
14:39
(10) Вот и я к тому же пришел только что :)
12 BAGER
 
07.07.08
14:39
Ставь в условие:

ВЫБРАТЬ
   Док.Ссылка,
   Док.Контрагент
ИЗ
   Документ.<Твой документ> КАК Док
ГДЕ
   ЕСТЬNULL(Док.Контрагент, &Контрагент) = &Контрагент
13 Mitriy
 
07.07.08
14:39
Док = Регистратор
14 kumena
 
07.07.08
14:40
при чем сами документы и контрагент в них если запрос по регистру, контрагент в регистр не пишется?
15 BAGER
 
07.07.08
14:42
Смотри условие, а не источник данных
16 GenV
 
07.07.08
14:43
(11) Ну-ну :) Ну и как, не ругается на синтаксическую ошибку, если док без реквизита контрагент?
17 Mitriy
 
07.07.08
14:44
(16) самому попытать слабо?
18 GenV
 
07.07.08
14:53
(17) Мне давно уже не слабо :) Иначе и не писал бы :)
19 Лефмихалыч
 
07.07.08
14:58
(6) чудак человек... невозможно это, если реквзита КОнтрагент у регистратора нет, то при обращении к нему в запросе получишь куй в виде рантайм-ошибки
20 Лефмихалыч
 
07.07.08
14:58
(19) >> (7)
промазал
21 BAGER
 
07.07.08
14:58
Лови обороты за период по контрагенту+без контрагента (это на 1С:Предприятие 8.1):

ВЫБРАТЬ
   ТоварыНаСкладахОбороты.Номенклатура,
   ТоварыНаСкладахОбороты.Регистратор,
   СУММА(ТоварыНаСкладахОбороты.КоличествоОборот) КАК КоличествоОборот,
   СУММА(ТоварыНаСкладахОбороты.КоличествоПриход) КАК КоличествоПриход,
   СУММА(ТоварыНаСкладахОбороты.КоличествоРасход) КАК КоличествоРасход
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Обороты(&НачДата, &КонДата, Регистратор, ) КАК ТоварыНаСкладахОбороты
ГДЕ
   ЕСТЬNULL(ТоварыНаСкладахОбороты.Регистратор.Контрагент, &Контрагент) = &Контрагент

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОбороты.Номенклатура,
   ТоварыНаСкладахОбороты.Регистратор
22 Лефмихалыч
 
07.07.08
15:10
(21) не взлетит в случае (0)
23 BAGER
 
07.07.08
15:31
(22) Ошибаешься, в список попадают ВСЕ документы по указанному контрагенту и ВСЕ документы без реквизита «контрагент»
24 WED
 
07.07.08
15:48
(19) Никаких ошибок, ибо запрос для документа без контрагента как раз NULL и подставляет
(21) Взлетело, ибо это почти аналог моего запроса :)

Вопрос закрыт.
Спасибо Mitriy
и его (10) Где Док.Контрагент ЕСТЬ NULL ИЛИ Док.Контрагент = &Контрагент