Оптимизация запроса по остаткам на каждый день (остаток, цена пересчитанная)

1. serg-lom89 76 30.06.17 11:05 Сейчас в теме
Есть запрос который получается остатки на каждую дату и цены по ним,идет пересчет потом через валюту
Тема может и заезжена до дыр,но все таки(

ВЫБРАТЬ
	ТоргОбъекты.Ссылка КАК ТорговыйОб,
	СоставТоргОбъекта.Ссылка КАК СкладТорговогоОбъекта,
	СоставТоргОбъекта.Склад КАК Склад
ПОМЕСТИТЬ ТорговыйОбъектТаблица
ИЗ
	Справочник.ТорговыйОбъект КАК ТоргОбъекты
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТорговыйОбъект.СоставТорговогоОбъекта КАК СоставТоргОбъекта
		ПО ТоргОбъекты.Ссылка = СоставТоргОбъекта.Ссылка
ГДЕ
	НЕ ТоргОбъекты.ПометкаУдаления

СГРУППИРОВАТЬ ПО
	ТоргОбъекты.Ссылка,
	СоставТоргОбъекта.Ссылка,
	СоставТоргОбъекта.Склад

ИНДЕКСИРОВАТЬ ПО
	Склад,
	СкладТорговогоОбъекта
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ПредприятияСоставПрелприятия.Ссылка КАК Предприятие,
	ПредприятияСоставПрелприятия.Организация КАК Организация
ПОМЕСТИТЬ ТЗ_Предприятий
ИЗ
	Справочник.Предприятия.СоставПреприятия КАК ПредприятияСоставПрелприятия
ГДЕ
	НЕ ПредприятияСоставПрелприятия.Ссылка.ПометкаУдаления

СГРУППИРОВАТЬ ПО
	ПредприятияСоставПрелприятия.Организация,
	ПредприятияСоставПрелприятия.Ссылка

ИНДЕКСИРОВАТЬ ПО
	Организация
;

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ПОМЕСТИТЬ ТЗ_Дат
ИЗ
	(ВЫБРАТЬ
		0 КАК a
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		1
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		2
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		3
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		4
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		5
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		6
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		7
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		8
	
	ОБЪЕДИНИТЬ
	
	ВЫБРАТЬ
		9) КАК aa
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК b
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК bb
		ПО (ИСТИНА)
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК c
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК cc
		ПО (ИСТИНА)
		ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			0 КАК d
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			1
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			2
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			3
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			4
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			5
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			6
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			7
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			8
		
		ОБЪЕДИНИТЬ
		
		ВЫБРАТЬ
			9) КАК dd
		ПО (ИСТИНА)
ГДЕ
	aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	НАЧАЛОПЕРИОДА(ТЗ_Дат.Период, ДЕНЬ) КАК ДатаКалендаря
ПОМЕСТИТЬ Дни
ИЗ
	ТЗ_Дат КАК ТЗ_Дат
;

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

СГРУППИРОВАТЬ ПО
	Движения.Номенклатура,
	ДНИ.ДатаКалендаря,
	Движения.Склад,
	СкладыОрганизаций.Организация,
	ЕСТЬNULL(ТорговыйОбъектТаблица.СкладТорговогоОбъекта, ЗНАЧЕНИЕ(справочник.ТорговыйОбъект.пустаяСсылка)),
	ЕСТЬNULL(ТЗ_Предприятий.Предприятие, ЗНАЧЕНИЕ(справочник.Предприятия.пустаяСсылка))
; 	

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТЗ_Остатки.Склад,
	ТЗ_Остатки.Период КАК Период,
	ТЗ_Остатки.Номенклатура КАК Номенклатура,
	ЦеныНоменклатуры.Валюта КАК Валюта,
	ЦеныНоменклатуры.Цена,
	ЦеныНоменклатуры.ЕдиницаИзмерения,
	ТЗ_Остатки.Организация,
	ТЗ_Остатки.ТорговаяТочка,
	ТЗ_Остатки.Предприятие,
	ТЗ_Остатки.ПусстаяСсылка,
	ТЗ_Остатки.КоличествоОстаток
ПОМЕСТИТЬ ТЗ_ТоварСЦеной
ИЗ
	ТЗ_Остатки КАК ТЗ_Остатки
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
		ПО ТЗ_Остатки.Номенклатура = ЦеныНоменклатуры.Номенклатура
			И (ЦеныНоменклатуры.ТипЦен.Код = "А00000004")
			И (ЦеныНоменклатуры.Период В
				(ВЫБРАТЬ
					МАКСИМУМ(ЦеныНоменклатуры.Период)
				ИЗ
					РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
				ГДЕ
					ЦеныНоменклатуры.Период <= ТЗ_Остатки.Период
					И ЦеныНоменклатуры.Номенклатура = ТЗ_Остатки.Номенклатура
					И ЦеныНоменклатуры.ТипЦен.Код = "А00000004"))

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТЗ_ТоварСЦеной.Период,
	ТЗ_ТоварСЦеной.Склад,
	ТЗ_ТоварСЦеной.Номенклатура,
	ЕСТЬNULL(ВЫРАЗИТЬ(ТЗ_ТоварСЦеной.Цена * ТЗ_ТоварСЦеной.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ТЗ_ТоварСЦеной.ЕдиницаИзмерения.Коэффициент * (КурсыВалют.Курс / КурсыВалют.Кратность) * 1 * ТЗ_ТоварСЦеной.КоличествоОстаток КАК ЧИСЛО(15, 2)), 0) КАК Стоимость,
	ТЗ_ТоварСЦеной.Организация,
	ТЗ_ТоварСЦеной.ТорговаяТочка,
	ТЗ_ТоварСЦеной.Предприятие,
	ТЗ_ТоварСЦеной.ПусстаяСсылка,
	ТЗ_ТоварСЦеной.КоличествоОстаток
ИЗ
	ТЗ_ТоварСЦеной КАК ТЗ_ТоварСЦеной
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
		ПО ТЗ_ТоварСЦеной.Валюта = КурсыВалют.Валюта
			И (КурсыВалют.ВалютаКотировки.Код = "978")
			И (КурсыВалют.Период В
				(ВЫБРАТЬ
					МАКСИМУМ(КурсыВалют.Период)
				ИЗ
					РегистрСведений.КурсыВалют КАК КурсыВалют
				ГДЕ
					КурсыВалют.Период <= ТЗ_ТоварСЦеной.Период
					И КурсыВалют.Валюта = ТЗ_ТоварСЦеной.Валюта
					И КурсыВалют.ВалютаКотировки.Код = "978"))
Показать




Подскажите,как можно оптимизировать?что то в голову не лезет.
PS
Вывожу его через СКД ?
КомпоновщикМакета.Выполнить отрабатывает быстро,моментально почти,а вот ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
тормозит
Прошу совета
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. VmvLer 30.06.17 11:54 Сейчас в теме
я создаю Вт-шки по простым подзапросам, а потом делаю ОДИН сложный запрос с вложенными запросами по этим Вт-шками. Образно можно представить это как метод "матрешки".

важно, чтобы во вложенных запросах были только Вт-шки и уже не было виртуальных или физических таблиц.

"Матрешка" оптимизирует как объем запроса так и его время выполнения
3. serg-lom89 76 30.06.17 12:11 Сейчас в теме
(2) и что ,при вложенных виртуалных таблицах на больших данных быстро работает*?
4. VmvLer 30.06.17 13:11 Сейчас в теме
(3) не знаю, я писал не об этом
5. serg-lom89 76 30.06.17 16:07 Сейчас в теме
(4)значит я не понял(
Можно развернуто более для "туговатых"
6. VmvLer 30.06.17 17:02 Сейчас в теме
(5) в (3) вы перепутали виртуальные и временные таблицы.

если ваш вопрос сформулировать как

и что ,при вложенных временных таблицах на больших данных быстро работает*?

то я об этом уже писал)
Оставьте свое сообщение

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