|
"верхний" родитель в иерархии элементов справочника | ☑ | ||
---|---|---|---|---|
0
vechiy
06.04.11
✎
11:47
|
Как узнать, в запросе или в коде, сабж?
|
|||
1
IronDemon
06.04.11
✎
11:48
|
Родитель у него пустой
|
|||
2
Scooter
06.04.11
✎
11:48
|
(0)1й уровень?
|
|||
3
Wobland
06.04.11
✎
11:48
|
Родитель.Пустая()=Истина
|
|||
4
dimoff
06.04.11
✎
11:49
|
Имеется ввиду видимо для конкретного элемента или группы элементов узнать верхнего родителя. Если в этом смысле то сабж долгий но обмусоливвался много раз.
|
|||
5
Fragster
гуру
06.04.11
✎
11:50
|
запихиваешь в ВТ группы верхнего уровня, делаешь левое соединение по условию В ИЕРАРХИИ
|
|||
6
Shur1cIT
06.04.11
✎
11:50
|
если в коде то бежиш циклом, если родитель пустой то это и есть верхний родитель
|
|||
7
butterbean
06.04.11
✎
11:50
|
Функция ПолучитьВерхнегоРодителя(Ссылка)
Если не ЗначениеЗаполнено(Ссылка.Родитель) Тогда Возврат Ссылка Иначе Возврат ПолучитьВерхнегоРодителя(Ссылка.Родитель) КонецЕсли; КонецФункции |
|||
8
vechiy
06.04.11
✎
11:51
|
вот такая иерархия:
-подразделения организации -цо -бух -ит -и т.д. нужно получать цо (не зависимо от того, сколько вложено подразделений) 1й уровень в таком случае будет "подразделения организации" или цо? |
|||
9
Матвеев Максим
06.04.11
✎
11:51
|
Возврат ?(Элем.Уровень() = 0,Элем,глРодитель(Элем.Родитель));
|
|||
10
dimoff
06.04.11
✎
11:54
|
(6)(7) Если в одной процедуре необходимо данный код выполнить для нескольких десятков элементов то будет очень тормознуто
|
|||
11
vechiy
06.04.11
✎
11:55
|
(7)
Спасибо! Так и поступлю! Опасался, что вернётся значение "подразделения организаций". Но всё норм. Возвращает ЦО. Всем спасибо |
|||
12
Shur1cIT
06.04.11
✎
11:56
|
Функция ПолучитьВерхнегоРодителя(Ссылка)
ТекРодитель = Ссылка; Пока ЗначениеЗаполнено(ТекРодитель .Родитель) Цикл ТекРодитель = ТекРодитель.Родитель КонецЦикла Воврат ТекРодитель КонецФункции примерно так |
|||
13
Fragster
гуру
06.04.11
✎
12:04
|
Выбрать
Подразделения.Ссылка КАК СсылкаВерхнегоУровня Поместить ВерхнийУровень Из Справочник.Подразделения Как Подразделения Где Подразделения.ЭтоГруппа И Подразделения.Родитель = Значение(Справочник.Подразделения.ПустаяСсылка) ; Выбрать Подразделения.Ссылка, ВерхнийУровень.СсылкаВерхнегоУровня Из Справочник.Подразделения Как Подразделения Левое Соединение ВерхнийУровень По Подразделения.Ссылка В Иерархии (ВерхнийУровень.СсылкаВерхнегоУровня) |
|||
14
Fragster
гуру
06.04.11
✎
12:04
|
хотя ХЗ, можно ли В ИЕРАРХИИ использовать в условии соединения
|
|||
15
tocaelectro
06.04.11
✎
12:11
|
(14) нельзя
|
|||
16
Fragster
гуру
06.04.11
✎
12:26
|
ну тогда
по условию Подразделения.Родитель = ВерхнийУровень.СсылкаВерхнегоУровня ИЛИ Подразделения.Родитель.Родитель = ВерхнийУровень.СсылкаВерхнегоУровня ИЛИ Подразделения.Родитель.Родитель.Родитель = ВерхнийУровень.СсылкаВерхнегоУровня ИЛИ Подразделения.Родитель.Родитель.Родитель.Родитель = ВерхнийУровень.СсылкаВерхнегоУровня ИЛИ Подразделения.Родитель.Родитель.Родитель.Родитель.Родитель = ВерхнийУровень.СсылкаВерхнегоУровня ... |
|||
17
y88
06.04.11
✎
12:32
|
когда Подразделение.Родитель = &ПустаяСсылка Тогда
Подразделение когда Подразделение.Родитель.Родитель = &ПустаяСсылка Тогда Подразделение.Родитель когда Подразделение.Родитель.Родитель.Родитель = &ПустаяСсылка Тогда Подразделение.Родитель.Родитель и т.д. |
|||
18
dimoff
06.04.11
✎
12:35
|
(16)(17) Так лучше, но идеальный вариант в подписке ПриЗаписи вычислять родителя верхнего уровня. учитывая всякого рода переносы из папок в папку и т.п. и писать в дополнительный реквизит.
|
|||
19
Scooter
06.04.11
✎
12:38
|
(18)+500
в свойства например |
|||
20
КонецЕсли
06.04.11
✎
16:14
|
(18) Если будет изменен один из промежуточных родителей (сменим у него верхнего родителя) то у дочерних будет храниться лажа.
|
|||
21
Fragster
гуру
06.04.11
✎
16:15
|
(20) это смотря как подписку написать
|
|||
22
Ненавижу 1С
гуру
06.04.11
✎
16:17
|
лажануто все таки иерархия в справочниках 1С реализована
|
|||
23
dimoff
06.04.11
✎
16:46
|
(20) Это и имел ввиду "учитывая всякого рода переносы из папок в папку и т.п."
|
|||
24
dimoff
06.04.11
✎
16:46
|
(22) Да что ты говоришь? А как надо было реализовать?
|
|||
25
StarIK2005
06.04.11
✎
16:50
|
Родитель.код IS NULL
|
|||
26
Nallama
06.04.11
✎
20:53
|
Недавно стояла задача последовательного получения всех родителей элемента справочника с неограниченным числом уровней иерархии. В переложении на текущие условия получится примерно так:
Запрос = Новый Запрос; ЗапросЛЧ = "ВЫБРАТЬ ИмяСправочника"; ЗапросПЧ = " КАК Ссылка ИЗ Справочник.ИмяСправочника КАК ИмяСправочника"; ДостигнутаКорневаяГруппа = Ложь; Поле = ".Ссылка"; Пока Не ДостигнутаКорневаяГруппа Цикл ЗапросЛЧ = ЗапросЛЧ + Поле; Поле = ".Родитель"; Запрос.Текст = ЗапросЛЧ + ЗапросПЧ; Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Если = Выборка.Ссылка.Пустая() Тогда ДостигнутаКорневаяГруппа = Истина; КонецЕсли; Возврат Выборка.Ссылка; Может, пригодится. P.S. Переписывала без отладчика, за возможные мелкие косяки в синтаксисе просьба не бить ) |
|||
27
Nallama
06.04.11
✎
20:54
|
ну вот, забыла КонецЦикла; перед возвратом..
|
|||
28
vechiy
07.04.11
✎
18:47
|
Спасибо!
в (7) оптимальная, имхо:) |
|||
29
Nallama
07.04.11
✎
19:55
|
(28) Не исключено ) Меня просто, фигурально выражаясь, наставники по рукам били за необоснованное использование объектной модели доступа к данным )
|
|||
30
vechiy
08.04.11
✎
11:31
|
(29) Медленней?
|
|||
31
dimoff
08.04.11
✎
11:34
|
(29) Заставь дурака богу молиться он и лоб расшибет
|
|||
32
Nallama
08.04.11
✎
11:49
|
(31) представь, что у тебя не примитивный справочник код-наименование-родитель и не 2-3 вложенных уровня и объясни, в чем я не права.
|
|||
33
dimoff
08.04.11
✎
11:52
|
(32) Первое в чем ты не права - запрос в цикле. Если ты делаешшь не типовую(да даже если и типовую) то ты примерно представляешь сколько уровней вложенности в справочнике, сразу пиши в запросе Родитель КАК Поле1, Родитель.Родитель КАК Поле2, Родитель.Родитель.Родитель КАК Поле3, родитель.Родитель.Родитель.Родитель КАК Поле4
Если не найдешь верхнего повтори запрос от последнего родителя Второе в чем ты не права ты видимо не понимаешь почему не нужно "необоснованное использование объектной модели". |
|||
34
Nallama
08.04.11
✎
12:11
|
(33) спасибо, буду иметь в виду
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |