|
Из справочника вернуть Родителя Самого Верхнего уровня. | ☑ | ||
---|---|---|---|---|
0
alex2808
18.06.10
✎
11:57
|
Всем привет.
Утро пасмурное, тормоз ужасный... :) Есть Иерархический справочник Подразделений. Выбрано подразделение фиг знает какой вложенности. Мне нужно вернуть Родителя выбранного подразделения самого верхнего уровня у которого реквизит Родитель пустой. Дайте идею, как это сделать? |
|||
1
FIXXXL
18.06.10
✎
11:58
|
есть кусок кода некошерного с запросом в цикле :)
|
|||
2
vde69
18.06.10
✎
11:59
|
получить 0 уровень (у котороко родитель пустой) и соеденить со списком выбраных по условию в иерархие
|
|||
3
Asmody
18.06.10
✎
12:00
|
Функция ВернутьРодителя(Элемент)
Если Элемент.Родитель.Пустая() Тогда Возврат Элемент; Иначе Возврат ВернутьРодителя(Элемент.Родитель); КонецЕсли; КонецФункции |
|||
4
Kashemir
18.06.10
✎
12:01
|
ВерхнийУровеньРодитель = Ссылка;
Пока ЗначениеЗаполнено(ВерхнийУровеньРодитель .Родитель) Цикл ВерхнийУровеньРодитель = ВерхнийУровеньРодитель .Родитель; КонецЦикла; |
|||
5
FIXXXL
18.06.10
✎
12:02
|
Функция ПолучитьДепартамент(Подразделение) Экспорт
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПодразделенияОрганизаций.Ссылка |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций |ГДЕ | ПодразделенияОрганизаций.Родитель = &ПустойРодитель"; Запрос.УстановитьПараметр("ПустойРодитель", Справочники.ПодразделенияОрганизаций.ПустаяСсылка()); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПодразделенияОрганизаций.Ссылка |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций |ГДЕ | ПодразделенияОрганизаций.Ссылка В ИЕРАРХИИ(&Родитель) | И ПодразделенияОрганизаций.Ссылка = &Подразделение"; Запрос.УстановитьПараметр("Подразделение", Подразделение); Запрос.УстановитьПараметр("Родитель", Выборка.Ссылка); Результат = Запрос.Выполнить(); Выборка1 = Результат.Выбрать(); Если Выборка1.Следующий() Тогда возврат Выборка.Ссылка; КонецЕсли; КонецЦикла; Возврат Справочники.ПодразделенияОрганизаций.ПустаяСсылка(); КонецФункции |
|||
6
alex2808
18.06.10
✎
12:03
|
А если одним запросом?
(3)(4) Или этот код базу дергать не будет, как запрос (5). |
|||
7
vde69
18.06.10
✎
12:04
|
(5) поубивал-бы за такое, одним запросом делается за 2 минуты
|
|||
8
alex2808
18.06.10
✎
12:04
|
(7) как?
|
|||
9
FIXXXL
18.06.10
✎
12:08
|
(7) согласен, делается
|
|||
10
alex2808
18.06.10
✎
12:13
|
(7)(9) Как будет выглядеть запрос?
|
|||
11
Sasha_H
18.06.10
✎
12:14
|
вот я так делал:
Тег_CodeGroup1C = РаботаСШинамиИДисками.ПолучитьВерхнийУровеньГруппы(Выборка.Номенклатура).Код; //Получить верхний уровень группы переданной ссылки справочника // Функция ПолучитьВерхнийУровеньГруппы (ГруппаИерархии, ВерхняяГруппа=Неопределено) Экспорт Если ГруппаИерархии.Уровень() <> 0 Тогда ВерхняяГруппа = ПолучитьВерхнийУровеньГруппы(ГруппаИерархии.Родитель); Если ВерхняяГруппа.Уровень() = 0 Тогда Возврат ВерхняяГруппа; КонецЕсли; Иначе Возврат ГруппаИерархии; КонецЕсли; КонецФункции |
|||
12
Asmody
18.06.10
✎
12:19
|
(10) например, так:
ВЫБРАТЬ Контрагенты.Ссылка КАК Ссылка, Контрагенты.Представление ИЗ Справочник.Контрагенты КАК Контрагенты ГДЕ Контрагенты.Ссылка = &Ссылка ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ из результата берем только 1 строку |
|||
13
Asmody
18.06.10
✎
12:19
|
(12)+ Представление не нужно, это конструктор добавил
|
|||
14
Kashemir
18.06.10
✎
12:23
|
Негламурное решение с фиксированной максимальной глубиной иерархии
ВЫБРАТЬ Номенклатура.Ссылка, ВЫБОР КОГДА Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ТОГДА Номенклатура.Ссылка КОГДА Номенклатура.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ТОГДА Номенклатура.Родитель КОГДА Номенклатура.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка) ТОГДА Номенклатура.Родитель.Родитель ИНАЧЕ Номенклатура.Родитель.Родитель.Родитель КОНЕЦ КАК РодительВерхнегоУровня ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В (&СписокНоменклатуры) |
|||
15
Sasha_H
18.06.10
✎
12:24
|
(10) +1 можно и так )))
|
|||
16
Sasha_H
18.06.10
✎
12:25
|
(14) - это ООооочень тупо
|
|||
17
Kashemir
18.06.10
✎
12:26
|
(16) Ты не поверишь - но именно так в результает и сделаешь ;-)
|
|||
18
Sasha_H
18.06.10
✎
12:28
|
(17) да нет же, есть более гламурные решения:
(11) (12) + 1))) ЗЫ. я не там поставил я за 10 взял в (15) посте |
|||
19
FIXXXL
18.06.10
✎
12:29
|
ВЫБРАТЬ
Подразделения.Ссылка ИЗ Справочник.Подразделения КАК Подразделения ГДЕ Подразделения.Ссылка = &Ссылка И Подразделения.Ссылка В ИЕРАРХИИ (ВЫБРАТЬ Подразделения.Ссылка КАК СсылкаНаВерхнего ИЗ Справочник.Подразделения КАК Подразделения ГДЕ Подразделения.Ссылка В (ВЫБРАТЬ Подразделения.Ссылка КАК Ссылка ИЗ Справочник.Подразделения КАК Подразделения ГДЕ Подразделения.Родитель = ЗНАЧЕНИЕ(справочник.подразделения.пустаяссылка))) |
|||
20
pavlika
18.06.10
✎
12:29
|
Функция РодительВерхнегоУровня(Ссылка) Экспорт |
|||
21
Sasha_H
18.06.10
✎
12:31
|
по мне то самое изящное решение указано в (12)
|
|||
22
Kashemir
18.06.10
✎
12:33
|
(21) Это изящное решение имеет существенный минус - итоги не получится использовать во вложенных запросах.
Имхо решение в (19) гораздо интереснее |
|||
23
alex2808
18.06.10
✎
12:37
|
(12) Класс !!!
Спасибо всем. |
|||
24
Asmody
18.06.10
✎
12:48
|
(22) решение (19) конечно интереснее, только оно неправильное
|
|||
25
simol
18.06.10
✎
12:52
|
Родитель самого верхнего уровня = пустой ссылке
|
|||
26
lxs
18.06.10
✎
12:54
|
(0) у меня нумерация подразделений построена по принципу многоуровневого списка.
0100 -0101 --0101-01 Получить верхний уровень - никакого труда не составляет. |
|||
27
Kashemir
18.06.10
✎
12:57
|
(24) Жаль, так перспективно выглядело :(
|
|||
28
FIXXXL
18.06.10
✎
13:01
|
(24) да, лоханулся не туда :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |