Доброе время суток!!!
Вопрос следующего характера есть запрос
Запрос
ВЫБРАТЬ
ВзаиморасчетыПоДокументамОстаткиИОбороты.Регистратор,
СУММА(-ВзаиморасчетыПоДокументамОстаткиИОбороты.СуммаПриход) КАК Сумма,
ВзаиморасчетыПоДокументамОстаткиИОбороты.Регистратор.Дата
ИЗ
РегистрНакопления.ВзаиморасчетыПоДокументам.ОстаткиИОбороты(, , Регистратор, , Договор = &Договор) КАК ВзаиморасчетыПоДокументамОстаткиИОбороты
ГДЕ
НЕ ВзаиморасчетыПоДокументамОстаткиИОбороты.ДокументСвязи ЕСТЬ NULL
СГРУППИРОВАТЬ ПО
ВзаиморасчетыПоДокументамОстаткиИОбороты.Регистратор,
ВзаиморасчетыПоДокументамОстаткиИОбороты.Регистратор.Дата
Почему то не отрабатывает условие НЕ ВзаиморасчетыПоДокументамОстаткиИОбороты.ДокументСвязи ЕСТЬ NULL. ДокументСвязи имеет составной тип, и выдаёт значение NULL но условие не отрабатывает
Запись в регистре
Период Регистратор Номер строки Договор Документ связи Сумма
21.02.2012 0:00:00 Выписка банка МЛ-000090 от 21.02.2012 0:00:00 1 Контролируемый договор 7672МЛК от 29.12.2011 17:28:22 895,57
Если в запросе вывести ТипЗначения(ДокументСвязи) то получается NULL
(1) anterehin, не надо путать значение в результатах запроса и значение, которое нарисовано в выводе этих результатов. Пустое поле в регистре - это не NULL, а пустая ссылка. У 1с есть несколько видов пустых значений и они все разные.
Есть NULL - это когда в запросе левое соединение и во второй таблице нет записи.
Есть NULL - это когда в запросе левое соединение и во второй таблице нет записи.
вы не путаете Есть NULL и ЕСТЬNULL? ЕСТMNULL(<Выражение>,<Выражение>) как раз присваивает при соединение значение тем записям которых нет. Как тогда проверить измерение на незаполненность если он имеет составной тип?
(3) anterehin, не путаю.
Ответа, честно говоря, не знаю. Если список типов не очень длинный, я бы, наверное, сделал бы список пустых ссылок по этим типам и проверку на вхождение в этот список.
Ну еще я бы воспользовался яндексом, я иногда так делаю. Например вот
НЕ РеализацияТоваровУслуг.Заказчик.Ссылка Есть NULL
(7) Ёпрст, вариант рабочий. И, похоже, в данном случае самый подходящий.
(6) starjevschik, по сути тот же ответ, да ещё с уточнением про неявное соединение со ВСЕМИ таблицами составного типа.
Маленькое уточнение:
У пустого значения составного типа пустое значение НЕОПРЕДЕЛЕНО Вот с ним и можно сравнивать
Но в таком случае мы пропустим пустые значения возможных типов. А они тоже могут быть в регистре.
Можно написать что-то вроде:
ВзаиморасчетыПоДокументамОстаткиИОбороты.ДокументСвязи <> НЕОПРЕДЕЛЕНО
И ВзаиморасчетыПоДокументамОстаткиИОбороты.ДокументСвязи <> ЗНАЧЕНИЕ(Документы.Док1.ПустаяСсылка)
И ВзаиморасчетыПоДокументамОстаткиИОбороты.ДокументСвязи <> ЗНАЧЕНИЕ(Документы.Док2.ПустаяСсылка)
как и предложил starjevschik.
Такой вариант будет работать быстрее, чем ДокументСвязи.Ссылка ибо убираются неявные соединения. Но писать дольше и не забывать менять в случае изменения состава типа.
Так что выбирать в каждом конкретном случае исходя из задачи.