Долго выполняется запрос, база бухгалтерия 3.0 + Аренда

1. user973528 08.12.21 14:50 Сейчас в теме
Всем привет,подскажите пожалуйста можно ли убыстрить такой запрос? Выполняется очень долго даже для одного договора, до этого запрос работал в базе версии 2.0, выполняется быстро, перенес запрос на 3.0, запускаю в тонком клиенте, очень долго выполняется
Сам запрос находится в модуле объекта на сервере, заранее спасибо

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

	СписокРабочихДней = Новый СписокЗначений;
	СписокРабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
	СписокРабочихДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
	Запрос.УстановитьПараметр("РабочийДень"						  , СписокРабочихДней);
	Запрос.УстановитьПараметр("ДнейОтсрочки"					  ,ПараметрыНачисленияПени.ОтсрочкаПоОплате);
	Запрос.УстановитьПараметр("УчитыватьТолькоРабочиеДниПросрочки",ПараметрыНачисленияПени.УчитыватьТолькоРабочиеДниПросрочки);
	Запрос.УстановитьПараметр("УчитыватьТолькоРабочиеДниОтсрочки" ,ПараметрыНачисленияПени.УчитыватьТолькоРабочиеДниОтсрочки);
	Запрос.УстановитьПараметр("ПустойСчетНаАренду"				  ,Документы.АР_СчетНаАренду.ПустаяСсылка());
	Запрос.УстановитьПараметр("ДатаНачисленияПени"				  , НачалоДня(МоментВремени));
	Запрос.УстановитьПараметр("МоментНачисленияПени"			  , НачалоДня(МоментВремени + 60*60*24));
	Запрос.УстановитьПараметр("СрокОплаты"						  , ?(ПараметрыНачисленияПени.СрокОплаты = 0, 0, ПараметрыНачисленияПени.СрокОплаты - 1));
	Запрос.УстановитьПараметр("ДоговорКонтрагента"				  ,ДоговорКонтрагента);
	Запрос.УстановитьПараметр("СпособНачисленияПропорциональноСуммеСроку",ПараметрыНачисленияПени.СпособНачисленияПени = Перечисления.АР_СпособыНачисленияПени.ПропорциональноСуммеСроку);
	Запрос.УстановитьПараметр("СтавкаПени",ПараметрыНачисленияПени.СтавкаПени);
	Запрос.УстановитьПараметр("КоличествоПериодов", ПараметрыНачисленияПени.МесяцСрокаОплаты);
	Запрос.УстановитьПараметр("НачалоПериодаНачисленияПени", ДатаНачалаРасчета);
	
	ДанныеПоНачислениям = Запрос.Выполнить().Выгрузить();
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. homer_ 78 08.12.21 14:59 Сейчас в теме
хотя бы напиши в какой ВТ тормозит.
3. acces969 344 08.12.21 14:59 Сейчас в теме
Медленно выполняется из за того, что
РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты(
на самом деле идет выборка детальных записей.
Потом регистр сведений, тоже запрос детальных записей, но это уже мелочи. Создавайте менеджер временных таблиц, разбивайте пакет, выполняя каждый запрос отдельно - увидите, что колом встает самый первый.
4. acces969 344 08.12.21 15:01 Сейчас в теме
(3) + Не используйте левое соединение тогда, когда его можно избежать (например, внутренним соединением или объединением). Тоже значительно проседает время, когда строк в таблицах очень много.
5. user973528 08.12.21 15:01 Сейчас в теме
(4) В первой таблице получается 2 строки выводит, а тормозит как я понял при сравнении с календарем
6. homer_ 78 08.12.21 15:06 Сейчас в теме
Посмотреть Производственные календари (Справочники). Одна там запись или ...
7. user973528 08.12.21 15:12 Сейчас в теме
(6) Одна запись, календарь РФ. В регистре сведений данных производственного календаря много записей, каждый день описан с признаком рабочий или праздничный
8. homer_ 78 08.12.21 15:14 Сейчас в теме
сколько записей в РегистрСведений.ДанныеПроизводственногоКалендаря
9. user973528 08.12.21 15:15 Сейчас в теме
(8) Много, начиная с 2001 год каждый день
12. homer_ 78 08.12.21 15:27 Сейчас в теме
(9) посчитай и скажи сколько.
13. user973528 08.12.21 15:28 Сейчас в теме
(12)
  "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    АР_ВзаиморасчетыПоАрендеОстатки.УслугаАренды КАК УслугаАренды,
    |    АР_ВзаиморасчетыПоАрендеОстатки.ОбъектАренды КАК ОбъектАренды,
    |    АР_ВзаиморасчетыПоАрендеОстатки.СчетНаАренду КАК СчетНаАренду,
    |    АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов КАК ДокументРасчетов,
    |    НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ) КАК ПериодАренды,
    |    ВЫБОР
    |        КОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ) = ДАТАВРЕМЯ(1, 1, 1)
    |            ТОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.Период, ДЕНЬ)
    |        ИНАЧЕ НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ)
    |    КОНЕЦ КАК ДатаРасчета,
    |    СУММА(АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовНачальныйОстаток) КАК Сумма,
    |    МАКСИМУМ(ВЫБОР
    |            КОГДА АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов ССЫЛКА Документ.АР_НачислениеАренднойПлаты
    |                ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ), МЕСЯЦ, &КоличествоПериодов), ДЕНЬ, &СрокОплаты)
    |            ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
    |        КОНЕЦ) КАК СрокОплаты,
    |    АР_ВзаиморасчетыПоАрендеОстатки.СуммаРасход,
    |    АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовРасход КАК СуммаВалРасход
    |ПОМЕСТИТЬ ВТЗадолженность
    |ИЗ
    |    РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты(
    |            &НачалоПериодаНачисленияПени,
    |            &МоментНачисленияПени,
    |            Запись,
    |            ,
    |            ДоговорКонтрагента = &ДоговорКонтрагента
    |                И НЕ Депозит
    |                И НЕ Пени) КАК АР_ВзаиморасчетыПоАрендеОстатки
    |ГДЕ
    |    АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовНачальныйОстаток > 0
    |
    |СГРУППИРОВАТЬ ПО
    |    АР_ВзаиморасчетыПоАрендеОстатки.ОбъектАренды,
    |    АР_ВзаиморасчетыПоАрендеОстатки.СчетНаАренду,
    |    АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов,
    |    АР_ВзаиморасчетыПоАрендеОстатки.УслугаАренды,
    |    НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ),
    |    АР_ВзаиморасчетыПоАрендеОстатки.СуммаРасход,
    |    АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовРасход,
    |    ВЫБОР
    |        КОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ) = ДАТАВРЕМЯ(1, 1, 1)
    |            ТОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.Период, ДЕНЬ)
    |        ИНАЧЕ НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ)
    |    КОНЕЦ
    |;
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Задолженность.УслугаАренды КАК УслугаАренды,
    |    Задолженность.ОбъектАренды КАК ОбъектАренды,
    |    Задолженность.СчетНаАренду КАК СчетНаАренду,
    |    Задолженность.ДокументРасчетов КАК ДокументРасчетов,
    |    Задолженность.ДатаРасчета КАК ДатаРасчета,
    |    Задолженность.Сумма КАК Сумма,
    |    Задолженность.СрокОплаты КАК СрокОплаты,
    |    ДанныеПроизводственногоКалендаряОграничитель.Дата КАК СрокОплатыСОтсрочкой,
    |    Задолженность.ПериодАренды,
    |    Задолженность.СуммаРасход,
    |    Задолженность.СуммаВалРасход
    |ПОМЕСТИТЬ ВТЗадолженность2
    |ИЗ
    |    ВТЗадолженность КАК Задолженность
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
    |            ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
    |        ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
    |            И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)
    |
    |СГРУППИРОВАТЬ ПО
    |    Задолженность.ОбъектАренды,
    |    Задолженность.УслугаАренды,
    |    Задолженность.СчетНаАренду,
    |    Задолженность.ДокументРасчетов,
    |    Задолженность.ДатаРасчета,
    |    Задолженность.СрокОплаты,
    |    Задолженность.Сумма,
    |    ДанныеПроизводственногоКалендаряОграничитель.Дата,
    |    Задолженность.ПериодАренды,
    |    Задолженность.СуммаРасход,
    |    Задолженность.СуммаВалРасход
    |
    |ИМЕЮЩИЕ
    |    СУММА(ВЫБОР
    |            КОГДА Задолженность.СрокОплаты = ДанныеПроизводственногоКалендаряОграничитель.Дата
    |                ТОГДА 1
    |            КОГДА &УчитыватьТолькоРабочиеДниОтсрочки
    |                ТОГДА ВЫБОР
    |                        КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (&РабочийДень)
    |                            ТОГДА 1
    |                        ИНАЧЕ 0
    |                    КОНЕЦ
    |            ИНАЧЕ 1
    |        КОНЕЦ) = &ДнейОтсрочки + 1
    |;
    |////////////////////////////////////////////////////////////­­////////////////////
Показать


Стопорится этот запрос, первый где остатки обороты быстро пролетает, вот именно где левое соединение очень долго идёт
14. homer_ 78 08.12.21 15:33 Сейчас в теме
(13) ты не можешь посчитать кол записей в регистре? скажи сколько там записей
15. user973528 08.12.21 15:37 Сейчас в теме
16. homer_ 78 08.12.21 15:40 Сейчас в теме
(15) или ты преувеличиваешь что раньше все было ок на Бух 2 или ты правил запрос.
17. homer_ 78 08.12.21 15:42 Сейчас в теме
(15) Как вариант убери в ВТЗадолженность2 все группировки и скажи сколь строк получается в ВТ по одному договору
18. user973528 08.12.21 15:43 Сейчас в теме
(17) Махнул только регистр с календарем, т.к. в 3.0 он по другому стал называться и некоторые реквизиты поменялись, вот как было до
	|ИЗ
	|	ВТЗадолженность КАК Задолженность
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарьОграничитель
	|			ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарьОграничитель.ДатаКалендаря
	|		ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= Задолженность.СрокОплаты)
	|			И (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= Задолженность.ДатаРасчета)
19. user973528 08.12.21 15:53 Сейчас в теме
20. homer_ 78 08.12.21 15:57 Сейчас в теме
(19) ты что то не то сделал, убери из вкладки группировки все строки, а так же условие
  |ИМЕЮЩИЕ
    |    СУММА(ВЫБОР
    |            КОГДА Задолженность.СрокОплаты = ДанныеПроизводственногоКалендаряОграничитель.Дата
    |                ТОГДА 1
    |            КОГДА &УчитыватьТолькоРабочиеДниОтсрочки
    |                ТОГДА ВЫБОР
    |                        КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (&РабочийДень)
    |                            ТОГДА 1
    |                        ИНАЧЕ 0
    |                    КОНЕЦ
    |            ИНАЧЕ 1
    |        КОНЕЦ) = &ДнейОтсрочки + 1
Показать
21. user973528 08.12.21 16:09 Сейчас в теме
22. homer_ 78 08.12.21 16:12 Сейчас в теме
(21) вы аренду на 6 лет оформляете? что то мне кажется многовато записей. Смотри что у тебя попадает лишнего в ВТЗадолженность2
23. user973528 08.12.21 16:13 Сейчас в теме
(22) Заметил что год подтягивает 2022, когда момент времени 2021
24. homer_ 78 08.12.21 16:25 Сейчас в теме
(23)скорее всего проблема в данной строке, для чего все это?
  |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
    |            ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
25. Sashares 34 08.12.21 17:18 Сейчас в теме
(24) Тоже не понял, зачем это внутреннее соединение.
28. dehro 5 12.12.21 11:12 Сейчас в теме
(13)
Попробуй у первой
Индексировать По ДатаРасчета
10. user973528 08.12.21 15:16 Сейчас в теме
(8)Получается он прокатывает каждую запись в регистре сведений? Из за этого так долго?
11. user973528 08.12.21 15:17 Сейчас в теме
(8)
  |ИЗ
    |    ВТЗадолженность КАК Задолженность
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
    |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
    |            ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
    |        ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
    |            И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)


У меня вот тут же ограничение стоит на отбор дат в календаре
26. user790708 09.12.21 19:23 Сейчас в теме
Вот до этого ограничителя
ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата

Может быть 2021 год 12 месяцев и 9 дней, а то и больше :-).
Если у вас там данные за 6 лет, то они все подойдут под этот отбор если например взять сегодняшнее число.
Может быть надо ограничить диапазон дат и снизу? Для уменьшения выборки возьмите интеревал: Между Задолженность.СрокОплаты и ДанныеПроизводственногоКалендаряОграничитель.Дата.
27. user790708 09.12.21 19:25 Сейчас в теме
(26)И, к стати, индексы в базе не битые? ТИИ с реиндексациейне делали? Если база SQL то ее тоже надо обслуживать постоянно средствами SQL-сервера
29. user1220551 17.12.21 12:19 Сейчас в теме
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
| ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
| И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)

Если мы хотя бы берем период за 5 лет, то у вас уже этот запрос выдаст 2кк+ записей. И все ради того, чтобы найти количество дней в рабочем периоде. и тоже самое будет выполняться для всех дней. Хотя для всех дней, достаточно: ДОБАВИТЬКДАТЕ(Задолженность.СрокОплаты, ДЕНЬ, &ДнейОтсрочки) или +1 тут?
неважно. Остается посчитать тоже самое, но только по рабочим дням. Левое соединение по 2м лямам дат? Такоое себе.

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

ИНДЕКСИРОВАТЬ ПО
	ДанныеПроизводственногоКалендаря.Дата
;

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

СГРУППИРОВАТЬ ПО
	ВтРабочиеДни.Дата
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТЗадолженность.СрокОплаты КАК СрокОплаты,
	РабочиеПериодыСИндексом1.Дата КАК СрокОплатыСОтсрочкой
ИЗ
	ВТЗадолженность КАК ВТЗадолженность
		ЛЕВОЕ СОЕДИНЕНИЕ РабочиеПериодыСИндексом КАК РабочиеПериодыСИндексом
		ПО ВтДаты.ДатаПоиска = РабочиеПериодыСИндексом.Дата
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			МИНИМУМ(РабочиеПериодыСИндексом.Дата) КАК Дата,
			РабочиеПериодыСИндексом.Индекс КАК Индекс
		ИЗ
			РабочиеПериодыСИндексом КАК РабочиеПериодыСИндексом
		
		СГРУППИРОВАТЬ ПО
			РабочиеПериодыСИндексом.Индекс) КАК РабочиеПериодыСИндексом1
		ПО (РабочиеПериодыСИндексом.Индекс + &ДнейОтсрочки = РабочиеПериодыСИндексом1.Индекс)
Показать


Такое, должно взлететь, поля подберете правильно и таблицы. Для 5ти лет запрос 1.5 секунды выполнялся. Со сроком оплаты 1 день

РабочиеПериодыСИндексом1.Дата КАК СрокОплатыСОтсрочкой
Можно заменить на
ВЫБОР КОГДА  &УчитыватьТолькоРабочиеДниОтсрочки ТОГДА ДОБАВИТЬКДАТЕ(Задолженность.СрокОплаты, ДЕНЬ, &ДнейОтсрочки) ИНАЧЕ РабочиеПериодыСИндексом1.Дата КОНЕЦ КАК СрокОплатыСОтсрочкой


Но я бы лучше сделал через объединение, и везде во врем таблицах для дат понавставлял это условие, чтобы у меня производственный календарь не соединялся, когда он не нужен
Оставьте свое сообщение

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