Имя: Пароль:
1C
 
запрос в иерархии
0 falselight
 
07.12.16
07:55
Есть запрос который вывожу в макет.
в запросе отборы установлены как "="
то есть на отбор элементов справочника.
Стоит задача, учесть отбор групп, каталогов справочника
какую инструкцию для этого правильнее использовать?
"В" или "В ИЕРАРХИИ ()" и чем они от друг друга отличаются?
1 falselight
 
07.12.16
08:12
К примеру в поле выбрали элемент тогда в условии "=".
А если в поле выбрали группу, что тогда ставить в условие?
"В ()" или "В ИЕРАРХИИ ()"
2 d546
 
07.12.16
08:17
уже можно было и так и так поробывать
3 rphosts
 
07.12.16
08:17
В ()  - это принадлежность к множеству перечисленному в тому что отбирается в (...),
В ИЕРАРХИИ (...) - это принадлежность  к множеству перечисленному в (...) или к элементам являющимся дочерними по отношению к (...).

В ИЕРАРХИИ по возможности лучше не использовать никогда т.к. это жуткие тормоза (можно отказаться от В ИЕРАРХИИ в пользу В всегда когда количество уровней невелико).
4 falselight
 
07.12.16
08:41
В, В ИЕРАРХИИ
Конструкция «В» позволяет сравнить значения поля с произвольным списком значения, массива или другого запроса. Если поле присутствует в указанном списке – выражение вернет ИСТИНА. Примеры:
НоменклатураСпр.Наименование В («Лопата», «Грабли», «Совок»)
НоменклатураСпр.Наименование В (ВЫБРАТЬ ВТ.Наименование ИЗ ВТ)
НоменклатураСпр.Наименование В (&СписокНаименований)
«В ИЕРАРХИИ» конструкция, которой нет аналогов в обычном языке SQL. Она проверяет принадлежность значения к вложенной иерархии.
Пример:
НоменклатураСпр.Ссылка В (&Группа)
5 falselight
 
07.12.16
08:44
В (4) я понимаю так
В - используется когда в параметре некий список
В ИЕРАРХИИ - используется когда в параметр передается группа справочника

(3) что правильно использовать передавая параметр в конструкции В или В ИЕРАРХИИ - группу справочника?
6 falselight
 
07.12.16
08:45
(2) попробовал
выборка срабатывает когда в параметр передаю группу
справочника и ставлю В ИЕРАРХИИ
когда меняю на просто В, выборка исчерает
7 Лефмихалыч
 
07.12.16
08:47
Е. Ю. Хрусталева Язык запросов «1С:Предприятия 8»
http://its.1c.ru/db/pubqlang
8 falselight
 
07.12.16
08:54
в итоге, думаю, будет так:

    Если ЗначениеЗаполнено(ЭлементыФормы.Контрагент.Значение) И Не ЭлементыФормы.Контрагент.Значение.ЭтоГруппа() Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент";
    Иначе
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&Контрагент)";
    КонецЕсли;
    Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) И НЕ ЭлементыФормы.Номенклатура.Значение.ЭтоГруппа Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура";
    Иначе
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура)";
    КонецЕсли;
9 falselight
 
07.12.16
09:01
точнее так


    Если ЗначениеЗаполнено(ЭлементыФормы.Контрагент.Значение) И Не ЭлементыФормы.Контрагент.Значение.ЭтоГруппа() Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент";
    ИначеЕсли ЗначениеЗаполнено(ЭлементыФормы.Контрагент.Значение) И ЭлементыФормы.Контрагент.Значение.ЭтоГруппа() Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&Контрагент)";
    КонецЕсли;
    Если ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) И НЕ ЭлементыФормы.Номенклатура.Значение.ЭтоГруппа Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура";
    ИначеЕсли ЗначениеЗаполнено(ЭлементыФормы.Номенклатура.Значение) И ЭлементыФормы.Номенклатура.Значение.ЭтоГруппа Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура)";
    КонецЕсли;
10 Лефмихалыч
 
07.12.16
09:07
достаточно просто
Если ЗначениеЗаполнено(ЭлементыФормы.Контрагент.Значение) Тогда
        Запрос.Текст = Запрос.Текст + "
            |   И ПоступлениеТоваровУслугТовары.Ссылка.Контрагент В ИЕРАРХИИ(&Контрагент)";
    КонецЕсли;

В ИЕРАРХИИ отлично работает и как "="
11 falselight
 
07.12.16
09:14
(10) понял!