Имя: Пароль:
1C
 
"верхний" родитель в иерархии элементов справочника
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) спасибо, буду иметь в виду
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.