|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
WED
08.09.11
✎
12:14
|
Справочник "номенклатура"
У элементов и групп есть реквизит "ОтображатьВПрайсе", булево Задача: Из запроса получить дерево, в котором будут только те элементы справочника, у которых ОтображатьВПрайсе = Истина, но при этом значение этого реквизита у родителя этого элемента является приоритетным. Т.е. если имеем вложенность: Группа1 Отображать=истина -Подгруппа1 Отображать=ложь --Подгруппа1 Отображать=истина ---Элемент1 Отображать=истина -Подгруппа2 Отображать=истина --Подгруппа2 Отображать=истина ---Элемент2 Отображать=истина в результате запроса должно быть только эти элементы и группы: Группа1 -Подгруппа2 --Подгруппа2 ---Элемент2 Не понимаю как в запросе обыграть приоритет флага у родителя |
|||
1
Defender aka LINN
08.09.11
✎
12:17
|
(0) Какбе, если у родителя приоритет, тот в этом примере должны все вывестись.
|
|||
2
Jstunner
08.09.11
✎
12:17
|
уровень вложенности ограничен?
|
|||
3
wise
08.09.11
✎
12:19
|
где Родитель.Отабражать И отображать
|
|||
4
WED
08.09.11
✎
12:22
|
(1) нет, не должны. Потому что у Подгруппа1 Отображать=ложь, т.е. все элементы и группы вложенные в Подгруппа1 (включая её саму) не должны попасть в результат
|
|||
5
WED
08.09.11
✎
12:23
|
(2) нет
|
|||
6
GANR
08.09.11
✎
12:25
|
Выгрузить результат запроса в дерево, которое затем обработать с помощью стека или рекурсии
СтекВызовов = Новый Массив; СтекВызовов.Добавить(Новый Структура("НаборСтрок, Курсор", ТвоеДерево.ПолучитьЭлементы(), 0)); Пока СтекВызовов.Количество() <> 0 Цикл ТекущиеПараметры = СтекВызовов[СтекВызовов.Количество()-1]; Если ТекущиеПараметры.Курсор <= ТекущиеПараметры.НаборСтрок.Количество() - 1 Тогда ТекущиеПараметры.НаборСтрок[ТекущиеПараметры.Курсор].Используется = Ложь; ДочернийНабор = ТекущиеПараметры.НаборСтрок[ТекущиеПараметры.Курсор].ПолучитьЭлементы(); ТекущиеПараметры.Курсор = ТекущиеПараметры.Курсор + 1; Если ДочернийНабор.Количество() <> 0 Тогда СтекВызовов.Добавить(Новый Структура("НаборСтрок, Курсор", ДочернийНабор, 0)); КонецЕсли; Иначе СтекВызовов.Удалить(СтекВызовов.Количество()-1); КонецЕсли; КонецЦикла; |
|||
7
Jstunner
08.09.11
✎
12:26
|
(4) почему Отображать=истина группы Группа1 не имеет высшего приоритета?
(5) тогда - никак |
|||
8
WED
08.09.11
✎
12:28
|
(3) щас запрос такой:
-------------------------------------- ВЫБРАТЬ Номенклатура.Ссылка КАК Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.ОтображатьВПрайсе = ИСТИНА И Номенклатура.ПометкаУдаления = ЛОЖЬ И Номенклатура.Родитель В ИЕРАРХИИ(&ВыбраннаяРодительскаяГруппа) УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ АВТОУПОРЯДОЧИВАНИЕ -------------------------------------------- В результате получаю дерево такого вида: Группа1 --Подгруппа1 ---Элемент1 -Подгруппа2 --Подгруппа2 ---Элемент2 т.е. запрос просто исключил Подгруппа1 первого уровня вложенности, а надо чтобы были исключены и все её дочерние |
|||
9
Defender aka LINN
08.09.11
✎
12:30
|
Если приоритет только у "не отображать", то все просто:
|
|||
10
WED
08.09.11
✎
12:30
|
так. из-за того, что я в примере в (0) неверно написал номера групп и подгрупп, я сам и запутался.
Давайте вот на этом примере будем копать: Группа1 Отображать=истина -Подгруппа2 Отображать=ложь --Подгруппа3 Отображать=истина ---Элемент4 Отображать=истина -Подгруппа5 Отображать=истина --Подгруппа6 Отображать=истина ---Элемент7 Отображать=истина Уровень каждого по дефису понятен |
|||
11
WED
08.09.11
✎
12:31
|
Вот по примеру в (10) все что в Подгруппа2 (и она сама) должны быть исключены из результата несмотря на их флаг
|
|||
12
WED
08.09.11
✎
12:35
|
(9) ммм.. Смысл смутно уловил, можно в виде конечного запроса?
в консоли запросов хочу протестировать |
|||
13
Defender aka LINN
08.09.11
✎
12:36
|
(12) А это что, по-твоему?
|
|||
14
szhukov
08.09.11
✎
12:37
|
(12) Проще и надежней будет вначале пройтись обработкой и проставить всем элементам и подгруппам группы "-Подгруппа2" значение "ложь", а затем выбрать то что нужно простым запросом
|
|||
15
szhukov
08.09.11
✎
12:38
|
+(14) соответсвенно при изменении значения какой-то группы/подгруппы, автоматом присваивать всем вложенным элементам новое значение. И вопрос о запросе отпадет.
|
|||
16
WED
08.09.11
✎
12:39
|
(13) Не знаю :) Консоль запросов ругается на это
(14) Рассматривал. Не пойдет. Есть группы, которые исключили из прайса 1 раз, а есть постоянно исключенные. Твой подход собьёт такую настройку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |