|
Выбрать элементы верхнего уровня по определенному признаку | ☑ | ||
---|---|---|---|---|
0
extrim-style
19.02.14
✎
11:20
|
Имеется справочник с иерархией элементов:
Элемент1 Реквизит1=4 Элемент1_1 Реквзит1=5 Элемент1_1_1 Реквизит1=4 Элемент1_1_1_1 Реквизит1=5 Элемент1_2_1 Реквизит1=5 Мне нужно получить элементы с Реквизит1=5 и выбрать среди них элемент верхнего уровня. Пытался сделать различные упорядочивания в ирархии (в т.ч. по родителю), чтобы взять первый элемент, но так и не смог. Почему-то выбирает как угодно, только не так как в структуре выше - Элемент1_1 первым. Эта задача решается запросом или придется в цикле перебирать по минимальному Уровень()? (это http://infostart.ru/public/160707/ читал) |
|||
1
mikecool
19.02.14
✎
11:21
|
о сколько тем таких уж будет...
заводим реквизит "папка самого верхнего уровня", заполняем в перед записью, в запросе используем, профит! |
|||
2
Defender aka LINN
19.02.14
✎
11:21
|
Рукалицо...
Намек: какой реквизит не заполнен у элемента первого уровня? |
|||
3
Aprobator
19.02.14
✎
11:21
|
ВыбратьИерархически не прокатывает?
|
|||
4
extrim-style
19.02.14
✎
11:23
|
(2) я не говорил, что необходимый мне элемент будет на первом уровне, он может быть на любом уровне
|
|||
5
extrim-style
19.02.14
✎
11:23
|
+(4) в данном случае на втором
|
|||
6
mikecool
19.02.14
✎
11:24
|
(4) хз, что ты имел ввиду, но видимо я не один подумал по твоему сообщению то, на что ответил
|
|||
7
Aprobator
19.02.14
✎
11:24
|
в чем проблема то? Получить элементы справочника с определенным родителем? Я чего то не догоняю.
|
|||
8
wade25
19.02.14
✎
11:25
|
Рекурсией до верхнего уровня группировки если я правильно понял задачу. Верхний определишь по флагу Родитель = ПустаяСсылка.
|
|||
9
Aprobator
19.02.14
✎
11:26
|
а - все, дошло вроде ) Выбрать из справочника все элементы с определенным значением реквизита и получить из них с самым мелким уровнем )
|
|||
10
extrim-style
19.02.14
✎
11:26
|
(9) да
|
|||
11
Aprobator
19.02.14
✎
11:27
|
(10) много букв - не все осилили сразу и я в том числе )
|
|||
12
mikecool
19.02.14
✎
11:28
|
(9) ты сегодня признан телепатом дня! )))
|
|||
13
Aprobator
19.02.14
✎
11:29
|
(12) просто перечитал 3 раза )
|
|||
14
Aprobator
19.02.14
✎
11:32
|
(0) попробуй запросом и МИНИМУМ(СсылкиСНкжнымРеквизитом).
|
|||
15
Aprobator
19.02.14
✎
11:32
|
хотя нет
|
|||
16
Aprobator
19.02.14
✎
11:33
|
если в разных группах справочника - не прокатит
|
|||
17
Aprobator
19.02.14
✎
11:37
|
а так - перебор, поскольку доступа к Уровень в запросе нет.
|
|||
18
extrim-style
19.02.14
✎
11:45
|
(3) странно, Выборка = Справочники.ИмяСправочника.Выбрать(,,Новый Структура("Реквизит1", "5")) - выбирает нормально,
а Выборка = Справочники.ИмяСправочника.ВыбратьИерархически(,,Новый Структура("Реквизит1", "5")) - не выбирает ничего |
|||
19
Aprobator
19.02.14
✎
11:54
|
(18) не Иерархия элементов случаев? Была помнится там какая то фигня на эту тему.
|
|||
20
extrim-style
19.02.14
✎
11:56
|
(19) где была, подскажи, а то что-то гуглопоиском не нахожу
|
|||
21
kinno
19.02.14
✎
12:06
|
(14) Проверил. При определении минимальной ссылки он смотрит не уровень а очередность создания. Если верхний уровень создать не в самом начале, то его этот запрос возвращать не будет.
|
|||
22
Aprobator
19.02.14
✎
12:07
|
(21) именно это в (16) я и имел ввиду.
|
|||
23
Aprobator
19.02.14
✎
12:07
|
(20) гугл в моей практике еще не ищет, не дозрел он до этого )
|
|||
24
kinno
19.02.14
✎
12:17
|
ВЫБРАТЬ
Элементы.Реквизит1, Элементы.Ссылка КАК Ссылка, ВЫБОР КОГДА Элементы.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 1 КОГДА Элементы.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 2 КОГДА Элементы.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 3 КОГДА Элементы.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 4 КОГДА Элементы.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 5 КОГДА Элементы.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 6 КОГДА Элементы.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Элементы.ПустаяСсылка) ТОГДА 7 ИНАЧЕ 8 КОНЕЦ КАК Уровень ПОМЕСТИТЬ ЗапросСУровнямиЭлементов ИЗ Справочник.Элементы КАК Элементы ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапросСУровнямиЭлементов.Ссылка, ЗапросСУровнямиЭлементов.Реквизит1 ИЗ (ВЫБРАТЬ ЗапросСУровнямиЭлементов.Реквизит1 КАК Реквизит1, МИНИМУМ(ЗапросСУровнямиЭлементов.Уровень) КАК Уровень ИЗ ЗапросСУровнямиЭлементов КАК ЗапросСУровнямиЭлементов СГРУППИРОВАТЬ ПО ЗапросСУровнямиЭлементов.Реквизит1) КАК ВложенныйЗапрос ЛЕВОЕ СОЕДИНЕНИЕ ЗапросСУровнямиЭлементов КАК ЗапросСУровнямиЭлементов ПО ВложенныйЗапрос.Реквизит1 = ЗапросСУровнямиЭлементов.Реквизит1 И ВложенныйЗапрос.Уровень = ЗапросСУровнямиЭлементов.Уровень |
|||
25
extrim-style
19.02.14
✎
12:20
|
(23) ну поищи своим поисковиком. вопрос важный.
(24) это на определенное количество уровней |
|||
26
kinno
19.02.14
✎
12:20
|
если больше восьми уровней, надо внести изменения в ту часть где мы его определяем.
|
|||
27
extrim-style
19.02.14
✎
12:24
|
(26) ну у меня справочник без ограничения уровней. Конечно там врядли будет столько их, но тем не менее...
|
|||
28
extrim-style
19.02.14
✎
12:43
|
+(18) так работает - Выборка = Справочники.ИмяСправочника.ВыбратьИерархически()
реквизит, по которому хотел сделать отбор, имеет тип Строка250 с индексированием с доп. упорядочиванием |
|||
29
kinno
19.02.14
✎
13:13
|
(27) сделай ограничение
|
|||
30
kinno
19.02.14
✎
13:55
|
или откажись от желания, все сделать в запросе, а определяй уровень программно с помощью рекурсивной функции
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |