Доброго времени суток. Помогите, пожалуйста, разобраться, в чем накосячил? Очень долго выполняется запрос (от Запрос.Текст = до Результат = Запрос.Выполнить()). Пробовал на одном документе, с одной строкой, даже на нем выполняется очень долго.
```1c
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("СчетУчета", ПланыСчетов.Хозрасчетный.ТоварыНаСкладах);
    Запрос.УстановитьПараметр("Контрагент", Контрагент);
    Запрос.УстановитьПараметр("НачПериода", НачалоПериода);
    Запрос.УстановитьПараметр("КонПериода", КонецПериода);
    Запрос.Текст = "ВЫБРАТЬ
    | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    | РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | РеализацияТоваровУслугТовары.Количество КАК Количество,
    | РеализацияТоваровУслугТовары.Ссылка.Дата КАК ДатаДокумента
    |ИЗ
    | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    | РеализацияТоваровУслугТовары.СчетУчета = &СчетУчета
    | И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
    | И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
    | И РеализацияТоваровУслугТовары.Ссылка.Контрагент = &Контрагент";
    Результат = Запрос.Выполнить();

    Если Не Результат.Пустой() Тогда

    ТаблицаЗапроса = Результат.Выгрузить();

    КонецЕсли;
```
---
Попробуйте левое соединение, это вынудит оптимизатор сначала выбирать сами документы (по которым можно сделать хороший индекс), и только потом выбирать ТЧ, по которой хорошего индекса нет

```1c
    ВЫБРАТЬ
    тч.Номенклатура КАК Номенклатура,
    тч.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    тч.Количество КАК Количество,
    док.Дата КАК ДатаДокумента
    ИЗ
    Документ.РеализацияТоваровУслуг КАК док
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК тч
    ПО тч.СчетУчета= &СчетУчета И тч.Ссылка = док.Ссылка
    ГДЕ док.Проведен = ИСТИНА
    И док.Дата МЕЖДУ &НачПериода И &КонПериода
    И док.Контрагент = &Контрагент
```

и ОБЯЗАТЕЛЬНО включите индексирование поля Контрагент. Да, понятно, что при левом соединении будут выбраны и документы, у которых ТЧ Товары пустая, чего можно избежать, добавив в ГДЕ условие по ТЧ (но не надо этого делать!). Мысль в том, чтобы сперва добиться, чтобы запрос выполнялся быстро, и затем уже причесывать (помещением во временную таблицу, подзапросами, фильтрацией на клиенте и т.д.)
---
если оптимизировать, то лучше сначала получить документы с нужными параметрами, а затем внутренним соединением воспользоваться и отобрать строки по счету

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

Например, так:

```1c
    ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК Ссылка,
    РеализацияТоваровУслуг.Дата КАК Дата
    Поместить НужныеДокументы
    ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
    РеализацияТоваровУслуг.Проведен
    И РеализацияТоваровУслуг.Дата МЕЖДУ &НачПериода И &КонПериода
    И РеализацияТоваровУслуг.Контрагент = &Контрагент
    ;
    ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
    РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    РеализацияТоваровУслугТовары.Количество КАК Количество,
    НужныеДокументы.Дата КАК ДатаДокумента
    ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    Внутреннее Соединение НужныеДокументы КАК НужныеДокументы
    По РеализацияТоваровУслугТовары.Ссылка = НужныеДокументы.Ссылка
    ГДЕ
    РеализацияТоваровУслугТовары.СчетУчета = &СчетУчета
```
---
Подобные отчеты нужно делать опираясь на информацию из регистров
---
Если база файловая, то надо к регистрам.
---
Попробуйте левое соединение, это вынудит оптимизатор сначала выбирать сами документы (по которым можно сделать хороший индекс), и только потом выбирать ТЧ, по которой хорошего индекса нет

```1c
    ВЫБРАТЬ
    тч.Номенклатура КАК Номенклатура,
    тч.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    тч.Количество КАК Количество,
    док.Дата КАК ДатаДокумента
    ИЗ
    Документ.РеализацияТоваровУслуг КАК док
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК тч
    ПО тч.СчетУчета= &СчетУчета И тч.Ссылка = док.Ссылка
    ГДЕ док.Проведен = ИСТИНА
    И док.Дата МЕЖДУ &НачПериода И &КонПериода
    И док.Контрагент = &Контрагент
```

и ОБЯЗАТЕЛЬНО включите индексирование поля Контрагент. Да, понятно, что при левом соединении будут выбраны и документы, у которых ТЧ Товары пустая, чего можно избежать, добавив в ГДЕ условие по ТЧ (но не надо этого делать!). Мысль в том, чтобы сперва добиться, чтобы запрос выполнялся быстро, и затем уже причесывать (помещением во временную таблицу, подзапросами, фильтрацией на клиенте и т.д.)
---
Всем спасибо!