Всем известен метод НайтиПоНаименованию()

1. MyPuK_OLD 19.04.17 08:39 Сейчас в теме
Доброго времени суток!

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

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

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


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

Как исключить то что входит в эту группу?
Т.е. надо выбрать всю номенклатуру, кроме находящейся в "Группе".
По теме из базы знаний
Найденные решения
2. TODD22 18 19.04.17 08:51 Сейчас в теме
(1)В тексте запроса использовать НЕ в группе.

Что то вроде:
ГДЕ
НЕ Справочник.Номенаклатура В ИЕРАРХИИ (&Группа)
MyPuK_OLD; +1 Ответить
16. ipoloskov 162 19.04.17 09:36 Сейчас в теме
Попробуйте так
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура 
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе 
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Показать
MyPuK_OLD; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TODD22 18 19.04.17 08:51 Сейчас в теме
(1)В тексте запроса использовать НЕ в группе.

Что то вроде:
ГДЕ
НЕ Справочник.Номенаклатура В ИЕРАРХИИ (&Группа)
MyPuK_OLD; +1 Ответить
3. MyPuK_OLD 19.04.17 09:01 Сейчас в теме
(2)Спасибо! Этот прием работает, но не очень производителен (отрабатывает с зависанием на 10 сек.)

Нельзя ли как-то в параметрах запроса применить тот факт, что должно браться все кроме этой группы?
4. TODD22 18 19.04.17 09:03 Сейчас в теме
(3)
Нельзя ли как-то в параметрах запроса применить тот факт, что должно браться все кроме этой группы?

Так это и есть параметр который указывает системе брать всё кроме того что вложено в эту группу и в подгруппах входящих в эту группу.
8. MyPuK_OLD 19.04.17 09:07 Сейчас в теме
(4)Это достигается изменением запроса. Меня же интересует, возможно ли получить такой же результат, не меняя запрос.

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


Два запроса не хочется лепить..
9. TODD22 18 19.04.17 09:09 Сейчас в теме
(8)
Два запроса не хочется лепить..

Вы уже тогда определитесь... Вам результат или "не хочу лепить".
5. TODD22 18 19.04.17 09:04 Сейчас в теме
(3)
но не очень производителен (отрабатывает с зависанием на 10 сек.)

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


(10), визуальные ощущения. При одном условии результат выводится мгновенно, при другом подвисает.
14. Ганс 19.04.17 09:26 Сейчас в теме
(12)И выполнение этого запроса подвисает на 10 секунд?!

Почему я не люблю искать по наименованию, иногда можно получить совсем не то что ожидаешь, возможно как раз из-за "Справочники.Номенклатура.НайтиПоНаименованию("Группа")" всё и подвисает? или может там он находит что-то лишнее(много чего)! Ищите лучше по коду, код более менее уникальный(в большинстве своём)
15. MyPuK_OLD 19.04.17 09:29 Сейчас в теме
(14)Если сделать вот так, то подвисает..
   
    |ГДЕ
    |    ДокументОснованиеТовары.Ссылка = &Ссылка
    |    И НЕ ДокументОснованиеТовары.Номенклатура В ИЕРАРХИИ(&Группа)
17. comptr 31 19.04.17 09:37 Сейчас в теме
(14) НайтиПоНаименованию по результату не отличается от НайтиПоКоду. Либо что-то найдем, либо пустая ссылка. Никаких "может там он находит что-то лишнее" не будет. А подвисает, очевидно, неоптимальный запрос.

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


Можно ещё получить "Неопределено" , правда не в случае с номенклатурой ;)
Я вот не рискую искать по наименованию, т.к в том же справочнике номенклатура может быть название "Группа1" и что он вернёт тогда? или кто-то случайно изменил наименование!Поэтому если уж искать по наименованию, то использовать запрос(по факту НайтиПоНаименованию то же запрос, но это уже детали)
Тот запрос что есть не (12) как по мне почти оптимален! и не должен подвисать на 10 секунд!!
6. TODD22 18 19.04.17 09:05 Сейчас в теме
(3)И зависает он у вас где? А то бывает так что запрос отрабатывает быстро. Но вот результат в консоль выводится очень долго.
11. comptr 31 19.04.17 09:14 Сейчас в теме
(3) по-другому нельзя, так уж устроен язык запросов 1С. Задача легко решается либо через вложенный запрос, либо через временную таблицу (что более предпочтительно), как в (7).
7. karpik666 3777 19.04.17 09:06 Сейчас в теме
Проще вначале отобрать группы, поместить их в ВТ,проиндексировать, а затем связать их через внутреннее соединение с вашим запросом.
корум; danjer74; +2 Ответить
13. MyPuK_OLD 19.04.17 09:22 Сейчас в теме
(7)Идея конечно интересная, но реализовать её у меня вряд ли получится, раньше не работал с ВТ.
(11) Спасибо за разъяснение.
21. kolya_tlt 86 19.04.17 10:28 Сейчас в теме
(7) такой подход аналогичен тому, что делает платформа сама, а именно это генерация запросов в цикле
23. karpik666 3777 19.04.17 10:35 Сейчас в теме
(21) тогда приведите запрос лучше.
25. kolya_tlt 86 19.04.17 10:54 Сейчас в теме
(23) некоторые запросы можно переписать только модифицируя метаданные
26. karpik666 3777 19.04.17 10:56 Сейчас в теме
28. kolya_tlt 86 19.04.17 11:14 Сейчас в теме
(26) посмотрите типовые конфигурации
29. корум 287 19.04.17 11:19 Сейчас в теме
(28) нельзя ли поконкретнее?
31. kolya_tlt 86 19.04.17 11:22 Сейчас в теме
(29) (30) вас что как котят носом тыкать куда какать нужно?
32. karpik666 3777 19.04.17 11:23 Сейчас в теме
(31) ага, потыкайте, если вы не Ильдарович, зашедший под другим аккаунтом, то очень хочется увидеть ваше видение
34. корум 287 19.04.17 11:37 Сейчас в теме
(31) влом написать "гляньте ЗУП 2.5, модуль документа Премии, процедура ЗаполнитьМегаТекстЗапросаНа200Страниц(ПоловинаСтраницНикогдаНеНужна)" ?

Или же это пустой трёп с оскорблениями.
30. karpik666 3777 19.04.17 11:19 Сейчас в теме
(28) пф, вы что увиливаете, ответьте на конкретно заданный вопрос. Я уже было подумал, что вы можете что-то предложить, а тут пустой треп.
10. TODD22 18 19.04.17 09:10 Сейчас в теме
Скорость работы запроса чем измерили?
16. ipoloskov 162 19.04.17 09:36 Сейчас в теме
Попробуйте так
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура 
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе 
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Показать
MyPuK_OLD; +1 Ответить
18. MyPuK_OLD 19.04.17 10:01 Сейчас в теме
(16) Не знаю как соединить в одном запросе..
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура 
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);

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

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

Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
24. comptr 31 19.04.17 10:36 Сейчас в теме
(19)
ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0

Мне кажется, что если нужно проверить на NULL, лучше использовать
ВТ_ВГруппе.Ссылка ЕСТЬ NULL

Понятно, что конкретно тут получить ситуацию, когда ВТ_ВГруппе.Ссылка будет равна 0 изначально (а не NULL), и строка отсеется, но при таком подходе нужно всегда помнить, что такое произойти в принципе может.
27. ipoloskov 162 19.04.17 10:59 Сейчас в теме
(24) у меня когда-то такое не работало (может быть, баг платформы, или что-то еще). Поэтому сейчас по привычке использую ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
22. MyPuK_OLD 19.04.17 10:35 Сейчас в теме
(16)Спасибо! Так действительно быстрее заполняется ТЧ!
(19)Сам тупанул, забыл перед Выбрать " поставить.
33. MyPuK_OLD 19.04.17 11:33 Сейчас в теме
Может пора закрыть тему?))
Вопрос решен, но дискуссия продолжается..
35. karpik666 3777 19.04.17 12:01 Сейчас в теме
(33) да тут же самое интересное, вам не хочется разве узнать мега крутой способ написать правильный запрос. Я лично очень хочу, так бы использовал его постоянно в своих разработках, чтобы не использовать не оптимальную функцию "В иерархии"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот