Добрый день. Есть прямой запрос, который отбирает товары из документов, дополняет реквизитами из справочника ТМЦ и группирует по ТМЦ.
Есть только одна особенность: документы отбираются по вхождению в список. Вот пример запроса:

```1c
    |SEL ECT $РасходнаяНакладнаяСтроки.ТМЦ
    | , $РасходнаяНакладнаяСтроки.Кво
    | , $СправочникТМЦ.АЦ_ШтучныйТовар
    | , $СправочникТМЦ.АЦ_ОбъемУпаковки
    | , CASE WHEN $СправочникТМЦ.БутылокВЯщике > 0 THEN $СправочникТМЦ.БутылокВЯщике ELSE 1 END КвоВЯщике
    |FR OM $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK)
    | INNER JOIN $Справочник.ТМЦ AS СправочникТМЦ With (NOLOCK) ON СправочникТМЦ.ID = $РасходнаяНакладнаяСтроки.ТМЦ
    |WHERE (РасходнаяНакладнаяСтроки.IDDOC IN (SELECT RIGHT(val,9) FR OM #СписокДокументов))
```

Виртуальная таблица #СписокДокументов формируется методом

```1c
    УложитьСписокОбъектов13(списокДок,"#СписокДокументов")
```

На тестовой базе, где есть документы только за 1 день, запрос отрабатывает быстро, но на рабочей - время выполнения просто неприемлемое. Экспериментальным путем было выяснено, что проблема именно в отборе документов из журнала по условию вхождения в список. Если я заменяю блок WH ERE на

```1c
    |WHERE (РасходнаяНакладнаяСтроки.IDDOC = RIGHT('xxx xxxxx',9))
```

то все отрабатывает моментально. 'xxx xxxxx' - это ID документа, вытащенный профайлером (в списке был 1 документ).
Как можно переписать этот запрос? Может сделать соединение с виртуальной таблицей? Или собирать строку условия из множества равенств и OR-ов?
Заранее спасибо.
---
Прошу прощения. Вопрос можно закрывать. Если кому-то будет интересно, то замена условия WHERE на INNER JOIN решила проблему.
Исправленный текст запроса выглядит так:

```1c
    |SEL ECT $РасходнаяНакладнаяСтроки.ТМЦ
    | , $РасходнаяНакладнаяСтроки.Кво
    | , $СправочникТМЦ.АЦ_ШтучныйТовар
    | , $СправочникТМЦ.АЦ_ОбъемУпаковки
    | , CASE WHEN $СправочникТМЦ.БутылокВЯщике > 0 THEN $СправочникТМЦ.БутылокВЯщике ELSE 1 END КвоВЯщике
    |FROM $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK)
    | INNER JOIN $Справочник.ТМЦ AS СправочникТМЦ With (NOLOCK) ON СправочникТМЦ.ID = $РасходнаяНакладнаяСтроки.ТМЦ
    | INNER JOIN (SELECT RIGHT(val,9) val FR OM #СписокДокументов) AS спДок ON РасходнаяНакладнаяСтроки.IDDOC = спДок.val
```

Я делаю подзапрос из вирутальной таблицы #СписокДокументов и соединяю через внутренее соединение с основным телом запроса. Замеры не делал, но выполняется моментально.
---
Прошу прощения. Вопрос можно закрывать. Если кому-то будет интересно, то замена условия WHERE на INNER JOIN решила проблему.
Исправленный текст запроса выглядит так:

```1c
    |SEL ECT $РасходнаяНакладнаяСтроки.ТМЦ
    | , $РасходнаяНакладнаяСтроки.Кво
    | , $СправочникТМЦ.АЦ_ШтучныйТовар
    | , $СправочникТМЦ.АЦ_ОбъемУпаковки
    | , CASE WHEN $СправочникТМЦ.БутылокВЯщике > 0 THEN $СправочникТМЦ.БутылокВЯщике ELSE 1 END КвоВЯщике
    |FROM $ДокументСтроки.РасходнаяНакладная AS РасходнаяНакладнаяСтроки With (NOLOCK)
    | INNER JOIN $Справочник.ТМЦ AS СправочникТМЦ With (NOLOCK) ON СправочникТМЦ.ID = $РасходнаяНакладнаяСтроки.ТМЦ
    | INNER JOIN (SELECT RIGHT(val,9) val FR OM #СписокДокументов) AS спДок ON РасходнаяНакладнаяСтроки.IDDOC = спДок.val
```

Я делаю подзапрос из вирутальной таблицы #СписокДокументов и соединяю через внутренее соединение с основным телом запроса. Замеры не делал, но выполняется моментально.
---
А почто УложитьСписокОбъектов13() а не УложитьСписокОбъектов()?
Тогда RIGHT(val,9) не нужно, и при любом раскладе запрос будет быстрее работать.

а то мы сначала запихиваем лишнее, а потом это лишнее отрезаем