задвоение строк в отчете на СКД при левом соединении в запросе
Добрый день.
Версия платформы: 8.3.24.1548
Версия конфигурации: 1С:ERP Управление предприятием 2 (2.5.16.107)
субд: ms sql 2019
При формировании отчета на СКД задваиваются строки при левом соединении в запросе.
Прилагаю скрин-шоты:
1) отчет на СКД - тут видно, что строки задвоены
2) отчет через Консоль запросов - тут видно, что задвоения нет
Вяснилось, что это из-за Левого соединения в последнем пакете запроса.
Сравнивал исходный Запрос и Запрос в Схеме СКД - они одинаковые!
Так же пригалаю файлы: Запрос (текст) и Схему СКД.
Пожалуйста помогите разобраться как можо исправить / обойти ошибку.
Текст запроса:
Версия платформы: 8.3.24.1548
Версия конфигурации: 1С:ERP Управление предприятием 2 (2.5.16.107)
субд: ms sql 2019
При формировании отчета на СКД задваиваются строки при левом соединении в запросе.
Прилагаю скрин-шоты:
1) отчет на СКД - тут видно, что строки задвоены
2) отчет через Консоль запросов - тут видно, что задвоения нет
Вяснилось, что это из-за Левого соединения в последнем пакете запроса.
Сравнивал исходный Запрос и Запрос в Схеме СКД - они одинаковые!
Так же пригалаю файлы: Запрос (текст) и Схему СКД.
Пожалуйста помогите разобраться как можо исправить / обойти ошибку.
Текст запроса:
ВЫБРАТЬ
ЗаказыКлиентовОбороты.ЗаказКлиента КАК ЗаказКлиента,
ЗаказыКлиентовОбороты.Номенклатура КАК Номенклатура,
ЗаказыКлиентовОбороты.КодСтроки КАК КодСтроки,
ЗаказыКлиентовОбороты.СуммаПриход КАК СуммаСНДС
ПОМЕСТИТЬ ВТ_Заказы
ИЗ
РегистрНакопления.ЗаказыКлиентов.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ЗаказыКлиентовОбороты
ГДЕ
ТИПЗНАЧЕНИЯ(ЗаказыКлиентовОбороты.Регистратор) = ТИП(Документ.ЗаказКлиента)
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Номенклатура,
КодСтроки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Заказы.ЗаказКлиента КАК ЗаказКлиента
ПОМЕСТИТЬ ВТ_ТолькоЗаказы
ИЗ
ВТ_Заказы КАК ВТ_Заказы
СГРУППИРОВАТЬ ПО
ВТ_Заказы.ЗаказКлиента
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЗаказКлиентаТовары.Ссылка КАК ЗаказКлиента,
ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
ЗаказКлиентаТовары.КодСтроки КАК КодСтроки,
ЗаказКлиентаТовары.ИдентификаторСтроки КАК ИдентификаторСтроки,
ЗаказКлиентаТовары.ДатаОтгрузки КАК ДатаОтгрузки
ПОМЕСТИТЬ ВТ_ТЧ_Заказов
ИЗ
Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
ГДЕ
ЗаказКлиентаТовары.Ссылка В
(ВЫБРАТЬ
ВТ_ТолькоЗаказы.ЗаказКлиента КАК ЗаказКлиента
ИЗ
ВТ_ТолькоЗаказы КАК ВТ_ТолькоЗаказы)
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Номенклатура,
КодСтроки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Заказы.ЗаказКлиента КАК ЗаказКлиента,
ВТ_Заказы.Номенклатура КАК Номенклатура,
ВТ_ТЧ_Заказов.ИдентификаторСтроки КАК ИдентификаторСтроки,
ВТ_Заказы.СуммаСНДС КАК СуммаСНДС,
ВТ_ТЧ_Заказов.ДатаОтгрузки КАК ДатаОтгрузки
ПОМЕСТИТЬ ВТ_Врем
ИЗ
ВТ_Заказы КАК ВТ_Заказы
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТЧ_Заказов КАК ВТ_ТЧ_Заказов
ПО ВТ_Заказы.ЗаказКлиента = ВТ_ТЧ_Заказов.ЗаказКлиента
И ВТ_Заказы.Номенклатура = ВТ_ТЧ_Заказов.Номенклатура
И ВТ_Заказы.КодСтроки = ВТ_ТЧ_Заказов.КодСтроки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
СуммыДокументовВВалютахУчета.Регистратор КАК ЗаказКлиента,
СуммыДокументовВВалютахУчета.ИдентификаторСтроки КАК ИдентификаторСтроки,
СуммыДокументовВВалютахУчета.СуммаБезНДС КАК СуммаБезНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДС + СуммыДокументовВВалютахУчета.СуммаНДС КАК СуммаСНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл КАК СуммаБезНДС_Руб,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл + СуммыДокументовВВалютахУчета.СуммаНДСРегл КАК СуммаСНДС_Руб
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
РегистрСведений.СуммыДокументовВВалютахУчета КАК СуммыДокументовВВалютахУчета
ГДЕ
СуммыДокументовВВалютахУчета.Регистратор В
(ВЫБРАТЬ
ВТ_ТолькоЗаказы.ЗаказКлиента КАК ЗаказКлиента
ИЗ
ВТ_ТолькоЗаказы КАК ВТ_ТолькоЗаказы)
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
ИдентификаторСтроки
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента КАК ЗаказКлиента,
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
СУММА(ВЫБОР
КОГДА НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродажОбороты.Период, ГОД) = НАЧАЛОПЕРИОДА(&КонецПериода, ГОД)
ТОГДА ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиРеглОборот
ИНАЧЕ 0
КОНЕЦ) КАК ОтгрузкаФактТекущийГод
ПОМЕСТИТЬ ВТ_ОтгрузкиФакт
ИЗ
РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , Регистратор, ) КАК ВыручкаИСебестоимостьПродажОбороты
ГДЕ
(ТИПЗНАЧЕНИЯ(ВыручкаИСебестоимостьПродажОбороты.Регистратор) = ТИП(Документ.АктВыполненныхРабот)
ИЛИ ТИПЗНАЧЕНИЯ(ВыручкаИСебестоимостьПродажОбороты.Регистратор) = ТИП(Документ.РеализацияТоваровУслуг))
СГРУППИРОВАТЬ ПО
ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента,
ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ_Врем.ЗаказКлиента КАК ЗаказКлиента,
ВТ_Врем.Номенклатура КАК Номенклатура,
ВТ_Врем.ИдентификаторСтроки КАК ИдентификаторСтроки,
ВТ_Суммы.СуммаБезНДС_Вал КАК СуммаБезНДС_Вал,
ВТ_Суммы.СуммаСНДС_Вал КАК СуммаСНДС_Вал,
ВТ_Суммы.СуммаБезНДС_Руб КАК СуммаБезНДС_Руб,
ВТ_Суммы.СуммаСНДС_Руб КАК СуммаСНДС_Руб
ИЗ
ВТ_Врем КАК ВТ_Врем
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Суммы КАК ВТ_Суммы
ПО (ВТ_Врем.ЗаказКлиента = ВТ_Суммы.ЗаказКлиента)
И (ВТ_Врем.ИдентификаторСтроки = ВТ_Суммы.ИдентификаторСтроки)
УПОРЯДОЧИТЬ ПО
ЗаказКлиента,
Номенклатура
ИТОГИ
СУММА(СуммаБезНДС_Вал),
СУММА(СуммаСНДС_Вал),
СУММА(СуммаБезНДС_Руб),
СУММА(СуммаСНДС_Руб)
ПО
ОБЩИЕ
АВТОУПОРЯДОЧИВАНИЕ
ПоказатьПрикрепленные файлы:
Схема СКД.xml
По теме из базы знаний
Найденные решения
(14), спасибо за участие, решил проблему так - сгруппировал ВТ_Врем
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
здесь не видно свертки по идентификатору строки. Что там в регистре этом, сколько записей на одну строку может быть?
ВЫБРАТЬ
СуммыДокументовВВалютахУчета.Регистратор КАК ЗаказКлиента,
СуммыДокументовВВалютахУчета.ИдентификаторСтроки КАК ИдентификаторСтроки,
СуммыДокументовВВалютахУчета.СуммаБезНДС КАК СуммаБезНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДС + СуммыДокументовВВалютахУчета.СуммаНДС КАК СуммаСНДС_Вал,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл КАК СуммаБезНДС_Руб,
СуммыДокументовВВалютахУчета.СуммаБезНДСРегл + СуммыДокументовВВалютахУчета.СуммаНДСРегл КАК СуммаСНДС_Руб
ПОМЕСТИТЬ ВТ_Суммы
ИЗ
РегистрСведений.СуммыДокументовВВалютахУчета КАК СуммыДокументовВВалютахУчета
ГДЕ
СуммыДокументовВВалютахУчета.Регистратор В
(ВЫБРАТЬ
ВТ_ТолькоЗаказы.ЗаказКлиента КАК ЗаказКлиента
ИЗ
ВТ_ТолькоЗаказы КАК ВТ_ТолькоЗаказы)
ИНДЕКСИРОВАТЬ ПО
ЗаказКлиента,
ИдентификаторСтроки
Показать
СКД модифицирует и улучшает запрос по своему усмотрению, что может привести к нетривиальным проблемам.
Попробуйте через тот же СКД (а не консоль запросов) выводить не конечный запрос, а его составляющие из временных таблиц. Возможно, там будут подсказки.
Попробуйте через тот же СКД (а не консоль запросов) выводить не конечный запрос, а его составляющие из временных таблиц. Возможно, там будут подсказки.
Давайте попробуем следующий шаг.
У нас таблица ВТ_Суммы не содержит никаких группировок. Это просто ровненькая выборка из РС. Давайте вместо помещения его во временную таблицу попробуем напрямую выборку регистра присоединить к ВТ_Врем.
Кстати, вижу в выборке ВТ_Суммы потенциально опасное (с точки зрения оптимизатора СКД) место: вложенный запрос к ВТ_ТолькоЗаказы. Я б по-другому скомпоновал сам этот запрос ВТ_Суммы: сделал бы выборку из ВТ_ТолькоЗаказы со внутренним соединением к регистру СуммыДокументовВВалютахУчета. И план запроса, наверное, получше станет.
Ну а если напрямую записи регистра присоединять к ВТ_Врем, то там никакой вложенный запрос не понадобится.
У нас таблица ВТ_Суммы не содержит никаких группировок. Это просто ровненькая выборка из РС. Давайте вместо помещения его во временную таблицу попробуем напрямую выборку регистра присоединить к ВТ_Врем.
Кстати, вижу в выборке ВТ_Суммы потенциально опасное (с точки зрения оптимизатора СКД) место: вложенный запрос к ВТ_ТолькоЗаказы. Я б по-другому скомпоновал сам этот запрос ВТ_Суммы: сделал бы выборку из ВТ_ТолькоЗаказы со внутренним соединением к регистру СуммыДокументовВВалютахУчета. И план запроса, наверное, получше станет.
Ну а если напрямую записи регистра присоединять к ВТ_Врем, то там никакой вложенный запрос не понадобится.
(14), спасибо за участие, решил проблему так - сгруппировал ВТ_Врем
Прикрепленные файлы:
СКД неоднозначно работает - если ВТ_Врем (без группировки) использовать в другом пакете и выбирать поля без ресурса СуммаНДС (числовой показатель), то он задваивает, если выбирать с ресурсом, то не задваивает.
Получается вывод такой: если в выборке из ВТ есть ресурс, то поля группируются автоматом, иначе нет.
п.с. теперь всегда буду группировать ВТ
Получается вывод такой: если в выборке из ВТ есть ресурс, то поля группируются автоматом, иначе нет.
п.с. теперь всегда буду группировать ВТ
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот