Имя: Пароль:
1C
1С v8
Левое соединение в СКД
0 Pasha_mix
 
04.07.12
15:33
Есть запрос, в котором соеденены две таблицы, но в отчет попадают данные, как буд-то установленно внутреннее соеденение. И если на вторую таблицу накладываются условия, то они влияют и на первую, хотя не должны при левом соединении.
искал похожие вопросы, но ответа так и не нашел. подобная проблема была. v8: Левое соединение в СКД

Сам запрос:

ВЫБРАТЬ
   ОбщиеОбороты.Контрагент,
   ОбщиеОбороты.ДоговорНаПремии КАК ДоговорНаПремии,
   ОбщиеОбороты.Бренд КАК Бренд,
   ОбщиеОбороты.СуммаБезНДС,
   Дог.МинимальныйОборот,
   Дог.ПроцентПремии КАК ПроцентПремии
ИЗ
   (ВЫБРАТЬ
       ПремииОбороты.Контрагент КАК Контрагент,
       ПремииОбороты.ДоговорНаПремии КАК ДоговорНаПремии,
       ПремииОбороты.Бренд КАК Бренд,
       ПремииОбороты.СуммаБезНДСОборот КАК СуммаБезНДС
   ИЗ
       РегистрНакопления.Премии.Обороты(
               НАЧАЛОПЕРИОДА(&ДатаОтчета, МЕСЯЦ),
               КОНЕЦПЕРИОДА(&ДатаОтчета, МЕСЯЦ),
               Месяц,
               ДоговорНаПремии В
                   (ВЫБРАТЬ
                       Дог.Ссылка
                   ИЗ
                       Справочник.ДоговорыКонтрагентов КАК Дог
                   ГДЕ
                       Дог.ПоМагнолииВЦелом = ИСТИНА
                       И Дог.ЭтоПремии = ИСТИНА
                       И Дог.ПериодНачисления = 1
                       И Дог.До >= КОНЕЦПЕРИОДА(&ДатаОтчета, МЕСЯЦ))) КАК ПремииОбороты
   
) КАК ПремииОбороты) КАК ОбщиеОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.Премии КАК Дог
       ПО ОбщиеОбороты.Бренд = Дог.Бренд
           И ОбщиеОбороты.ДоговорНаПремии = Дог.Ссылка
ГДЕ
   Дог.Ссылка.ЭтоПремии = ИСТИНА
   И Дог.Ссылка.До >= КОНЕЦПЕРИОДА(&ДатаОтчета, МЕСЯЦ)
1 LAAry
 
04.07.12
15:36
так ты 2 раза обращаешься к договорам. зачем, если соединяешь так: "ОбщиеОбороты.ДоговорНаПремии = Дог.Ссылка"?
2 LAAry
 
04.07.12
15:37
Вернее зачем соединять здесь вообще?
3 Classic
 
04.07.12
15:38
поменяй "Где" на "И"
4 Pasha_mix
 
04.07.12
15:41
(1) Это часть запроса. там их 4 таблицы в объединении, для каждо свои таблицы договоров.
Но суть не в этом. Главное на выходе получаются 2 таблицы - Договора и Обороты. И вот хочется видеть все обороты и подтягивать к ним строки из ТЧ договоров.
5 Classic
 
04.07.12
15:43
(4)
Та условия пишешь в ГДЕ - это ограничение уже на результат соединения. Т.е. в результате левого соединения у тебя получилось в какой-то строке Дог.Ссылка - NULL.
И ты берешь и эту строку отфильтровываешь
6 Pasha_mix
 
04.07.12
15:44
Вот эта строка?
И ОбщиеОбороты.ДоговорНаПремии = Дог.Ссылка
ГДЕ
   Дог.Ссылка.ЭтоПремии = ИСТИНА
   И Дог.Ссылка.До >= КОНЕЦПЕРИОДА(&ДатаОтчета, МЕСЯЦ)
7 Classic
 
04.07.12
15:45
Еще раз повторяю. Измени слово ГДЕ на слово И.
И посмотри на результат
8 Pasha_mix
 
04.07.12
15:45
Если таблицу договоров закнуть во вложенную?
9 Pasha_mix
 
04.07.12
15:46
В каком месте?? у меня два раза встречается ГДЕ
10 Classic
 
04.07.12
15:46
Последнее
11 Pasha_mix
 
04.07.12
15:47
Помогло! ) Благодарю, дружище!