Оптимизация запроса для Фреш

1. Teut_Vlad 190 14.07.23 19:46 Сейчас в теме
Фреш вернул отчет на долработку из за неэффективности запроса, можете подсказать что нужно изменить?
Дополнительный отчет/обработка не должен приводить к чрезмерной нагрузке на компоненты сервиса или клиентское приложение.
Используется соединение с виртуальной таблицей. Не рекомендуется использовать соединения с виртуальными таблицами. Поместите результат виртуальной таблицы во временную таблицу и проиндексируйте поля по которым будут соединения.
Подробнее с причинами неоптимальной работы запросов и их оптимизацией можно ознакомиться здесь https://its.1c.ru/db/v8std#browse:13:-1:26:28

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	РасчетыСПокупателямиОстатки.Организация,
	РасчетыСПокупателямиОстатки.Контрагент,
	РасчетыСПокупателямиОстатки.Договор,
	РасчетыСПокупателямиОстатки.Документ,
	РасчетыСПокупателямиОстатки.Заказ,
	РасчетыСПокупателямиОстатки.Договор.ВалютаРасчетов,
	РасчетыСПокупателямиОстатки.ТипРасчетов,
	0,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(РасчетыСПокупателямиОстатки.Документ) = ТИП(Документ.ЗаказПокупателя)
				И РасчетыСПокупателямиОстатки.Документ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЗаказПокупателя.ЗаказНаряд)
			ТОГДА РасчетыСПокупателямиОстатки.Документ.Финиш
		ИНАЧЕ РасчетыСПокупателямиОстатки.Документ.Дата
	КОНЕЦ,
	РасчетыСПокупателямиОстатки.Договор.СрокОплатыПокупателя,
	0,
	0,
	ВЫРАЗИТЬ(ИнформацияПоДокументамСрезПоследних.Информация КАК СТРОКА(25)),
	РасчетыСПокупателямиОстатки.СуммаОстаток
ИЗ
	РегистрНакопления.РасчетыСПокупателями.Остатки КАК РасчетыСПокупателямиОстатки
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИнформацияПоДокументам.СрезПоследних(, ) КАК ИнформацияПоДокументамСрезПоследних
		ПО РасчетыСПокупателямиОстатки.Документ = ИнформацияПоДокументамСрезПоследних.Документ
ГДЕ
	РасчетыСПокупателямиОстатки.Документ <> НЕОПРЕДЕЛЕНО
	И РасчетыСПокупателямиОстатки.СуммаОстаток < 0
	И РасчетыСПокупателямиОстатки.СуммаВалОстаток < 0
	И НЕ РасчетыСПокупателямиОстатки.ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Долг)
	И РАЗНОСТЬДАТ(РасчетыСПокупателямиОстатки.Документ.Дата, &Период, ДЕНЬ) >= 0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	РасчетыСПокупателями.Организация КАК Организация,
	РасчетыСПокупателями.Контрагент КАК Контрагент,
	РасчетыСПокупателями.Договор КАК Договор,
	РасчетыСПокупателями.Документ КАК Документ,
	РасчетыСПокупателями.ИнформацияПоОплате КАК ИнформацияПоОплате,
	РасчетыСПокупателями.Заказ КАК Заказ,
	РасчетыСПокупателями.Валюта КАК Валюта,
	РасчетыСПокупателями.ТипРасчетов КАК ТипРасчетов,
	РасчетыСПокупателями.СуммаОстаток КАК ДЗадолженность,
	ВЫБОР
		КОГДА РасчетыСПокупателями.СрокОплатыОтПокупателя > 0
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПокупателями.СрокОплатыОтПокупателя
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПокупателями.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д5,
	РасчетыСПокупателями.СуммаВалОстаток КАК ДВЗадолженностьВал,
	ВЫБОР
		КОГДА РасчетыСПокупателями.СрокОплатыОтПокупателя > 0
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПокупателями.СрокОплатыОтПокупателя
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПокупателями.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ5,
	ВЫБОР
		КОГДА РасчетыСПокупателями.СрокОплатыОтПокупателя > 0
				И РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПокупателями.СрокОплатыОтПокупателя
			ТОГДА РАЗНОСТЬДАТ(РасчетыСПокупателями.ДатаРасчетногоДокумента, &Период, ДЕНЬ) - РасчетыСПокупателями.СрокОплатыОтПокупателя
		ИНАЧЕ 0
	КОНЕЦ КАК СрокПросрочки,
	РасчетыСПокупателями.КЗадолженность КАК КЗадолженность
ИЗ
	Вт_РасчетыСПокупателями КАК РасчетыСПокупателями
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
21. Teut_Vlad 190 02.08.23 15:09 Сейчас в теме +1 $m
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РасчетыСПоставщикамиОстатки.Организация КАК Организация,
	РасчетыСПоставщикамиОстатки.Контрагент КАК Контрагент,
	РасчетыСПоставщикамиОстатки.Договор КАК Договор,
	РасчетыСПоставщикамиОстатки.Документ КАК Документ,
	РасчетыСПоставщикамиОстатки.Документ.Дата КАК ДатаРасчетногоДокумента,
	РасчетыСПоставщикамиОстатки.Заказ КАК Заказ,
	РасчетыСПоставщикамиОстатки.Договор.ВалютаРасчетов КАК Валюта,
	РасчетыСПоставщикамиОстатки.ТипРасчетов КАК ТипРасчетов,
	РасчетыСПоставщикамиОстатки.Договор.СрокОплатыПоставщику КАК СрокОплатыПоставщику,
	РасчетыСПоставщикамиОстатки.СуммаОстаток КАК СуммаОстаток,
	РасчетыСПоставщикамиОстатки.СуммаВалОстаток КАК СуммаВалОстаток,
	0 КАК ДЗадолженность
ПОМЕСТИТЬ Вт_РасчетыСПоставщикамиОбщая
ИЗ
	РегистрНакопления.РасчетыСПоставщиками.Остатки КАК РасчетыСПоставщикамиОстатки
ГДЕ
	РасчетыСПоставщикамиОстатки.Документ <> НЕОПРЕДЕЛЕНО
	И РАЗНОСТЬДАТ(РасчетыСПоставщикамиОстатки.Документ.Дата, &Период, ДЕНЬ) >= 0

ИНДЕКСИРОВАТЬ ПО
	Организация,
	Контрагент,
	Договор,
	Документ,
	ДатаРасчетногоДокумента,
	Заказ,
	Валюта,
	ТипРасчетов,
	СрокОплатыПоставщику
;

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Вт_РасчетыСПоставщикамиОбщая.Организация,
	Вт_РасчетыСПоставщикамиОбщая.Контрагент,
	Вт_РасчетыСПоставщикамиОбщая.Договор,
	Вт_РасчетыСПоставщикамиОбщая.Документ,
	Вт_РасчетыСПоставщикамиОбщая.ДатаРасчетногоДокумента,
	Вт_РасчетыСПоставщикамиОбщая.Заказ,
	Вт_РасчетыСПоставщикамиОбщая.Валюта,
	Вт_РасчетыСПоставщикамиОбщая.ТипРасчетов,
	Вт_РасчетыСПоставщикамиОбщая.СрокОплатыПоставщику,
	0,
	0,
	Вт_РасчетыСПоставщикамиОбщая.СуммаОстаток
ИЗ
	Вт_РасчетыСПоставщикамиОбщая КАК Вт_РасчетыСПоставщикамиОбщая
ГДЕ
	Вт_РасчетыСПоставщикамиОбщая.ТипРасчетов <> ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Долг)
	И Вт_РасчетыСПоставщикамиОбщая.СуммаОстаток < 0
	И Вт_РасчетыСПоставщикамиОбщая.СуммаВалОстаток < 0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РасчетыСПоставщиками.Организация КАК Организация,
	РасчетыСПоставщиками.Контрагент КАК Контрагент,
	РасчетыСПоставщиками.Договор КАК Договор,
	РасчетыСПоставщиками.Документ КАК Документ,
	РасчетыСПоставщиками.Заказ КАК Заказ,
	РасчетыСПоставщиками.Договор.ВалютаРасчетов КАК Валюта,
	РасчетыСПоставщиками.ТипРасчетов КАК ТипРасчетов,
	РасчетыСПоставщиками.СуммаОстаток КАК Задолженность,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д5,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ5,
	РасчетыСПоставщиками.СуммаВалОстаток КАК ЗадолженностьВал,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) - РасчетыСПоставщиками.СрокОплатыПоставщику
		ИНАЧЕ 0
	КОНЕЦ КАК СрокПросрочки,
	РасчетыСПоставщиками.ДЗадолженность КАК ДЗадолженность
ИЗ
	Вт_РасчетыСПоставщиками КАК РасчетыСПоставщиками
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 14.07.23 20:11 Сейчас в теме
(1)
что нужно изменить?
Я так понимаю, что русский язык для тебя не родной?

Используется соединение с виртуальной таблицей. Не рекомендуется использовать соединения с виртуальными таблицами. Поместите результат виртуальной таблицы во временную таблицу и проиндексируйте поля по которым будут соединения.
Дмитрий74Чел; +1 Ответить
3. пользователь 14.07.23 20:27
Сообщение было скрыто модератором.
...
5. пользователь 14.07.23 21:31
Сообщение было скрыто модератором.
...
13. Said-We 16.07.23 23:43 Сейчас в теме
(1)
можете подсказать что нужно изменить?
Если честно, то всё нужно изменить.
РАЗНОСТЬДАТ(РасчетыСПокупателямиОстатки.Документ.Дата, &Период, ДЕНЬ) >= 0
На вскидку, зачем такое сложное условие? Можно же просто даты сравнить - правда? И это условие должно идти первым, так как оно обрубит львиную долю документов, если имеются виду ближайшие документы от некого &Период.
Две идентичных выборки из одной таблицы + одинаковые левые соединения и потом объединение - зачем так издеваться над сервером?
Условие в где касается только первой таблицы. Так зачем соединять ВСЕ остатки от регистра, что-бы потом обрубить почти все? Обруби до соединения.
Это на вскидку - далее смотреть не стал.
А про временные таблицы и индексирование - это уже вопрос №85.
Дальше сам.

P.S. Со стартмани мало кто знает что делать и курс их не известен. По мне, так они не нужны :-)
14. Teut_Vlad 190 16.07.23 23:45 Сейчас в теме
(13) это условие из типого отчета УНФ, трогать я его не буду
4. LifeRock 14.07.23 20:49 Сейчас в теме
РегистрНакопления.РасчетыСПокупателями.Остатки и РегистрСведений.ИнформацияПоДокументам.СрезПоследних поместите во временные таблицы с индексом по полю Документ и потом уже их соединяйте в запросе как сейчас
Дмитрий74Чел; Teut_Vlad; +2 Ответить
6. user1880116 15.07.23 09:16 Сейчас в теме
Цікаво, кому отримає винагорода?
7. XAKEP 15.07.23 18:16 Сейчас в теме
(6)
мені цікавіше, чому фреш "тиснуть" на криві доробки

а "замовники" - я сказав (!!!) - платять за криве, а потім за виправлення.
Teut_Vlad; +1 Ответить
8. user1880116 16.07.23 16:20 Сейчас в теме
(7) А де ви бачили, що програмісти 1C роблять щось не криво?
Teut_Vlad; +1 Ответить
9. XAKEP 16.07.23 18:01 Сейчас в теме
(8)
в демо базах прошлых лет :) от 5 минус
не унф , ерп и прочая "универсальность"

ут и розница
12. user1880116 16.07.23 23:22 Сейчас в теме
(9)
в демо базах прошлых лет
Они только кажутся вылизанными и стабильными. Именно потому что они прошлых лет.
10. Teut_Vlad 190 16.07.23 19:13 Сейчас в теме
(6) тому кто пришлет переделанный запрос
11. user1880116 16.07.23 23:11 Сейчас в теме
(10) Це буде близько 40 грівніасів... Ні, ти можеш себе за ці гроші.
Teut_Vlad; +1 Ответить
15. Said-We 16.07.23 23:46 Сейчас в теме
(14) Тогда не чего тут оптимизировать, если текст запроса нельзя трогать.
user1880116; Oldsad; +2 Ответить
16. Oldsad 17.07.23 02:46 Сейчас в теме
Первое что бросается в глаза - нет условий в параметрах виртуальной таблицы. "Документ" и "ТипРасчетов" - это измерения, и соответственно условия по ним можно перенести в параметры

Соединение с регистром сведений можно убрать из первого запроса и добавить во второй без проблем, добавить отбор по полю "Документ" в параметры регистра сведений

Ну и добавьте индекс по полю "Документ", если уж так требуют. Не факт что это намного ускорит запрос, а построение индекса тоже занимает время.
17. dyahon 18.07.23 16:17 Сейчас в теме
выглядит конечно страшненько
я бы сделал следующее:

1) Вт_РасчетыСПокупателями - собрал бы одним запросом без объединения

    И РасчетыСПокупателямиОстатки.СуммаОстаток <> 0
    И РасчетыСПокупателямиОстатки.СуммаВалОстаток <> 0


(получаем все что нужно из виртуальной таблицы, без всяких соединений, вычислений и ВЫБОР КОГДА, а во втором пакете уже бы довычислил что нужно)

2) Избавляемся от обращения к составному типу (План запроса постарается постучаться ко всем возможным документам, поэтому это прям плохо)

Вместо
ВЫБОР
        КОГДА ТИПЗНАЧЕНИЯ(РасчетыСПокупателямиОстатки.Документ) = ТИП(Документ.ЗаказПокупателя)
                И РасчетыСПокупателямиОстатки.Документ.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийЗаказПокупателя.ЗаказНаряд)
            ТОГДА РасчетыСПокупателямиОстатки.Документ.Финиш
        ИНАЧЕ РасчетыСПокупателямиОстатки.Документ.Дата
    КОНЕЦ КАК ДатаРасчетногоДокумента


уже во второй таблице, через левое соединение к таблице Документ.ЗаказПокупателя - вычисляем поле "ДатаРасчетногоДокумента"

3) Вместо многократного ВЫБОР КОГДА для расчета интервала создал бы временную таблицу, а после уже табличку присеодинил

ВЫБРАТЬ
      1 КАК НачалоИнтервала
      3 КАК КонецИнтервала
ОБЪЕДИНИТЬ ВСЕ
      4 КАК НачалоИнтервала
      7 КАК КонецИнтервала
....
Показать
18. Said-We 18.07.23 21:45 Сейчас в теме
(17) Автору это не надо. Он хочет оптимизировать запрос не внося изменения в текст запроса.
Это как в анекдоте про то как спросили военного, о том, как защитится от передачи спида половым путем. :-)
19. Teut_Vlad 190 19.07.23 13:47 Сейчас в теме
(18) я жду ответа от Фреш с вынесеным поле Документ в Индекс
20. Vitaly1C8 19.07.23 19:58 Сейчас в теме
Как я понимаю предполагается следующее:
1. Вначале сделать выборку из вирт-таблицы РегистрНакопления.РасчетыСПокупателями.Остатки()
поместить во временную таблицу ВТ ; ИНДЕКСИРОВАТЬ ПО РасчетыСПокупателямиОстатки.Документ
желательно получать остатки &НаДату
условия секции ГДЕ перенести в условия виртуальной таблицы РегистрНакопления.РасчетыСПокупателями.Остатки()

2. добавить условие к вирт-таблице РегистрСведений.ИнформацияПоДокументам.СрезПоследних(, )
типа: ИнформацияПоДокументамСрезПоследних.Документ В (Выбрать Документ ИЗ ВТ)
желательно получать остатки &НаДату
21. Teut_Vlad 190 02.08.23 15:09 Сейчас в теме +1 $m
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РасчетыСПоставщикамиОстатки.Организация КАК Организация,
	РасчетыСПоставщикамиОстатки.Контрагент КАК Контрагент,
	РасчетыСПоставщикамиОстатки.Договор КАК Договор,
	РасчетыСПоставщикамиОстатки.Документ КАК Документ,
	РасчетыСПоставщикамиОстатки.Документ.Дата КАК ДатаРасчетногоДокумента,
	РасчетыСПоставщикамиОстатки.Заказ КАК Заказ,
	РасчетыСПоставщикамиОстатки.Договор.ВалютаРасчетов КАК Валюта,
	РасчетыСПоставщикамиОстатки.ТипРасчетов КАК ТипРасчетов,
	РасчетыСПоставщикамиОстатки.Договор.СрокОплатыПоставщику КАК СрокОплатыПоставщику,
	РасчетыСПоставщикамиОстатки.СуммаОстаток КАК СуммаОстаток,
	РасчетыСПоставщикамиОстатки.СуммаВалОстаток КАК СуммаВалОстаток,
	0 КАК ДЗадолженность
ПОМЕСТИТЬ Вт_РасчетыСПоставщикамиОбщая
ИЗ
	РегистрНакопления.РасчетыСПоставщиками.Остатки КАК РасчетыСПоставщикамиОстатки
ГДЕ
	РасчетыСПоставщикамиОстатки.Документ <> НЕОПРЕДЕЛЕНО
	И РАЗНОСТЬДАТ(РасчетыСПоставщикамиОстатки.Документ.Дата, &Период, ДЕНЬ) >= 0

ИНДЕКСИРОВАТЬ ПО
	Организация,
	Контрагент,
	Договор,
	Документ,
	ДатаРасчетногоДокумента,
	Заказ,
	Валюта,
	ТипРасчетов,
	СрокОплатыПоставщику
;

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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	Вт_РасчетыСПоставщикамиОбщая.Организация,
	Вт_РасчетыСПоставщикамиОбщая.Контрагент,
	Вт_РасчетыСПоставщикамиОбщая.Договор,
	Вт_РасчетыСПоставщикамиОбщая.Документ,
	Вт_РасчетыСПоставщикамиОбщая.ДатаРасчетногоДокумента,
	Вт_РасчетыСПоставщикамиОбщая.Заказ,
	Вт_РасчетыСПоставщикамиОбщая.Валюта,
	Вт_РасчетыСПоставщикамиОбщая.ТипРасчетов,
	Вт_РасчетыСПоставщикамиОбщая.СрокОплатыПоставщику,
	0,
	0,
	Вт_РасчетыСПоставщикамиОбщая.СуммаОстаток
ИЗ
	Вт_РасчетыСПоставщикамиОбщая КАК Вт_РасчетыСПоставщикамиОбщая
ГДЕ
	Вт_РасчетыСПоставщикамиОбщая.ТипРасчетов <> ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Долг)
	И Вт_РасчетыСПоставщикамиОбщая.СуммаОстаток < 0
	И Вт_РасчетыСПоставщикамиОбщая.СуммаВалОстаток < 0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	РасчетыСПоставщиками.Организация КАК Организация,
	РасчетыСПоставщиками.Контрагент КАК Контрагент,
	РасчетыСПоставщиками.Договор КАК Договор,
	РасчетыСПоставщиками.Документ КАК Документ,
	РасчетыСПоставщиками.Заказ КАК Заказ,
	РасчетыСПоставщиками.Договор.ВалютаРасчетов КАК Валюта,
	РасчетыСПоставщиками.ТипРасчетов КАК ТипРасчетов,
	РасчетыСПоставщиками.СуммаОстаток КАК Задолженность,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПоставщиками.СуммаОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК Д5,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал1
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) >= 0
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ1,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал2
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал1
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ2,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал3
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал2
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ3,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) <= &Интервал4
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал3
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ4,
	ВЫБОР
		КОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > &Интервал4
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВ5,
	РасчетыСПоставщиками.СуммаВалОстаток КАК ЗадолженностьВал,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РасчетыСПоставщиками.СуммаВалОстаток
		ИНАЧЕ 0
	КОНЕЦ КАК ДВПросроченнаяЗадолженность,
	ВЫБОР
		КОГДА РасчетыСПоставщиками.СрокОплатыПоставщику > 0
				И РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) > РасчетыСПоставщиками.СрокОплатыПоставщику
			ТОГДА РАЗНОСТЬДАТ(РасчетыСПоставщиками.ДатаРасчетногоДокумента, &Период, ДЕНЬ) - РасчетыСПоставщиками.СрокОплатыПоставщику
		ИНАЧЕ 0
	КОНЕЦ КАК СрокПросрочки,
	РасчетыСПоставщиками.ДЗадолженность КАК ДЗадолженность
ИЗ
	Вт_РасчетыСПоставщиками КАК РасчетыСПоставщиками
Показать
Оставьте свое сообщение

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