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 48 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 48 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 35 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С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

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

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день