CRM 2.0 при выполнении задачи очень долго думает

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
CRM 2.0 при выполнении задачи очень долго думает, CRM 2.0 при выполнении задачи очень долго думает
 
Тормозит в этом месте, в некоторых замерах код выполняется до 17 секунд.
Причем на очень частой операции - выполнение задачи
Модуль КалендарныеГрафики

// Алгоритм работает следующим образом:
//  Получаем для ДатаОт каким днем с начала года эта дата является
//  К этому дню прибавляем количество дней с начала года, которое должно быть у конечной даты
//  Получаем максимальный номер дня в году для этого года
//  Проверяем, не превышает ли полученное число количество дней
//  Если превышает, используем следующий год, если нет, то текущий
//  Ищем, минимальную дату, которая соответствует нужному нам дню в году

Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаДат.ИндексСтроки,
| ТаблицаДат.КоличествоДней
|ПОМЕСТИТЬ ВТ_ТаблицаДат
|ИЗ
| &Таблица КАК ТаблицаДат
|;
|
| X
|ВЫБРАТЬ
| КалендарныеГрафики.Календарь,
| КалендарныеГрафики.ДатаГрафика,
| КалендарныеГрафики.Год,
| КалендарныеГрафики.ДеньВключенВГрафик
|ПОМЕСТИТЬ КалендарныйГрафик
|ИЗ
| РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
|ГДЕ
| КалендарныеГрафики.Календарь = &Календарь
|
|ИНДЕКСИРОВАТЬ ПО
| КалендарныеГрафики.Календарь,
| КалендарныеГрафики.ДатаГрафика,
| КалендарныеГрафики.Год,
| КалендарныеГрафики.ДеньВключенВГрафик
|;
|
| X
|ВЫБРАТЬ
| КалендарныеГрафики.Календарь,
| КалендарныеГрафики.ДатаГрафика,
| КалендарныеГрафики.Год,
| КалендарныеГрафики.ДеньВключенВГрафик,
| КОЛИЧЕСТВО(ДниВключенныеВГрафик.ДатаГрафика) КАК КоличествоДнейВГрафикеСНачалаГода
|ПОМЕСТИТЬ КалендарныеГрафики
|ИЗ
| КалендарныйГрафик КАК КалендарныеГрафики
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ КалендарныйГрафик КАК ДниВключенныеВГрафик
| ПО КалендарныеГрафики.Календарь = ДниВключенныеВГрафик.Календарь
| И КалендарныеГрафики.Год = ДниВключенныеВГрафик.Год
| И КалендарныеГрафики.ДатаГрафика >= ДниВключенныеВГрафик.ДатаГрафика
| И (ДниВключенныеВГрафик.ДеньВключенВГрафик)
|
|СГРУППИРОВАТЬ ПО
| КалендарныеГрафики.Календарь,
| КалендарныеГрафики.ДатаГрафика,
| КалендарныеГрафики.Год,
| КалендарныеГрафики.ДеньВключенВГрафик
|;
|
| X
|ВЫБРАТЬ
| МАКСИМУМ(ГрафикЗаГод.КоличествоДнейВГрафикеСНачалаГода) КАК КоличествоДнейВсего
|ПОМЕСТИТЬ ВТ_КоличествоРабочихДнейВГоду
|ИЗ
| КалендарныеГрафики КАК ГрафикЗаГод
|ГДЕ
| ГрафикЗаГод.Календарь = &Календарь
| И ГрафикЗаГод.Год = ГОД(&ДатаОт)
|;
|
| X
|ВЫБРАТЬ
| ГрафикЗаГод.Год,
| ГрафикЗаГод.КоличествоДнейВГрафикеСНачалаГода КАК КоличествоДнейВГрафикеСНачалаГода,
| КоличествоРабочихДнейВГоду.КоличествоДнейВсего
|ПОМЕСТИТЬ ВТ_КалендарныйГрафик
|ИЗ
| КалендарныеГрафики КАК ГрафикЗаГод
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КоличествоРабочихДнейВГоду КАК КоличествоРабочихДнейВГоду
| ПО (ГрафикЗаГод.Календарь = &Календарь)
| И (ГрафикЗаГод.ДатаГрафика = &ДатаОт)
|
|ИНДЕКСИРОВАТЬ ПО
| КоличествоДнейВГрафикеСНачалаГода
|;
|
| X
|ВЫБРАТЬ
| КалендарныйГрафик.ИндексСтроки,
| КалендарныйГрафик.КоличествоДней,
| ЕСТЬNULL(КалендарныйГрафик.ДатаПоКалендарю, НЕОПРЕДЕЛЕНО) КАК ДатаПоКалендарю
|ИЗ
| (ВЫБРАТЬ
| ГрафикЗаГодДатаОт.ИндексСтроки КАК ИндексСтроки,
| ГрафикЗаГодДатаОт.КоличествоДней КАК КоличествоДней,
| МИНИМУМ(ГрафикЗаГод.ДатаГрафика) КАК ДатаПоКалендарю
| ИЗ
| (ВЫБРАТЬ
| ТаблицаДат.ИндексСтроки КАК ИндексСтроки,
| ТаблицаДат.КоличествоДней КАК КоличествоДней,
| ВЫБОР
| КОГДА КалендарныйГрафик.КоличествоДнейВсего ЕСТЬ NULL
| ИЛИ КалендарныйГрафик.КоличествоДнейВсего >= КалендарныйГрафик.КоличествоДнейВГрафикеСНачалаГода + ТаблицаДат.КоличествоДней
| ТОГДА ГОД(&ДатаОт)
| ИНАЧЕ ГОД(&ДатаОт) + 1
| КОНЕЦ КАК ГодДатыОкончания,
| КалендарныйГрафик.КоличествоДнейВГрафикеСНачалаГода + ТаблицаДат.КоличествоДней - ВЫБОР
| КОГДА КалендарныйГрафик.КоличествоДнейВсего < КалендарныйГрафик.КоличествоДнейВГрафикеСНачалаГода + ТаблицаДат.КоличествоДней
| ТОГДА КалендарныйГрафик.КоличествоДнейВсего
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоДнейДляДатыПо
| ИЗ
| ВТ_ТаблицаДат КАК ТаблицаДат
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КалендарныйГрафик КАК КалендарныйГрафик
| ПО (ИСТИНА)) КАК ГрафикЗаГодДатаОт
| ЛЕВОЕ СОЕДИНЕНИЕ КалендарныеГрафики КАК ГрафикЗаГод
| ПО (ГрафикЗаГод.Календарь = &Календарь)
| И ГрафикЗаГодДатаОт.КоличествоДнейДляДатыПо = ГрафикЗаГод.КоличествоДнейВГрафикеСНачалаГода
| И ГрафикЗаГодДатаОт.ГодДатыОкончания = ГрафикЗаГод.Год
| И (ГрафикЗаГод.ДатаГрафика >= &ДатаОт)
|
| СГРУППИРОВАТЬ ПО
| ГрафикЗаГодДатаОт.ИндексСтроки,
| ГрафикЗаГодДатаОт.КоличествоДней) КАК КалендарныйГрафик
|
|УПОРЯДОЧИТЬ ПО
| КалендарныйГрафик.ИндексСтроки";
Выборка = Запрос.Выполнить().Выбрать();
 
up
 
Добрый день, Артем!
Написала письмо разработчику для проверки данной ситуации, как будет ответ сразу отпишусь Вам.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С