Всем известен метод НайтиПоНаименованию()
Доброго времени суток!
Наверняка уже всем давно известен метод НайтиПоНаименованию(), но как выбрать все позиции или группы справочника, исключая результат этого метода.
Например есть
Эта Группа используется в дальнейшем как параметр запроса.
Как исключить то что входит в эту группу?
Т.е. надо выбрать всю номенклатуру, кроме находящейся в "Группе".
Наверняка уже всем давно известен метод НайтиПоНаименованию(), но как выбрать все позиции или группы справочника, исключая результат этого метода.
Например есть
Группа = Справочники.Номенклатура.НайтиПоНаименованию("Группа")
Эта Группа используется в дальнейшем как параметр запроса.
Как исключить то что входит в эту группу?
Т.е. надо выбрать всю номенклатуру, кроме находящейся в "Группе".
По теме из базы знаний
Найденные решения
Попробуйте так
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);
Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5)
(10), визуальные ощущения. При одном условии результат выводится мгновенно, при другом подвисает.
"ВЫБРАТЬ
| ДокументОснованиеТовары.НомерСтроки КАК НомерСтроки,
| ДокументОснованиеТовары.Номенклатура,
| ДокументОснованиеТовары.ЕдиницаИзмерения,
| ДокументОснованиеТовары.Коэффициент,
| ДокументОснованиеТовары.Цена,
| ДокументОснованиеТовары.Сумма,
| ДокументОснованиеТовары.СтавкаНДС,
| ДокументОснованиеТовары.СуммаНДС,
| ДокументОснованиеТовары.Количество,
| ДокументОснованиеТовары.Номенклатура.НомерГТД КАК НомерГТД,
| ДокументОснованиеТовары.Номенклатура.СтранаПроисхождения КАК СтранаПроисхождения,
| ДокументОснованиеТовары.Номенклатура.Родитель
|ИЗ
| Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
|ГДЕ
| ДокументОснованиеТовары.Ссылка = &Ссылка
| И ДокументОснованиеТовары.Номенклатура В ИЕРАРХИИ(&Группа)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки
|";
Показать(10), визуальные ощущения. При одном условии результат выводится мгновенно, при другом подвисает.
(12)И выполнение этого запроса подвисает на 10 секунд?!
Почему я не люблю искать по наименованию, иногда можно получить совсем не то что ожидаешь, возможно как раз из-за "Справочники.Номенклатура.НайтиПоНаименованию("Группа")" всё и подвисает? или может там он находит что-то лишнее(много чего)! Ищите лучше по коду, код более менее уникальный(в большинстве своём)
Почему я не люблю искать по наименованию, иногда можно получить совсем не то что ожидаешь, возможно как раз из-за "Справочники.Номенклатура.НайтиПоНаименованию("Группа")" всё и подвисает? или может там он находит что-то лишнее(много чего)! Ищите лучше по коду, код более менее уникальный(в большинстве своём)
(14) НайтиПоНаименованию по результату не отличается от НайтиПоКоду. Либо что-то найдем, либо пустая ссылка. Никаких "может там он находит что-то лишнее" не будет. А подвисает, очевидно, неоптимальный запрос.
(15) Уже давно можно было найти примеры в интернете по запросу типа "работа с временными таблицами 1с", там нечего бояться.
Принцип итогового запроса будет такой: сначала получаем всё, что "В ИЕРАРХИИ(&Группа)" и помещает в ВТ, потом вторым запросом берем всю номенклатуру, слева добавляем ВТ по самой номенклатуре, а в ГДЕ пишем "ВТ.Номенклатура ЕСТЬ NULL".
(15) Уже давно можно было найти примеры в интернете по запросу типа "работа с временными таблицами 1с", там нечего бояться.
Принцип итогового запроса будет такой: сначала получаем всё, что "В ИЕРАРХИИ(&Группа)" и помещает в ВТ, потом вторым запросом берем всю номенклатуру, слева добавляем ВТ по самой номенклатуре, а в ГДЕ пишем "ВТ.Номенклатура ЕСТЬ NULL".
(17)
Можно ещё получить "Неопределено" , правда не в случае с номенклатурой ;)
Я вот не рискую искать по наименованию, т.к в том же справочнике номенклатура может быть название "Группа1" и что он вернёт тогда? или кто-то случайно изменил наименование!Поэтому если уж искать по наименованию, то использовать запрос(по факту НайтиПоНаименованию то же запрос, но это уже детали)
Тот запрос что есть не (12) как по мне почти оптимален! и не должен подвисать на 10 секунд!!
НайтиПоНаименованию по результату не отличается от НайтиПоКоду. Либо что-то найдем, либо пустая ссылка. Никаких "может там он находит что-то лишнее" не будет. А подвисает, очевидно, неоптимальный запрос.
Можно ещё получить "Неопределено" , правда не в случае с номенклатурой ;)
Я вот не рискую искать по наименованию, т.к в том же справочнике номенклатура может быть название "Группа1" и что он вернёт тогда? или кто-то случайно изменил наименование!Поэтому если уж искать по наименованию, то использовать запрос(по факту НайтиПоНаименованию то же запрос, но это уже детали)
Тот запрос что есть не (12) как по мне почти оптимален! и не должен подвисать на 10 секунд!!
Попробуйте так
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);
Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Показать
(18) Вам целый запрос скинули.
Продублируем
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);
Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Продублируем
Выбрать Ссылка Поместить ВТ_ВГруппе Из Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(&Группа);
Выбрать
....
Из
Документ.ОтчетОРозничныхПродажах.Товары КАК ДокументОснованиеТовары
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ВГруппе
ПО ДокументОснованиеТовары.Номенклатура = ВТ_ВГруппе.Ссылка
ГДЕ ДокументОснованиеТовары.Ссылка = &Ссылка
И ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
(19)
Мне кажется, что если нужно проверить на NULL, лучше использовать
Понятно, что конкретно тут получить ситуацию, когда ВТ_ВГруппе.Ссылка будет равна 0 изначально (а не NULL), и строка отсеется, но при таком подходе нужно всегда помнить, что такое произойти в принципе может.
ЕстьNULL(ВТ_ВГруппе.Ссылка, 0) = 0
Мне кажется, что если нужно проверить на NULL, лучше использовать
ВТ_ВГруппе.Ссылка ЕСТЬ NULL
Понятно, что конкретно тут получить ситуацию, когда ВТ_ВГруппе.Ссылка будет равна 0 изначально (а не NULL), и строка отсеется, но при таком подходе нужно всегда помнить, что такое произойти в принципе может.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот