Помогите, пожалуйста, ускорить выполнение запроса.

1. user1619761 09.12.22 10:03 Сейчас в теме
Доброго дня. Получаю данные запросом, на выходе таблица значений с количеством 4576 строк, но запрос работает очень долго. Подскажите, пожалуйста, как можно ускорить выполнение запроса?
Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
	Запрос.УстановитьПараметр("СчетДТ", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41"));
	Запрос.УстановитьПараметр("Организация", Организация);
	Запрос.Текст = "ВЫБРАТЬ
	|	ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
	|	МАКСИМУМ(ХозрасчетныйДвиженияССубконто.Регистратор.Дата) КАК РегистраторДата
	|ИЗ
	|	РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
	|			ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -12),
	|			&Дата,
	|			Регистратор.Проведен = ИСТИНА
	|				И СчетДт В ИЕРАРХИИ (&СчетДТ)
	|				И Организация = &Организация
	|				И СубконтоДт1 В
	|					(ВЫБРАТЬ
	|						ХозрасчетныйОстатки.Субконто1 КАК Номенклатура
	|					ИЗ
	|						РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ), , Организация = &Организация) КАК ХозрасчетныйОстатки),
	|			,
	|			) КАК ХозрасчетныйДвиженияССубконто
	|
	|СГРУППИРОВАТЬ ПО
	|	ХозрасчетныйДвиженияССубконто.Регистратор";
	Если Не Запрос.Выполнить().Пустой() Тогда
		Таблица = Запрос.Выполнить().Выгрузить();
	КонецЕсли;
Показать
По теме из базы знаний
Найденные решения
19. VPanin56 570 09.12.22 10:23 Сейчас в теме
(13) вот такой код в консоли выполнился в 2 раза быстрее

ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Номенклатура
ПОМЕСТИТЬ Ном
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ), , Организация = &Организация) КАК ХозрасчетныйОстатки

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
МАКСИМУМ(ХозрасчетныйДвиженияССубконто.Регистратор.Дата) КАК РегистраторДата
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -12),
&Дата,
СчетДт В ИЕРАРХИИ (&СчетДТ)
И Организация = &Организация
И СубконтоДт1 В
(ВЫБРАТЬ
Ном.Номенклатура
ИЗ
Ном),
,
) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
ХозрасчетныйДвиженияССубконто.Регистратор
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Prikum 3 09.12.22 10:10 Сейчас в теме
(1)
ИЕРАРХИИ
а точно нужна ИЕРАРХИЯ?
Alexei_Siva; +1 Ответить
5. user1619761 09.12.22 10:13 Сейчас в теме
3. VPanin56 570 09.12.22 10:11 Сейчас в теме
(1)
1) Очень долго это сколько ?
2) Есть замеры времени по точкам останова? ( или на глаз примерно 10-15 сек)
3) Где выполняется запрос ( консоль или обработка) ?


из рекомендаций

ВЫБРАТЬ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
| ХозрасчетныйОстатки.КоличествоОстаток Как Остатки
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ), , Организация = &Организация) КАК ХозрасчетныйОстатки

Вот это выбрать вначале запроса во временную таблицу,
а в основном делать выборку из нее
7. user1619761 09.12.22 10:14 Сейчас в теме
4. Prikum 3 09.12.22 10:11 Сейчас в теме
(1)и потом, может быть сделать через временные таблицы?
user1619761; kuzev; +2 Ответить
10. user1619761 09.12.22 10:16 Сейчас в теме
(4) так я этот запрос и буду помещать во временную таблицу в итоге. И потом еще другой запрос будет.
14. aka Любитель XML 09.12.22 10:17 Сейчас в теме
(10) ничего страшного. Пробуй через временную, быстрее должно быть
6. RustamZz 09.12.22 10:14 Сейчас в теме
(1)
Регистратор.Проведен = ИСТИНА
Точно можно убрать. И вместо
МАКСИМУМ(ХозрасчетныйДвиженияССубконто.Регистратор.Дата) КАК РегистраторДата
Период возможно подойдет.
8. Vitaly1C8 09.12.22 10:14 Сейчас в теме
(1) Необходимо в условии указать ТИПы документа с которыми работаем,
Можно вначале выполнить как есть сейчас, переписать список типов документов попавших в выборку, и далее добавить условие;
12. Vitaly1C8 09.12.22 10:16 Сейчас в теме
(1)
И СубконтоДт1 В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ХозрасчетныйОстатки.Субконто1 КАК Номенклатура
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ)
16. SlavaKron 09.12.22 10:19 Сейчас в теме
(12) Запрос по остаткам и так выберет только различные Субконто1. Слово РАЗЛИЧНЫЕ лишнее.
17. beldieff 09.12.22 10:20 Сейчас в теме
(1)
Если Не Запрос.Выполнить().Пустой() Тогда
        Таблица = Запрос.Выполнить().Выгрузить();
 КонецЕсли;
Зачем выполнять долгий запрос дважды?
user1619761; user1881120; +2 Ответить
18. Prikum 3 09.12.22 10:22 Сейчас в теме
(17)Просто автор не знает, что можно получить результат запроса и использовать уже его. ;)
20. user1619761 09.12.22 10:23 Сейчас в теме
(17)
(18) Спасибо, исправил
РезультатЗапроса = Запрос.Выполнить() 
Если Не РезультатЗапроса.Пустой() Тогда
Таблица = РезультатЗапроса.Выгрузить();
КонецЕсли;
9. VPanin56 570 09.12.22 10:15 Сейчас в теме
ХозрасчетныйОстатки.КоличествоОстаток Как Остатки вот это точно лишнее
11. user1619761 09.12.22 10:16 Сейчас в теме
(9)это я тут дописывал, потом понял, что ошибка будет из за этого, и исправил.
13. VPanin56 570 09.12.22 10:17 Сейчас в теме
Запрос автора без изменений в консоли выполнялся 44 с и выдал 1869 строк
19. VPanin56 570 09.12.22 10:23 Сейчас в теме
(13) вот такой код в консоли выполнился в 2 раза быстрее

ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Номенклатура
ПОМЕСТИТЬ Ном
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ), , Организация = &Организация) КАК ХозрасчетныйОстатки

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

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
МАКСИМУМ(ХозрасчетныйДвиженияССубконто.Регистратор.Дата) КАК РегистраторДата
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -12),
&Дата,
СчетДт В ИЕРАРХИИ (&СчетДТ)
И Организация = &Организация
И СубконтоДт1 В
(ВЫБРАТЬ
Ном.Номенклатура
ИЗ
Ном),
,
) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
ХозрасчетныйДвиженияССубконто.Регистратор
21. user1619761 09.12.22 10:24 Сейчас в теме
23. VPanin56 570 09.12.22 10:26 Сейчас в теме
(21)вот такой код в консоли выполнился в 2 раза быстрее в консоли за 22 сек

ВЫБРАТЬ
ХозрасчетныйОстатки.Субконто1 КАК Номенклатура
ПОМЕСТИТЬ Ном
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, Счет В ИЕРАРХИИ (&СчетДТ), , Организация = &Организация) КАК ХозрасчетныйОстатки

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

////////////////////////////////////////////////////////////­­////////////////////
ВЫБРАТЬ
ХозрасчетныйДвиженияССубконто.Регистратор КАК Регистратор,
МАКСИМУМ(ХозрасчетныйДвиженияССубконто.Регистратор.Дата) КАК РегистраторДата
ИЗ
РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -12),
&Дата,
СчетДт В ИЕРАРХИИ (&СчетДТ)
И Организация = &Организация
И СубконтоДт1 В
(ВЫБРАТЬ
Ном.Номенклатура
ИЗ
Ном),
,
) КАК ХозрасчетныйДвиженияССубконто

СГРУППИРОВАТЬ ПО
ХозрасчетныйДвиженияССубконто.Регистратор
22. Prikum 3 09.12.22 10:25 Сейчас в теме
(19)а внутреннее соединение не будет работать быстрее?
15. ranelio 09.12.22 10:19 Сейчас в теме
ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, -12) я бы заменил на параметр и лучше начало дня использовать. А сам запрос - так наверняка будет быстрее выбрать остатки с оборотами и отфильтровать те, что с ненулевыми на конец.
Оставьте свое сообщение

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