Левое соединение регистра сведений со справочником #526427


#0 by Dwarrior
Здраствуйте! В типовой бухгалтерии есть справочник Контрагенты, а так же регистр сведений КонтактнаяИнформация, где хранится адреса и телефоны контрагентов. МЫ хотим получить адрес контрагента. Выполняем запрос: Ссылка - указываем существующего контрагента, и мы точно знаем, что у него нет адреса. Запрос теоретически должен вернуть 1 запись с контрагентом и пустым адресом. А возвращает 0 записей! Причем что интересно - если из условия убрать то запрос возвращает правильный результат. В чем может быть дело?
#1 by Dwarrior
У регистра КонтактнаяИнформация 3 измерения:
#2 by Molinor
ВЫБРАТЬ        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИАдрес        ПО (КИАдрес.Объект = Контрагенты.Ссылка И Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес) И Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента)) ГДЕ
#3 by zak555
скобку забыл
#4 by Defender aka LINN
"Запрос теоретически должен вернуть 1 запись с контрагентом и пустым адресом" - да ну?
#5 by SnarkHunter
>> В чем может быть дело? Дело в непонимании разницы между условием соединения и условием фильтра...
#6 by Dwarrior
Спасибо, это работает! А вот почему это работает? ведь логически эти запросы равны. Или нет? а почему нет? контрагент по конкретной ссылке вернет 1 запись, а адрес должен присоединиться при условии, что он есть, ведь левое соединение? Или я ошибаюсь?
#7 by Dwarrior
просвятите пожста в чем разница?
#8 by vicof
условие соединения определяет по каким полям будут соединяться таблицы, условие фильтра на уже соединенные таблицы накладывает фильтр
#9 by Defender aka LINN
А потом ты на результат этого соединения условие накладываешь. Это ж азбучные истины.
#10 by Dwarrior
т.е. если у регистра 3 измерения - их надо все указывать в условии соединения? Ведь из моего первого запроса, где соединение идет только по контрагенту - логически должны попасть все записи регистра - его телефон и прочие атрибуты, которые там хранятся. Ведь я не уточняю, что ищу адрес. А потом, на этот набор записей накладывается условие - "из этих записей хочу только адрес". Не пойму все таки, в чем разница:) Ведь если указать менее явные условия на соединение - выберется просто большее количество записей, которое потом в конце концов отфильтруется до нужного, но в условии фильтра. А в случае - мы просто соеднияем таблицы по более явным условиям и условия фильтров больше не требуются. Подскажите, где можно прочитать про эту разницу между условиями?
#11 by Molinor
В твоём случае, ты получаешь таблицу с Контрагентами и всеми подходящими к ним записями из контактной информации. Потом ты из этих записей выбираешь нужного контрагента, у которого есть записи об адресе. Но у выбираемого контрагента отсутствует запись об адресе, соответственно и поля КИАдрес.Тип и КИАдрес.Вид равны Неопределено. Что противоречит условиям отбора. Вроде так.
#12 by Molinor
А может и не так. Что-то затупил.
#13 by vicof
Контрагенты.Ссылка В(&Ссылка) мне вот это оч не нравится
#14 by Кириллка
Уже было подобное:
#15 by Defender aka LINN
Вот щас как натравлю на тебя Ненавижу 1С! Откуда там Неопределено?
#16 by zak555
null
#17 by Dwarrior
нет, вроде не затупил:) Теперь вроде бы понятно! Хотя надо еще покумекать:) Большое спасибо всем участвующим!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С