Долго выполняется запрос, база бухгалтерия 3.0 + Аренда
Всем привет,подскажите пожалуйста можно ли убыстрить такой запрос? Выполняется очень долго даже для одного договора, до этого запрос работал в базе версии 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));
Запрос.УстановитьПараметр("ДоговорКонтрагента" ,ДоговорКонтрагента);
Запрос.УстановитьПараметр("СпособНачисленияПропорциональноСуммеСроку",ПараметрыНачисленияПени.СпособНачисленияПени = Перечисления.АР_СпособыНачисленияПени.ПропорциональноСуммеСроку);
Запрос.УстановитьПараметр("СтавкаПени",ПараметрыНачисленияПени.СтавкаПени);
Запрос.УстановитьПараметр("КоличествоПериодов", ПараметрыНачисленияПени.МесяцСрокаОплаты);
Запрос.УстановитьПараметр("НачалоПериодаНачисленияПени", ДатаНачалаРасчета);
ДанныеПоНачислениям = Запрос.Выполнить().Выгрузить();
ПоказатьПо теме из базы знаний
- Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки
- 1С:Бухгалтерия сельскохозяйственного предприятия
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- Обзор облаков для 1С
- Backend силами 1С. 4 кейса внедрений
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Медленно выполняется из за того, что на самом деле идет выборка детальных записей.
Потом регистр сведений, тоже запрос детальных записей, но это уже мелочи. Создавайте менеджер временных таблиц, разбивайте пакет, выполняя каждый запрос отдельно - увидите, что колом встает самый первый.
РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты(
Потом регистр сведений, тоже запрос детальных записей, но это уже мелочи. Создавайте менеджер временных таблиц, разбивайте пакет, выполняя каждый запрос отдельно - увидите, что колом встает самый первый.
(12)
Стопорится этот запрос, первый где остатки обороты быстро пролетает, вот именно где левое соединение очень долго идёт
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АР_ВзаиморасчетыПоАрендеОстатки.УслугаАренды КАК УслугаАренды,
| АР_ВзаиморасчетыПоАрендеОстатки.ОбъектАренды КАК ОбъектАренды,
| АР_ВзаиморасчетыПоАрендеОстатки.СчетНаАренду КАК СчетНаАренду,
| АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов КАК ДокументРасчетов,
| НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ) КАК ПериодАренды,
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ) = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.Период, ДЕНЬ)
| ИНАЧЕ НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ)
| КОНЕЦ КАК ДатаРасчета,
| СУММА(АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовНачальныйОстаток) КАК Сумма,
| МАКСИМУМ(ВЫБОР
| КОГДА АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов ССЫЛКА Документ.АР_НачислениеАренднойПлаты
| ТОГДА ДОБАВИТЬКДАТЕ(ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ), МЕСЯЦ, &КоличествоПериодов), ДЕНЬ, &СрокОплаты)
| ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1)
| КОНЕЦ) КАК СрокОплаты,
| АР_ВзаиморасчетыПоАрендеОстатки.СуммаРасход,
| АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовРасход КАК СуммаВалРасход
|ПОМЕСТИТЬ ВТЗадолженность
|ИЗ
| РегистрНакопления.АР_ВзаиморасчетыПоАренде.ОстаткиИОбороты(
| &НачалоПериодаНачисленияПени,
| &МоментНачисленияПени,
| Запись,
| ,
| ДоговорКонтрагента = &ДоговорКонтрагента
| И НЕ Депозит
| И НЕ Пени) КАК АР_ВзаиморасчетыПоАрендеОстатки
|ГДЕ
| АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовНачальныйОстаток > 0
|
|СГРУППИРОВАТЬ ПО
| АР_ВзаиморасчетыПоАрендеОстатки.ОбъектАренды,
| АР_ВзаиморасчетыПоАрендеОстатки.СчетНаАренду,
| АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов,
| АР_ВзаиморасчетыПоАрендеОстатки.УслугаАренды,
| НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДокументРасчетов.ОкончаниеПериода, МЕСЯЦ),
| АР_ВзаиморасчетыПоАрендеОстатки.СуммаРасход,
| АР_ВзаиморасчетыПоАрендеОстатки.СуммаВзаиморасчетовРасход,
| ВЫБОР
| КОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ) = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.Период, ДЕНЬ)
| ИНАЧЕ НАЧАЛОПЕРИОДА(АР_ВзаиморасчетыПоАрендеОстатки.ДатаОплаты, ДЕНЬ)
| КОНЕЦ
|;
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Задолженность.УслугаАренды КАК УслугаАренды,
| Задолженность.ОбъектАренды КАК ОбъектАренды,
| Задолженность.СчетНаАренду КАК СчетНаАренду,
| Задолженность.ДокументРасчетов КАК ДокументРасчетов,
| Задолженность.ДатаРасчета КАК ДатаРасчета,
| Задолженность.Сумма КАК Сумма,
| Задолженность.СрокОплаты КАК СрокОплаты,
| ДанныеПроизводственногоКалендаряОграничитель.Дата КАК СрокОплатыСОтсрочкой,
| Задолженность.ПериодАренды,
| Задолженность.СуммаРасход,
| Задолженность.СуммаВалРасход
|ПОМЕСТИТЬ ВТЗадолженность2
|ИЗ
| ВТЗадолженность КАК Задолженность
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
| ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
| И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)
|
|СГРУППИРОВАТЬ ПО
| Задолженность.ОбъектАренды,
| Задолженность.УслугаАренды,
| Задолженность.СчетНаАренду,
| Задолженность.ДокументРасчетов,
| Задолженность.ДатаРасчета,
| Задолженность.СрокОплаты,
| Задолженность.Сумма,
| ДанныеПроизводственногоКалендаряОграничитель.Дата,
| Задолженность.ПериодАренды,
| Задолженность.СуммаРасход,
| Задолженность.СуммаВалРасход
|
|ИМЕЮЩИЕ
| СУММА(ВЫБОР
| КОГДА Задолженность.СрокОплаты = ДанныеПроизводственногоКалендаряОграничитель.Дата
| ТОГДА 1
| КОГДА &УчитыватьТолькоРабочиеДниОтсрочки
| ТОГДА ВЫБОР
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (&РабочийДень)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ 1
| КОНЕЦ) = &ДнейОтсрочки + 1
|;
|//////////////////////////////////////////////////////////// ////////////////////
ПоказатьСтопорится этот запрос, первый где остатки обороты быстро пролетает, вот именно где левое соединение очень долго идёт
(17) Махнул только регистр с календарем, т.к. в 3.0 он по другому стал называться и некоторые реквизиты поменялись, вот как было до
|ИЗ
| ВТЗадолженность КАК Задолженность
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарьОграничитель
| ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарьОграничитель.ДатаКалендаря
| ПО (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= Задолженность.СрокОплаты)
| И (РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= Задолженность.ДатаРасчета)
(19) ты что то не то сделал, убери из вкладки группировки все строки, а так же условие
|ИМЕЮЩИЕ
| СУММА(ВЫБОР
| КОГДА Задолженность.СрокОплаты = ДанныеПроизводственногоКалендаряОграничитель.Дата
| ТОГДА 1
| КОГДА &УчитыватьТолькоРабочиеДниОтсрочки
| ТОГДА ВЫБОР
| КОГДА ДанныеПроизводственногоКалендаря.ВидДня В (&РабочийДень)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
| ИНАЧЕ 1
| КОНЕЦ) = &ДнейОтсрочки + 1
Показать
(23)скорее всего проблема в данной строке, для чего все это?
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
(8)
У меня вот тут же ограничение стоит на отбор дат в календаре
|ИЗ
| ВТЗадолженность КАК Задолженность
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
| ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
| И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)
У меня вот тут же ограничение стоит на отбор дат в календаре
Вот до этого ограничителя
Может быть 2021 год 12 месяцев и 9 дней, а то и больше :-).
Если у вас там данные за 6 лет, то они все подойдут под этот отбор если например взять сегодняшнее число.
Может быть надо ограничить диапазон дат и снизу? Для уменьшения выборки возьмите интеревал: Между Задолженность.СрокОплаты и ДанныеПроизводственногоКалендаряОграничитель.Дата.
ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
Может быть 2021 год 12 месяцев и 9 дней, а то и больше :-).
Если у вас там данные за 6 лет, то они все подойдут под этот отбор если например взять сегодняшнее число.
Может быть надо ограничить диапазон дат и снизу? Для уменьшения выборки возьмите интеревал: Между Задолженность.СрокОплаты и ДанныеПроизводственногоКалендаряОграничитель.Дата.
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
| ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
| И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаряОграничитель
| ПО ДанныеПроизводственногоКалендаря.Дата <= ДанныеПроизводственногоКалендаряОграничитель.Дата
| ПО (ДанныеПроизводственногоКалендаря.Дата >= Задолженность.СрокОплаты)
| И (ДанныеПроизводственногоКалендаря.Дата <= Задолженность.ДатаРасчета)
Если мы хотя бы берем период за 5 лет, то у вас уже этот запрос выдаст 2кк+ записей. И все ради того, чтобы найти количество дней в рабочем периоде. и тоже самое будет выполняться для всех дней. Хотя для всех дней, достаточно: ДОБАВИТЬКДАТЕ(Задолженность.СрокОплаты, ДЕНЬ, &ДнейОтсрочки) или +1 тут?
неважно. Остается посчитать тоже самое, но только по рабочим дням. Левое соединение по 2м лямам дат? Такоое себе.
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДанныеПроизводственногоКалендаря.Дата КАК Дата,
ДанныеПроизводственногоКалендаря.ВидДня КАК ВидДня
ПОМЕСТИТЬ ВтРабочиеДни
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МИНИМУМ(ВТЗадолженность .СрокОплаты) КАК ДатаНачала
ИЗ
ВТЗадолженность КАК ВТЗадолженность) КАК ОтборПоДатам
ПО ДанныеПроизводственногоКалендаря.Дата >= ОтборПоДатам.ДатаНачала
ИНДЕКСИРОВАТЬ ПО
ДанныеПроизводственногоКалендаря.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВтРабочиеДни.Дата КАК Дата,
СУММА(ВЫБОР
КОГДА ВтРабочиеДни1.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК Индекс
ПОМЕСТИТЬ РабочиеПериодыСИндексом
ИЗ
ВтРабочиеДни КАК ВтРабочиеДни
ЛЕВОЕ СОЕДИНЕНИЕ ВтРабочиеДни КАК ВтРабочиеДни1
ПО ВтРабочиеДни.Дата >= ВтРабочиеДни1.Дата
СГРУППИРОВАТЬ ПО
ВтРабочиеДни.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТЗадолженность.СрокОплаты КАК СрокОплаты,
РабочиеПериодыСИндексом1.Дата КАК СрокОплатыСОтсрочкой
ИЗ
ВТЗадолженность КАК ВТЗадолженность
ЛЕВОЕ СОЕДИНЕНИЕ РабочиеПериодыСИндексом КАК РабочиеПериодыСИндексом
ПО ВтДаты.ДатаПоиска = РабочиеПериодыСИндексом.Дата
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
МИНИМУМ(РабочиеПериодыСИндексом.Дата) КАК Дата,
РабочиеПериодыСИндексом.Индекс КАК Индекс
ИЗ
РабочиеПериодыСИндексом КАК РабочиеПериодыСИндексом
СГРУППИРОВАТЬ ПО
РабочиеПериодыСИндексом.Индекс) КАК РабочиеПериодыСИндексом1
ПО (РабочиеПериодыСИндексом.Индекс + &ДнейОтсрочки = РабочиеПериодыСИндексом1.Индекс)
ПоказатьТакое, должно взлететь, поля подберете правильно и таблицы. Для 5ти лет запрос 1.5 секунды выполнялся. Со сроком оплаты 1 день
РабочиеПериодыСИндексом1.Дата КАК СрокОплатыСОтсрочкой
ВЫБОР КОГДА &УчитыватьТолькоРабочиеДниОтсрочки ТОГДА ДОБАВИТЬКДАТЕ(Задолженность.СрокОплаты, ДЕНЬ, &ДнейОтсрочки) ИНАЧЕ РабочиеПериодыСИндексом1.Дата КОНЕЦ КАК СрокОплатыСОтсрочкой
Но я бы лучше сделал через объединение, и везде во врем таблицах для дат понавставлял это условие, чтобы у меня производственный календарь не соединялся, когда он не нужен
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот