Всем привет! Помогите, пожалуйста, оптимизировать запрос. Очень долго выполняется. Буду рад любому совету, заранее спасибо!

Необходимо получить клиентов сотрудника по условиям: (в тч последнего документа Оценка значение >= 40 И дней с даты окончания договора >=200) ИЛИ количество документов Требование >=5.

```1c
    ВЫБРАТЬ
    СотрудникПоДоговоруСрезПоследних.Договор
    ПОМЕСТИТЬ Договоры
    ИЗ
    РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
    ГДЕ
    СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
    ;

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

    // Значение из тч Оценка
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.Оценка.ТБ КАК ОценкаКлиента
    ПО (ОценкаКлиента.Ссылка.Дата = Оценка.Дата)
    И (ОценкаКлиента.Ссылка.Контрагент = Оценка.Контрагент)

    // Поиск количества требований
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ТребованиеВозврате.Договор.Владелец КАК Контрагент,
    КОЛИЧЕСТВО(*) КАК Количество
    ИЗ
    Документ.ТребованиеВозврате КАК ТребованиеВозврате
    ГДЕ
    НЕ ТребованиеВозврате.Ссылка В
    (ВЫБРАТЬ
    ТребованияПоЭП.Требование
    ИЗ
    РегистрСведений.ТребованияПоЭП КАК ТребованияПоЭП)
    И ТребованиеВозврате.Проведен
    И НЕ ТребованиеВозврате.Договор = ЗНАЧЕНИЕ(Справочник.Договоры.ПустаяСсылка)
    СГРУППИРОВАТЬ ПО
    ТребованиеВозврате.Договор.Владелец) КАК Требования
    ПО АнкетаКлиента.Контрагент = Требования.Контрагент
    ГДЕ
    АнкетаКлиента.Договор В
    (ВЫБРАТЬ
    Договоры.Договор КАК Договор
    ИЗ
    Договоры КАК Договоры)
    И АнкетаКлиента.Договор.ДатаЗакрытия = &ПустаяДАта
    И ОценкаКлиента.Показатель = "Количество просроченных платежей"
    И (РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
    И ОценкаКлиента.Значение >= 40
    ИЛИ Требования.Количество >= 5)

    СГРУППИРОВАТЬ ПО
    АнкетаКлиента.Контрагент,
    АнкетаКлиента.Договор,
    АнкетаКлиента.Ссылка,
    ЛимитТребований.ДатаФормирования,
    ЛимитТребований.Доступно,
    ОценкаКлиента.Значение,
    Требования.Количество,
    ВЫБОР
    КОГДА РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ) >= 200
    ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
    КОНЕЦ
```
---
Святая корова......
Написано так, чтобы максимально затормозить запрос

```1c
    ........
    ИЗ
    РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
    ГДЕ
    СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
    ........
```

Отбор в параметры виртуальной таблицы

Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать

после этого возвращайтесь с замерами "до" и "после"
---
Святая корова......
Написано так, чтобы максимально затормозить запрос

```1c
    ........
    ИЗ
    РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
    ГДЕ
    СотрудникПоДоговоруСрезПоследних.Сотрудник = &Сотрудник
    ........
```

Отбор в параметры виртуальной таблицы

Все подзапросы в соединениях сделать временными таблицами, выбрать в них нужные поля, по которым будут соединения и отборы и индексировать

после этого возвращайтесь с замерами "до" и "после"
---
Спасибо, все сделал, как вы подсказали, запрос летает!
---
Ай, прекратите делать вложение запросы во время соединение, выводите их ВТ и после соединяйте внутренним соединением.
---
Спасибо!