|
v8: Как Получить верхнего родителя | ☑ | ||
---|---|---|---|---|
0
dfaa
22.07.11
✎
11:20
|
справочник номенклатура, есть реквизит верхний родитель. Мне нужно запихнуть туда самого верхнего родителя. Запихнуть нужно при перемещении номенклатуры. Хотел запросом получить верхнего родит. а в качестве параметра передать номенклат. но у ссылки родитель предыдущий, а у объекта нужный. Каким способом это сделать.
|
|||
1
Ненавижу 1С
гуру
22.07.11
✎
11:21
|
ну разрешаю взять у объекта
|
|||
2
vicof
22.07.11
✎
11:21
|
чо?
|
|||
3
dfaa
22.07.11
✎
11:21
|
(1)а как у объекта взять самого верхнего ?
|
|||
4
borik
22.07.11
✎
11:22
|
(3) У него родитель пустой
|
|||
5
Stim213
22.07.11
✎
11:22
|
(3) самый верхний - Справочник.МойСправочник
|
|||
6
vicof
22.07.11
✎
11:23
|
спршивается, накуа?
|
|||
7
butterbean
22.07.11
✎
11:24
|
(0)
Функция Верхний(Ссылка) Если ЗначениеЗаполнено(Ссылка.Родитель) Тогда Возврат Верхний(Ссылка.Родитель) Иначе Возврат Ссылка КонецЕсли; КонецФункции |
|||
8
dfaa
22.07.11
✎
11:27
|
всем спасибо тупанул извиняюсь ))
|
|||
9
Эмбеддер
22.07.11
✎
11:31
|
без рекурсии будет даже на 1 строчку короче
Функция Верхний(знач Ссылка) пока ЗначениеЗаполнено(Ссылка.Родитель) цикл Ссылка=Ссылка.Родитель; конеццикла; Возврат Ссылка; КонецФункции |
|||
10
dimaldinho
22.07.11
✎
11:34
|
(9)
Функция Верхний(Ссылка) Возврат ?(ЗначениеЗаполнено(Ссылка.Родитель), Верхний(Ссылка.Родитель), Ссылка) КонецФункции |
|||
11
ИС-2
naïve
22.07.11
✎
11:40
|
(0) Тоже тупил, писал всякие рекурсии, а потом дошло, что можно выбрать данные запросом с итогами по иерархии
|
|||
12
vmv
22.07.11
✎
11:43
|
о, опять. в поиске с десяток тем, но вероятно не все велосипеды еще созданы
|
|||
13
Эмбеддер
22.07.11
✎
11:47
|
(10) Вообще за использование рекурсии там, где она не нужна, в нашем ВУЗе могли оценку снизить :)
|
|||
14
Ненавижу 1С
гуру
22.07.11
✎
11:51
|
запрос по иерархии все равно рекурсивно делается и вызывается куча маленьких запросиков
|
|||
15
DrHiHi
22.07.11
✎
12:04
|
В запросе выбор верхнего уровня групп
|ВЫБРАТЬ | * |ИЗ | Справочник.Номенклатуры |ГДЕ | Родитель = Значение(Справочник.Номенклатура.ПустаяСсылка) | И ЭтоГруппа а потом ставишь условие в не запросом Выборка = Справочник.Номенклатура.Выбрать(Справочник.Номенклатура.ПустаяСсылка); а потом проверяешь на принадлежитєлементу думаю так будет быстрее, чем ты каждый раз будешь вычислять уровень элемента, а потом через родитель.родитель.родитель..... доставать верхний уровень справочника ... вроде бы так |
|||
16
Ненавижу 1С
гуру
22.07.11
✎
12:05
|
(15) бред
|
|||
17
butterbean
22.07.11
✎
12:05
|
(15) жесть
|
|||
18
DrHiHi
22.07.11
✎
12:07
|
(16) почему??
|
|||
19
Ненавижу 1С
гуру
22.07.11
✎
12:08
|
(18) потому что в результате придется проделать ту же работу, но анализируя ВСЕ группы верхнего уровня
|
|||
20
DrHiHi
22.07.11
✎
12:21
|
(19) но что будет работать оптимально??родитель.родитель.родитель.родитель
или МассивГрупп = Новый Массив; Выборка = Справочник.Номенклатура.Выбрать(Справочник.Номенклатура.ПустаяСсылка); Пока выборка.следующий() цикл если выборка.ЭтоГруппа() тогда МассивГрупп .добавить(выборка); КонецЕсли; КонецЦикла; Для Каждого Группа из МассивГрупп Цикл Если элемент.ПРинадлежитЭлементу(группа) тогда группаверхнегоуровня = группа; прервать; КонецЕсли; Конеццикла; ... правда смотря для чего... если нужно где-то в документе при выборе номенклатуры рядом вывести группу (что многие пользователи хотят), то рациональнее при открытии документа в переменную запихнуть массив групп, а потом при выводе строки перебирать его... ... смотря, что хочет сделать автор... где это ему надо и для чего?? |
|||
21
Ненавижу 1С
гуру
22.07.11
✎
12:22
|
ПРинадлежитЭлементу это как раз и есть завуалированный родитель.родитель.родитель.родитель
|
|||
22
butterbean
22.07.11
✎
12:22
|
(20) >> рациональнее при открытии документа в переменную запихнуть массив групп, а потом при выводе строки перебирать его...
все жощще и жощще |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |