Подскажите пожалуйста, не совсем пойму, один и тот же запрос но с разным соединением таблиц в 1 случае время выполнения запроса (1.3 сек) во втором(0.03 сек) , вопрос почему?
время выполнения 1.3 сек

```1c
    |ИЗ
    | Т1 КАК Т1
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.МаршрутныйЛист.Заявки КАК МаршрутныйЛистЗаявки
    | ПО Т1.реализация.Ссылка = МаршрутныйЛистЗаявки.Заявка.ДокументОснование.Ссылка
```

Время выполнения 0.03 сек

```1c
    |ИЗ
    |Т1 КАК Т1
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.МаршрутныйЛист.Заявки КАК МаршрутныйЛистЗаявки
    | ПО Т1.реализация = МаршрутныйЛистЗаявки.Заявка.ДокументОснование
```
---
Cool_vsi, насчет ссылок не знаю... идея примерно такая:

```1c
    Выбрать ДокументТЧ.Ссылка.Дата
    Из Документ.ТабличнаяЧасть КАК ДокументТЧ
```

это на самом деле такой запрос:

```1c
    Выбрать Документ.Дата
    Из Документ.ТабличнаяЧасть КАК ДокументТЧ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    Документ Как Документ
    По ДокументТЧ.ИДСсылки = Документ.ИДСсылки
```

1с пытается таким путем упростить написание запросов, делая неявные объединения. Они это называют, по-моему, "разузлование". Аналогично в исходном примере

```1c
    ПО Т1.реализация
```

это выбор ИД реализации из таблицы Т1, а

```1c
    ПО Т1.реализация.Ссылка
```

это выбор уже ссылки из таблицы Реализация, которая добавляется в запрос и соединяется с Т1, только это не написано явно. Добавляется еще одна таблица еще один соединением, поэтому время выполнения меняется.
Они пишут об этом в каких-то мануалах, но не очень внятно. Тема запросов вообще не слишком развернута в обучении 1с, и очень зря, по-моему...
---
Cool_vsi, потому что .Ссылка - это еще одно неявное соединение
---
а можно поподробнее? или скиньте ссылку пожалуйста где про это почитать? я в своей голове пока не могу понять чем отличается указание документа или ссылку из документа (по идее это одно и тоже)
---
Cool_vsi, насчет ссылок не знаю... идея примерно такая:

```1c
    Выбрать ДокументТЧ.Ссылка.Дата
    Из Документ.ТабличнаяЧасть КАК ДокументТЧ
```

это на самом деле такой запрос:

```1c
    Выбрать Документ.Дата
    Из Документ.ТабличнаяЧасть КАК ДокументТЧ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    Документ Как Документ
    По ДокументТЧ.ИДСсылки = Документ.ИДСсылки
```

1с пытается таким путем упростить написание запросов, делая неявные объединения. Они это называют, по-моему, "разузлование". Аналогично в исходном примере

```1c
    ПО Т1.реализация
```

это выбор ИД реализации из таблицы Т1, а

```1c
    ПО Т1.реализация.Ссылка
```

это выбор уже ссылки из таблицы Реализация, которая добавляется в запрос и соединяется с Т1, только это не написано явно. Добавляется еще одна таблица еще один соединением, поэтому время выполнения меняется.
Они пишут об этом в каких-то мануалах, но не очень внятно. Тема запросов вообще не слишком развернута в обучении 1с, и очень зря, по-моему...
---
starjevschik, (5) PetroP, Огромное спасибо, теперь понял!
у меня составной тип данных, поэтому 1с получала таблицы для каждого типа и получалась такая разница.
---
Cool_vsi, http://its.1c.ru/db/metod8dev#content:2662:hdoc
---
Т1.реализация = МаршрутныйЛистЗаявки.Заявка.ДокументОснование

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

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

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

```1c
    ВЫБРАТЬ
    СУММА(ВЫБОР
    КОГДА ДвиженияДенежныхСредств.ПриходРасход = &Расход
    ТОГДА 0 - ДвиженияДенежныхСредств.Сумма
    ИНАЧЕ ДвиженияДенежныхСредств.Сумма
    КОНЕЦ) КАК СуммаДС,
    МлОтв.РеализацияТоваров,
    СУММА(МлОтв.СуммаОплаты) КАК СуммаОплаты
    ПОМЕСТИТЬ ТзДС1
    ИЗ
    МлОтв КАК МлОтв
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияДенежныхСредств КАК ДвиженияДенежныхСредств
    ПО ДвиженияДенежныхСредств.Сделка ССылка Документ.ЗаказПокупателя и МлОтв.ЗаказПокупателяИзР = ДвиженияДенежныхСредств.Сделка
    ГДЕ
    МлОтв.ЗаказПокупателяИзР <> ЗНАЧЕНИЕ(Документ.ЗаказПокупателя.ПустаяСсылка)
```