задвоение строк в отчете на СКД при левом соединении в запросе

1. mikl79 119 18.06.24 15:46 Сейчас в теме
Добрый день.
Версия платформы: 8.3.24.1548
Версия конфигурации: 1С:ERP Управление предприятием 2 (2.5.16.107)
субд: ms sql 2019

При формировании отчета на СКД задваиваются строки при левом соединении в запросе.

Прилагаю скрин-шоты:
1) отчет на СКД - тут видно, что строки задвоены
2) отчет через Консоль запросов - тут видно, что задвоения нет

Вяснилось, что это из-за Левого соединения в последнем пакете запроса.
Сравнивал исходный Запрос и Запрос в Схеме СКД - они одинаковые!

Так же пригалаю файлы: Запрос (текст) и Схему СКД.

Пожалуйста помогите разобраться как можо исправить / обойти ошибку.

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

ИНДЕКСИРОВАТЬ ПО
	ЗаказКлиента,
	Номенклатура,
	КодСтроки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Заказы.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_ТолькоЗаказы
ИЗ
	ВТ_Заказы КАК ВТ_Заказы

СГРУППИРОВАТЬ ПО
	ВТ_Заказы.ЗаказКлиента

ИНДЕКСИРОВАТЬ ПО
	ЗаказКлиента
;

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

ИНДЕКСИРОВАТЬ ПО
	ЗаказКлиента,
	Номенклатура,
	КодСтроки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Заказы.ЗаказКлиента КАК ЗаказКлиента,
	ВТ_Заказы.Номенклатура КАК Номенклатура,
	ВТ_ТЧ_Заказов.ИдентификаторСтроки КАК ИдентификаторСтроки,
	ВТ_Заказы.СуммаСНДС КАК СуммаСНДС,
	ВТ_ТЧ_Заказов.ДатаОтгрузки КАК ДатаОтгрузки
ПОМЕСТИТЬ ВТ_Врем
ИЗ
	ВТ_Заказы КАК ВТ_Заказы
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЧ_Заказов КАК ВТ_ТЧ_Заказов
		ПО ВТ_Заказы.ЗаказКлиента = ВТ_ТЧ_Заказов.ЗаказКлиента
			И ВТ_Заказы.Номенклатура = ВТ_ТЧ_Заказов.Номенклатура
			И ВТ_Заказы.КодСтроки = ВТ_ТЧ_Заказов.КодСтроки
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СуммыДокументовВВалютахУчета.Регистратор КАК ЗаказКлиента,
	СуммыДокументовВВалютахУчета.ИдентификаторСтроки КАК ИдентификаторСтроки,
	СуммыДокументовВВалютахУчета.СуммаБезНДС КАК СуммаБезНДС_Вал,
	СуммыДокументовВВалютахУчета.СуммаБезНДС + СуммыДокументовВВалютахУчета.СуммаНДС КАК СуммаСНДС_Вал,
	СуммыДокументовВВалютахУчета.СуммаБезНДСРегл КАК СуммаБезНДС_Руб,
	СуммыДокументовВВалютахУчета.СуммаБезНДСРегл + СуммыДокументовВВалютахУчета.СуммаНДСРегл КАК СуммаСНДС_Руб
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
	РегистрСведений.СуммыДокументовВВалютахУчета КАК СуммыДокументовВВалютахУчета
ГДЕ
	СуммыДокументовВВалютахУчета.Регистратор В
			(ВЫБРАТЬ
				ВТ_ТолькоЗаказы.ЗаказКлиента КАК ЗаказКлиента
			ИЗ
				ВТ_ТолькоЗаказы КАК ВТ_ТолькоЗаказы)

ИНДЕКСИРОВАТЬ ПО
	ЗаказКлиента,
	ИдентификаторСтроки
;

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

СГРУППИРОВАТЬ ПО
	ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента,
	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура

ИНДЕКСИРОВАТЬ ПО
	ЗаказКлиента,
	Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Врем.ЗаказКлиента КАК ЗаказКлиента,
	ВТ_Врем.Номенклатура КАК Номенклатура,
	ВТ_Врем.ИдентификаторСтроки КАК ИдентификаторСтроки,
	ВТ_Суммы.СуммаБезНДС_Вал КАК СуммаБезНДС_Вал,
	ВТ_Суммы.СуммаСНДС_Вал КАК СуммаСНДС_Вал,
	ВТ_Суммы.СуммаБезНДС_Руб КАК СуммаБезНДС_Руб,
	ВТ_Суммы.СуммаСНДС_Руб КАК СуммаСНДС_Руб
ИЗ
	ВТ_Врем КАК ВТ_Врем
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Суммы КАК ВТ_Суммы
		ПО (ВТ_Врем.ЗаказКлиента = ВТ_Суммы.ЗаказКлиента)
			И (ВТ_Врем.ИдентификаторСтроки = ВТ_Суммы.ИдентификаторСтроки)

УПОРЯДОЧИТЬ ПО
	ЗаказКлиента,
	Номенклатура
ИТОГИ
	СУММА(СуммаБезНДС_Вал),
	СУММА(СуммаСНДС_Вал),
	СУММА(СуммаБезНДС_Руб),
	СУММА(СуммаСНДС_Руб)
ПО
	ОБЩИЕ
АВТОУПОРЯДОЧИВАНИЕ
Показать
Прикрепленные файлы:
Запрос.txt
Схема СКД.xml
По теме из базы знаний
Найденные решения
15. mikl79 119 19.06.24 11:09 Сейчас в теме
(14), спасибо за участие, решил проблему так - сгруппировал ВТ_Врем
Прикрепленные файлы:
Запрос новый.txt
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. homer_ 79 18.06.24 16:07 Сейчас в теме
на скрине видно что не все строки двоятся. поэтому проблема с запросом.
8. mikl79 119 19.06.24 07:54 Сейчас в теме
(2), в консоли запросов выполняется без задвоения - пробовал на разных консолях запросов и просто делал через внешний отчет (без СКД)
в консоли СКД или во внешнем отчете (на СКД) выполняется с задвоением строк
3. Said-We 18.06.24 16:35 Сейчас в теме
(1) Например, две даты отгрузки по этой строке.
Зачем этот маленький запрос было в отельный файл помещать?
Многие даже смотреть его не будут.
5. mikl79 119 19.06.24 07:09 Сейчас в теме
(3), запрос не маленький, он не помещается на экране
текст запроса добавил в текст сообщения
4. Vlan 36 19.06.24 06:58 Сейчас в теме
Я бы в консоли посмотрел вывод временных таблиц. Наверняка есть парные строки, удовлетворяющие условию соединения. SQL обычно не врет, а честно соединяет все возможное.
6. romulanin 19.06.24 07:32 Сейчас в теме
в файле запроса и в схеме в последнем запросе таблицы местами попутаны при соединении
9. mikl79 119 19.06.24 07:56 Сейчас в теме
(6), да я это уже заметил с утра исправил, спасибо за внимательность, но ошибка остается
7. starjevschik 19.06.24 07:34 Сейчас в теме
здесь не видно свертки по идентификатору строки. Что там в регистре этом, сколько записей на одну строку может быть?
ВЫБРАТЬ
СуммыДокументовВВалютахУчета.Регистратор КАК ЗаказКлиента,
СуммыДокументовВВалютахУчета.ИдентификаторСтроки КАК ИдентификаторСтроки,
СуммыДокументовВВалютахУчета.СуммаБезНДС КАК СуммаБезНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДС + СуммыДокументовВВалютахУчета.СуммаНДС КАК СуммаСНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл КАК СуммаБезНДС_Руб,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл + СуммыДокументовВВалютахУчета.СуммаНДСРегл КАК СуммаСНДС_Руб
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
РегистрСведений.СуммыДокументовВВалютахУчета КАК СуммыДокументовВВалютахУчета
ГДЕ
СуммыДокументовВВалютахУчета.Регистратор В
(ВЫБРАТЬ
ВТ_ТолькоЗаказы.ЗаказКлиента КАК ЗаказКлиента
ИЗ
ВТ_ТолькоЗаказы КАК ВТ_ТолькоЗаказы)

ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
ИдентификаторСтроки 
Показать
10. mikl79 119 19.06.24 08:00 Сейчас в теме
(7), там нет дублей строк
Прикрепленные файлы:
11. mikl79 119 19.06.24 08:18 Сейчас в теме
в левой таблице "ВТ_Врем" тоже нет дублей
Прикрепленные файлы:
12. Kernelbug 54 19.06.24 08:43 Сейчас в теме
СКД модифицирует и улучшает запрос по своему усмотрению, что может привести к нетривиальным проблемам.
Попробуйте через тот же СКД (а не консоль запросов) выводить не конечный запрос, а его составляющие из временных таблиц. Возможно, там будут подсказки.
13. mikl79 119 19.06.24 09:22 Сейчас в теме
(12), вот вывод Левой (ВТ_Врем) и Правой (ВТ_Суммы) таблиц именно через СКД - нет задвоений по полям: "Заказ клиента" и "Идентификатор строки"
Прикрепленные файлы:
14. Kernelbug 54 19.06.24 10:04 Сейчас в теме
Давайте попробуем следующий шаг.
У нас таблица ВТ_Суммы не содержит никаких группировок. Это просто ровненькая выборка из РС. Давайте вместо помещения его во временную таблицу попробуем напрямую выборку регистра присоединить к ВТ_Врем.

Кстати, вижу в выборке ВТ_Суммы потенциально опасное (с точки зрения оптимизатора СКД) место: вложенный запрос к ВТ_ТолькоЗаказы. Я б по-другому скомпоновал сам этот запрос ВТ_Суммы: сделал бы выборку из ВТ_ТолькоЗаказы со внутренним соединением к регистру СуммыДокументовВВалютахУчета. И план запроса, наверное, получше станет.

Ну а если напрямую записи регистра присоединять к ВТ_Врем, то там никакой вложенный запрос не понадобится.
15. mikl79 119 19.06.24 11:09 Сейчас в теме
(14), спасибо за участие, решил проблему так - сгруппировал ВТ_Врем
Прикрепленные файлы:
Запрос новый.txt
16. mikl79 119 19.06.24 11:15 Сейчас в теме
СКД неоднозначно работает - если ВТ_Врем (без группировки) использовать в другом пакете и выбирать поля без ресурса СуммаНДС (числовой показатель), то он задваивает, если выбирать с ресурсом, то не задваивает.
Получается вывод такой: если в выборке из ВТ есть ресурс, то поля группируются автоматом, иначе нет.
п.с. теперь всегда буду группировать ВТ
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот