Доброго времени суток!

Наверняка уже всем давно известен метод НайтиПоНаименованию(), но как выбрать все позиции или группы справочника, исключая результат этого метода.

Например есть

```1c
    Группа = Справочники.Номенклатура.НайтиПоНаименованию("Группа")
```

Эта Группа используется в дальнейшем как параметр запроса.

Как исключить то что входит в эту группу?
Т.е. надо выбрать всю номенклатуру, кроме находящейся в "Группе".
---
В тексте запроса использовать НЕ в группе.

Что то вроде:
ГДЕ
      НЕ Справочник.Номенаклатура В ИЕРАРХИИ (&Группа)
---
Попробуйте так

```1c
    Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
    ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

    Выбрать
    ....
    Из
    Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
    ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
    ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
    И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
```
---
В тексте запроса использовать НЕ в группе.

Что то вроде:
ГДЕ
      НЕ Справочник.Номенаклатура В ИЕРАРХИИ (&Группа)
---
Спасибо! Этот прием работает, но не очень производителен (отрабатывает с зависанием на 10 сек.)

Нельзя ли как-то в параметрах запроса применить тот факт, что должно браться все кроме этой группы?
---
Нельзя ли как-то в параметрах запроса применить тот факт, что должно браться все кроме этой группы?
Так это и есть параметр который указывает системе брать всё кроме того что вложено в эту группу и в подгруппах входящих в эту группу.
---
Это достигается изменением запроса. Меня же интересует, возможно ли получить такой же результат, не меняя запрос.

```1c
    Группа = Справочники.Номенклатура.НайтиПоНаименованию("Группа")
    Запрос.УстановитьПараметр("Группа",Группа);
```

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

(10), визуальные ощущения. При одном условии результат выводится мгновенно, при другом подвисает.
---
И выполнение этого запроса подвисает на 10 секунд?!

Почему я не люблю искать по наименованию, иногда можно получить совсем не то что ожидаешь, возможно как раз из-за "Справочники.Номенклатура.НайтиПоНаименованию("Группа")" всё и подвисает? или может там он находит что-то лишнее(много чего)! Ищите лучше по коду, код более менее уникальный(в большинстве своём)
---
Если сделать вот так, то подвисает..

```1c
    |ГДЕ
    | ДокументОснованиеТовары.Ссылка = &Ссылка
    | И НЕ ДокументОснованиеТовары.Номенклатура В ИЕРАРХИИ(&Группа)
```
---
НайтиПоНаименованию по результату не отличается от НайтиПоКоду. Либо что-то найдем, либо пустая ссылка. Никаких "может там он находит что-то лишнее" не будет. А подвисает, очевидно, неоптимальный запрос.

(15) Уже давно можно было найти примеры в интернете по запросу типа "работа с временными таблицами 1с", там нечего бояться.
Принцип итогового запроса будет такой: сначала получаем всё, что "В ИЕРАРХИИ(&Группа)" и помещает в ВТ, потом вторым запросом берем всю номенклатуру, слева добавляем ВТ по самой номенклатуре, а в ГДЕ пишем "ВТ.Номенклатура ЕСТЬ NULL".
---
НайтиПоНаименованию по результату не отличается от НайтиПоКоду. Либо что-то найдем, либо пустая ссылка. Никаких "может там он находит что-то лишнее" не будет. А подвисает, очевидно, неоптимальный запрос.

Можно ещё получить "Неопределено" , правда не в случае с номенклатурой ;)
Я вот не рискую искать по наименованию, т.к в том же справочнике номенклатура может быть название "Группа1" и что он вернёт тогда? или кто-то случайно изменил наименование!Поэтому если уж искать по наименованию, то использовать запрос(по факту НайтиПоНаименованию то же запрос, но это уже детали)
 Тот запрос что есть не (12) как по мне почти оптимален! и не должен подвисать на 10 секунд!!
---
И зависает он у вас где? А то бывает так что запрос отрабатывает быстро. Но вот результат в консоль выводится очень долго.
---
по-другому нельзя, так уж устроен язык запросов 1С. Задача легко решается либо через вложенный запрос, либо через временную таблицу (что более предпочтительно), как в (7).
---
Проще вначале отобрать группы, поместить их в ВТ,проиндексировать, а затем связать их через внутреннее соединение с вашим запросом.
---
Идея конечно интересная, но реализовать её у меня вряд ли получится, раньше не работал с ВТ.
(11) Спасибо за разъяснение.
---
такой подход аналогичен тому, что делает платформа сама, а именно это генерация запросов в цикле
---
тогда приведите запрос лучше.
---
некоторые запросы можно переписать только модифицируя метаданные
---
хорошо, например?
---
посмотрите типовые конфигурации
---
нельзя ли поконкретнее?
---
(30) вас что как котят носом тыкать куда какать нужно?
---
ага, потыкайте, если вы не Ильдарович, зашедший под другим аккаунтом, то очень хочется увидеть ваше видение
---
влом написать "гляньте ЗУП 2.5, модуль документа Премии, процедура ЗаполнитьМегаТекстЗапросаНа200Страниц(ПоловинаСтраницНикогдаНеНужна)" ?

Или же это пустой трёп с оскорблениями.
---
пф, вы что увиливаете, ответьте на конкретно заданный вопрос. Я уже было подумал, что вы можете что-то предложить, а тут пустой треп.
---
Скорость работы запроса чем измерили?
---
Попробуйте так

```1c
    Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
    ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

    Выбрать
    ....
    Из
    Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
    ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
    ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
    И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
```
---
Не знаю как соединить в одном запросе..

```1c
    Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
    ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

    Выбрать
    ....
    Из
```

Если не сложно, можете пример привести?
---
Вам целый запрос скинули.
Продублируем
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
---
ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Мне кажется, что если нужно проверить на NULL, лучше использовать
```1c
    ВТ_ВГруппе.Ссылка ЕСТЬ NULL
```

Понятно, что конкретно тут получить ситуацию, когда ВТ_ВГруппе.Ссылка будет равна 0 изначально (а не NULL), и строка отсеется, но при таком подходе нужно всегда помнить, что такое произойти в принципе может.
---
у меня когда-то такое не работало (может быть, баг платформы, или что-то еще). Поэтому сейчас по привычке использую ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
---
Спасибо! Так действительно быстрее заполняется ТЧ!
(19)Сам тупанул, забыл перед Выбрать " поставить.
---
Может пора закрыть тему?))
Вопрос решен, но дискуссия продолжается..
---
да тут же самое интересное, вам не хочется разве узнать мега крутой способ написать правильный запрос. Я лично очень хочу, так бы использовал его постоянно в своих разработках, чтобы не использовать не оптимальную функцию "В иерархии"