Почему дублирует строки

1. Lucifer93 94 21.06.19 14:14 Сейчас в теме +0.5 $m
Вопрос. Почему данный запрос дублирует строки. Я его, конечно, переписал, но никак не могу понять почему происходило дублирование строк
ВЫБРАТЬ
	ПланПоГкТГКОбороты.ГоловнойКонтрагент,
	ПланПоГкТГКОбороты.ТоварнаяГруппаКлиента,
	ПланПоГкТГКОбороты.СуммаОборот,
	ПланПоГкТГКОбороты.ГоловнойКонтрагент.Код
ПОМЕСТИТЬ ОборотПоПлану
ИЗ
	РегистрНакопления.ПланПоГкТГК.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПланПоГкТГКОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПродажиОбороты.Номенклатура.ГруппаДляАналитики,
	ВЫБОР
		КОГДА ПродажиОбороты.Контрагент.ГоловнойКонтрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
			ТОГДА ПродажиОбороты.Контрагент
		ИНАЧЕ ПродажиОбороты.Контрагент.ГоловнойКонтрагент
	КОНЕЦ КАК Контрагент,
	ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ПОМЕСТИТЬ ФактБезГруппировки
ИЗ
	РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ФактБезГруппировки.НоменклатураГруппаДляАналитики,
	ФактБезГруппировки.Контрагент,
	СУММА(ФактБезГруппировки.СтоимостьОборот) КАК СтоимостьОборот,
	ФактБезГруппировки.Контрагент.Код КАК Код
ПОМЕСТИТЬ Факт
ИЗ
	ФактБезГруппировки КАК ФактБезГруппировки

СГРУППИРОВАТЬ ПО
	ФактБезГруппировки.Контрагент,
	ФактБезГруппировки.НоменклатураГруппаДляАналитики
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВЫБОР
		КОГДА ОборотПоПлану.ГоловнойКонтрагент ЕСТЬ NULL
			ТОГДА Факт.Контрагент
		ИНАЧЕ ОборотПоПлану.ГоловнойКонтрагент
	КОНЕЦ КАК ГоловнойКонтрагент,
	ВЫБОР
		КОГДА ОборотПоПлану.ТоварнаяГруппаКлиента ЕСТЬ NULL
			ТОГДА Факт.НоменклатураГруппаДляАналитики
		ИНАЧЕ ОборотПоПлану.ТоварнаяГруппаКлиента
	КОНЕЦ КАК ТоварнаяГруппаКлиента,
	ОборотПоПлану.СуммаОборот,	
	ВЫБОР КОГДА ОборотПоПлану.ГоловнойКонтрагентКод Есть Null
	Тогда Факт.Код 
	Иначе
	ОборотПоПлану.ГоловнойКонтрагентКод
	Конец КАК ГоловнойКонтрагентКод,
	Факт.НоменклатураГруппаДляАналитики,
	Факт.Контрагент,
	Факт.СтоимостьОборот
ПОМЕСТИТЬ ПланИФактПоВсем
ИЗ
	ОборотПоПлану КАК ОборотПоПлану
		ПОЛНОЕ СОЕДИНЕНИЕ Факт КАК Факт
		ПО ОборотПоПлану.ТоварнаяГруппаКлиента = Факт.НоменклатураГруппаДляАналитики
			И ОборотПоПлану.ГоловнойКонтрагент = Факт.Контрагент      // ТУТ РЕЗУЛЬТАТ 20 СТРОК
;
////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПланИФактПоВсем.ГоловнойКонтрагент,
	ПланИФактПоВсем.ТоварнаяГруппаКлиента КАК ТГК,
	ПланИФактПоВсем.СуммаОборот КАК План,
	ПланИФактПоВсем.ГоловнойКонтрагентКод КАК КодГК,                        // ТУТ РЕЗУЛЬТАТ 40 СТРОК  
	ПланИФактПоВсем.СтоимостьОборот КАК Факт
ИЗ
	ПланИФактПоВсем КАК ПланИФактПоВсем,
	ОборотПоПлану КАК ОборотПоПлану          // УБИРАЕМ ДАННУЮ СТРОКУ И ВСЕ РАБОТАЕТ НОРМАЛЬНО, ЕСЛИ ЕЕ ОСТАВИТЬ ПРОИСХОДИТ ДУБЛИРОВАНИЕ СТРОК. 
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. AlexPC 21.06.19 14:37 Сейчас в теме +0.5 $m
(1)
ИЗ
ПланИФактПоВсем КАК ПланИФактПоВсем,
ОборотПоПлану КАК ОборотПоПлану


Декартово произведение двух множеств. https://its.1c.ru/db/metod8dev#content:2591:hdoc.
DrAku1a; Lucifer93; Tverd; +3 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
5. AlexPC 21.06.19 14:37 Сейчас в теме +0.5 $m
(1)
ИЗ
ПланИФактПоВсем КАК ПланИФактПоВсем,
ОборотПоПлану КАК ОборотПоПлану


Декартово произведение двух множеств. https://its.1c.ru/db/metod8dev#content:2591:hdoc.
DrAku1a; Lucifer93; Tverd; +3 Ответить
13. Lucifer93 94 21.06.19 21:07 Сейчас в теме
(5) Спасибо огромное за ответ!
6. VmvLer 21.06.19 14:41 Сейчас в теме
(1) После прочтения книги "Эксперт по технологическим вопросам" такие запросы уже не пишут.
Хотя, если вы научились только цитировать оттуда главы, то еще допустимо ваять такую дичь на всяких демкам без опасения "завалить" систему.
login1020; +1 Ответить
11. Lucifer93 94 21.06.19 21:01 Сейчас в теме
(6) Вы, похоже, совсем не умеете читать. Мне поступил данный запрос на переработку. Мне было всего лишь интересно по какой причине он дублирует строки. Займитесь чем-нибудь полезным, хватит выливать желчь.
2. soft_wind 21.06.19 14:21 Сейчас в теме +0.5 $m
ИЗ
    ПланИФактПоВсем КАК ПланИФактПоВсем,
    ОборотПоПлану КАК ОборотПоПлану     


так это полное соединение, происходит "перемножение" таблиц
сделайте так

ИЗ
    ПланИФактПоВсем КАК ПланИФактПоВсем
лесое соединение 
    ОборотПоПлану КАК ОборотПоПлану     
по "однозначное Условие"
14. Lucifer93 94 21.06.19 21:08 Сейчас в теме
(2)Спасибо огромное за ответ! Я нашел как сделать, просто не знал, что существует такое перемножение таблиц!
3. alex-l19041 8 21.06.19 14:21 Сейчас в теме
если в последнем ВЫБРАТЬ не используете данные из ОборотПоПлану, то уберите
4. Cooler 22 21.06.19 14:23 Сейчас в теме
По-моему, дублирование происходит из-за двойного обращения к ГоловнойКонтрагент: один раз - как к самостоятельному контрагенту, второй - как к головному у контрагента из выборки.
7. coollerinc 185 21.06.19 14:50 Сейчас в теме
ОборотПоПлану КАК ОборотПоПлану // УБИРАЕМ ДАННУЮ СТРОКУ И ВСЕ РАБОТАЕТ НОРМАЛЬНО, ЕСЛИ ЕЕ ОСТАВИТЬ ПРОИСХОДИТ ДУБЛИРОВАНИЕ СТРОК.

И правильно, нужно убрать эту сроку, все равно вы из этой таблицы не вытаскиваете ни каких данных и не ограничиваете ею.
Из за нее дублируются строки т.к. в ПланИФактПоВсем 20 строк, а в ОборотПоПлану 2 строки. 20*2 = 40 строк.
8. akim2040 41 21.06.19 14:57 Сейчас в теме
(7)
(1) Присоединяюсь к ответу.
Зачем вы добавили временную таблицу ОборотПоПлану, если в итоге ни чего из неё не добавляете?
Либо просто уберите её, либо настройте связи для приличия, по полям ГловонойКонтрагент, и товарная группа
9. YannikAlx 43 21.06.19 15:33 Сейчас в теме
(8) Автор по ходу еще не дозрел до понимания временных таблиц...
Он ее создал и использует в других временных...
Но зачем написал ее в результате - ВОТ вопрос!
12. Lucifer93 94 21.06.19 21:05 Сейчас в теме
(8)
(9)
Вы совсем не умеете читать суть вопроса. Я не писал данный запрос, я получил его на переработку. Меня интересовал принцип задвоения строк. Прежде чем отвечать что-то прочитайте текст вопроса.
10. v3rter 21.06.19 17:26 Сейчас в теме
ПОЛНОЕ СОЕДИНЕНИЕ - экзотика, ни разу не использовал за всю свою жизнь. Для склейки таблиц "по вертикали" удобнее использовать ОБЪЕДИНИТЬ или ОБЪЕДИНИТЬ ВСЕ, а склейку "по горизонтали" удобнее делать из таблицы с ключевыми данными - список номенклатуры, контрагентов, результат запроса - и уже к ней левыми соединениями сразу или пошагово собирать все нужные данные.
С задвоениями есть одна неочевидная "грабля" - если в присоединяемой таблице есть задвоение данных, то оно задвоит и те строки, к которым эти данные будут присоединены. Чтобы такого не случалось, все склонные к задвоениям данные сначала выбираются и помещаются через ВЫБРАТЬ РАЗЛИЧНЫЕ во временные таблицы, а затем их уже можно безопасно соединять с ключевыми данными.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)