Есть код:
```1c
    Отбор = Новый Структура("Номенклатура,ИтоговаяСтрока" , ТекДанные.Номенклатура , Ложь);

    МассивСтрок = ЭтотОбъект.Товары.НайтиСтроки(Отбор);
```

нужно перевести метод НайтиСтроки() в запрос, типа:

```1c
    Запрос = Новый Запрос( "ВЫБРАТЬ
    | *
    |ИЗ
    | &ТЗ КАК ТЗ
    |Где ТЗ.Номенклатура = &Номенклатура");
    Запрос.УстановитьПараметр("ТЗ",ЭтотОбъект.Товары.Выгрузить());
    Запрос.УстановитьПараметр("Номенклатура",ТекДанные.Номенклатура);
```

Подскажите как правильно это сделать?
---
```1c
    Запрос = Новый Запрос(
    "ВЫБРАТЬ * ПОМЕСТИТЬ ВТТЗ ИЗ &ТЗ КАК ТЗ;
    |ВЫБРАТЬ * ИЗ ВТТЗ ГДЕ Номенклатура = &Номенклатура И НЕ ИтоговаяСтрока");

    Запрос.УстановитьПараметр("ТЗ", Объект.Товары );
    Запрос.УстановитьПараметр("Номенклатура", ТекДанные.Номенклатура );

    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следйющий() Тогда
    // нашли строку, в Выборка ее данные
    Иначе
    // не нашли строку, можем убиться апстену
    КонецЕсли;
```
---
Всем спасибо, получилось заменить код:

```1c
    Отбор = Новый Структура("Номенклатура,ИтоговаяСтрока" , ТекДанные.Номенклатура , Ложь);
    МассивСтрок = ЭтотОбъект.Товары.НайтиСтроки(Отбор);
    ТЗИт = ЭтотОбъект.Товары.Выгрузить(МассивСтрок , ИмяКолонки);
```

на

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

Но, к сожалению, метод "выгрузить" работает намного медленнее метода "НайтиСтроки", поэтому оптимизировать не удалось.
---
обернуть в функцию
---
1 вариант кода ищет в памяти сервера 1С, второй с использованием базы tempdb (возможно на диске) на сервере SQL. Скорость не увеличится, а уменьшится.
---
Смотрю вопрос ТС
ЭтотОбъект.Товары.НайтиСтроки(Отбор);
вот что он положил в ЭтотОбъект, то и получит :)
---
В случае НайтиСтроки() - да. А в случае запроса - нет.
---
В случае НайтиСтроки() - да. А в случае запроса - нет ну и правильно, нечего обращаться к незаписанным документам.
---
Естественно, незачем. Не надо у новых документов обрабатывать табличные части - пересчитывать цены, заниматься пропорциональными распределениями, перезаполнять виды запасов и серии по актуальным остаткам... Действительно - зачем?
Только у записанных, проверенных временем, так сказать!
---
не нужно по себе ровнять ТС, у него простой вопрос - простое решение, если бы он делал всё то, что Вы перечислили, вряд ли бы он задал такой вопрос, у Вас же он не возник. Или возник? :)
---
Так это ты начал ему херню с запросами к БД предлагать! А ему интересно обработать табличную часть ОБЪЕКТА.
Да, я не знаю какая конечная задача у него стоит. И ты тоже не знаешь. Но я свои советы оставляю в рамках парадигмы топикстартера (работать с ТЧ оперативного объекта), а ты увел его в БД, да еще и говоришь, что нефиг тут обрабатывать табличные части незаписанных документов...

Ну и кто из нас дурак после этого?
---
раз не знаешь задачи, так и нечего решать за него...

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

    Запрос.УстановитьПараметр("ТЗ", Объект.Товары );
    Запрос.УстановитьПараметр("Номенклатура", ТекДанные.Номенклатура );

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

Выбирайте документы или значение 1(число 1) если уж значение не важно, а нужно проверить, есть ли документы, в табличной части которых есть определенная номенклатура.
---
Вы там обкурились что ли? : этотобъект в отбор видимо забыл добавить %)
---
А если это новый? А если это измененный? Какие данные вы ожидаете увидеть в этом случае от ЭтотОбъект?
---
Всем спасибо, получилось заменить код:

```1c
    Отбор = Новый Структура("Номенклатура,ИтоговаяСтрока" , ТекДанные.Номенклатура , Ложь);
    МассивСтрок = ЭтотОбъект.Товары.НайтиСтроки(Отбор);
    ТЗИт = ЭтотОбъект.Товары.Выгрузить(МассивСтрок , ИмяКолонки);
```

на

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

Но, к сожалению, метод "выгрузить" работает намного медленнее метода "НайтиСтроки", поэтому оптимизировать не удалось.