1. user817897 24.03.20 00:19 Сейчас в теме

Почему очень долго выполняется запрос?

Подскажите пожалуйста,где косяк:
Запрос долго выполняется:
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ ВТ_Номенклатура
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)
	И НЕ Номенклатура.ЭтоГруппа
;

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

СГРУППИРОВАТЬ ПО
	ВТ_Номенклатура.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
	ВТ_Номенклатура.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК ОстатокНаСкладе,
	ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
	ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ВРезерве,
	ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) КАК ДоступныйОстаток,
	Номенклатура_ВЗаказах.Количество КАК КоличествоВЗаказах,
	Номенклатура_Размещённая.Количество КАК КоличествоРазмещ,
	0 КАК Поле1,
	ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(Номенклатура_ВЗаказах.Количество, 0) + ЕСТЬNULL(0, 0) КАК Остаток,
	ЕСТЬNULL(ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток, 0) - ЕСТЬNULL(ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток, 0) - ЕСТЬNULL(Номенклатура_ВЗаказах.Количество, 0) + ЕСТЬNULL(0, 0) - ЕСТЬNULL(Номенклатура_Размещённая.Количество, 0) КАК ОстатокРасчета
ИЗ
	ВТ_Номенклатура КАК ВТ_Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, &СегодняшняяДата, Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&СегодняшняяДата, ) КАК ТоварыВРезервеНаСкладахОстатки
			ПО ТоварыНаСкладахОстаткиИОбороты.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
		ПО ВТ_Номенклатура.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура
		ЛЕВОЕ СОЕДИНЕНИЕ Номенклатура_ВЗаказах КАК Номенклатура_ВЗаказах
		ПО (Номенклатура_ВЗаказах.Номенклатура = ВТ_Номенклатура.Номенклатура)
		ЛЕВОЕ СОЕДИНЕНИЕ Номенклатура_Размещённая КАК Номенклатура_Размещённая
		ПО ВТ_Номенклатура.Номенклатура = Номенклатура_Размещённая.Номенклатура
ГДЕ
	ТоварыНаСкладахОстаткиИОбороты.Качество = &Качество
	И ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад
Показать
Ответы
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
4. ben19791010 24.03.20 04:52 Сейчас в теме
(1)
И ВТ_Номенклатура.Номенклатура В ИЕРАРХИИ(&ГруппаНоменклатуры)

а это зачем?
14. user817897 24.03.20 11:04 Сейчас в теме
(4) есть набитая номенклатура,подбором, по которой необходимо выполнить этот запрос
5. nomad_irk 49 24.03.20 06:46 Сейчас в теме
(1)потому что вы выбираете все обороты без ограничения начальной даты.

Выделите запросы к виртуальным таблицам в отдельные пакеты запроса и используйте параметры виртуальных таблиц для отбора по складу, вместо конструкции ГДЕ.
13. user817897 24.03.20 11:03 Сейчас в теме
(5)я думаю в этом и будет косяк,спасибо,исправлю
20. user817897 26.03.20 17:31 Сейчас в теме
(5) поставил везде Период "между" датами, через конструкцию "ГДЕ", запрос всё равно долго выполняется)
21. nomad_irk 49 26.03.20 17:44 Сейчас в теме
(20)значит читайте букварь, на тему работы механизма виртиуальных таблиц регистров в 1с и про работу sql запросов в частности до полного просветления. Тем более, у вас есть возможность совместить теорию с практикой.
22. user817897 27.03.20 00:22 Сейчас в теме
(21)я ради прикола пробовал))
8. dhurricane 24.03.20 07:32 Сейчас в теме
12. user817897 24.03.20 11:02 Сейчас в теме
(8)Здесь значение так пометил просто)))) чтобы не забыл и прибавил количество из другого созданного запроса это количество)
2. twinkle 24.03.20 02:07 Сейчас в теме
А вообще запрос рабочий? просто вижу во второй и третьей таблице "Левое" соединение и условия на обе стороны. При таком наложении условий соединение становиться внутренним.
11. user817897 24.03.20 11:01 Сейчас в теме
(2)Запрос работает как надо,да,со связями немного перемудрил)
3. t278 36 24.03.20 02:31 Сейчас в теме
как бы сделал я.
Запустил "Инструмент разработчика", отладка запросов.
Указал параметры....
Запуск, и там можно посмотреть время выполнения каждого из под запросов.
Далее анализ.

2) способ это SQL проверка плана выполнения
6. d.samsonov92y 24.03.20 06:50 Сейчас в теме
(3)
Инструмент разработчи
можете рассказать про отладку запросов подробнее?
7. koln 24.03.20 07:03 Сейчас в теме
Индексировать поля, которые будут участвовать в соединениях.
9. MuxaH 24.03.20 07:53 Сейчас в теме
(7) Это ж, говорят, не панацея...
15. user817897 24.03.20 11:05 Сейчас в теме
17. koln 24.03.20 11:30 Сейчас в теме
(9)Тем не менее, фирма "1С" рекомендует использовать индексы при создании ВТ, как раз для оптимизации запроса. Ну а автору поста можно это проверить на практике как раз.
18. MuxaH 24.03.20 12:05 Сейчас в теме
(17) Рекомендует да, но иногда создание и поддержка индекса приносит куда больше затрат чем пользы, поэтому и говорят, что в каждом конкретном случае лучше разбираться - нужен индекс или нет. Однозначного ответа тут нет.
19. koln 24.03.20 12:53 Сейчас в теме
(18)Да, я потому и написал, что автору нужно этот момент проверить на своем запросе.
10. Fril 24.03.20 08:49 Сейчас в теме
Зачем вообще тащить всю номенклатуру из справочника если можно сразу вытащить номенклатуру из ТЧ Товары документа и проверять остатки на дату документа.
16. user817897 24.03.20 11:05 Сейчас в теме
(10) согласен,перемудрил,сейчас исправлю)
23. sergio199 18 27.03.20 09:10 Сейчас в теме
Сделайте выборку по регистрам после первого запроса по номенклатуре виртуальной таблицы, а потом с результатом выборки из регистра делайте соединение.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий программист 1С
Санкт-Петербург
зарплата от 130 000 руб.
Полный день

Специалист 1 категории (Программист 1С ФЗД)
Фрязино
зарплата от 110 000 руб.
Полный день

Специалист 1 категории (Программист 1С)
Фрязино
зарплата от 110 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист 1 категории (Методист-аналитик 1С)
Фрязино
зарплата от 100 000 руб.
Полный день