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