Имя: Пароль:
1C
 
Как получить верхнего родителя группы?
0 Parti
 
12.10.09
10:53
Номенклатура - Материалы -Бензин - АИ-92 - АИ-92
Последнее - элемент остальное - группы. Как узнать, что у элемента АИ-92 верхний родитель - Материалы? При этом уровень вложенности заранее не известен
1 pavlika
 
12.10.09
10:54
2 Defender aka LINN
 
12.10.09
10:55
Запрос с итогом по иерархии, и берешь только первый элемент.
3 Survivor
 
12.10.09
10:55
Запрос с иерархией.. и выбрать верхнюю группировку... если для единичной номенклатуры, а не для целого списка..
4 also
 
12.10.09
10:55
(2) Зачем?

РодительВерхнегоУровня (TopLevelParent)
Использование:
Чтение и запись.
Описание:
Тип: СправочникСсылка. Содержит родителя верхнего уровня.
5 also
 
12.10.09
10:56
(0) Почему бы сначала СП не полистать?
6 Defender aka LINN
 
12.10.09
10:58
(5) А почему бы ТЕБЕ не прочитать?
7 also
 
12.10.09
10:58
(6) А что тебе не нравится?
8 Defender aka LINN
 
12.10.09
10:59
(7) Ну, посмотри, что такое ты в (4) привел.
9 Mitriy
 
12.10.09
11:01
(7)

Расширение табличного поля списка справочника
РодительВерхнегоУровня (TopLevelParent)
...
10 also
 
12.10.09
11:03
(9) ааа...
11 аспид
 
12.10.09
11:11
рекурсия.
Процедура ВернутьРодителя(Элемент)
   Если Элемент.Уровень > 0 тогда
       Элемент = Элемент.Родитель;
       ВернутьРодителя(Элемент);
   иначе
       Возврат Элемент;
   КонецЕсли;
КонецПроцедуры
так попрет ?
12 Defender aka LINN
 
12.10.09
11:12
(11) Попрет, но за такое - пожизненный эцих без гвоздей
13 аспид
 
12.10.09
11:12
сфигали ?
14 аспид
 
12.10.09
11:12
(12) обоснуй
15 Defender aka LINN
 
12.10.09
11:15
(14) У тебя выполнятся N запросов, в зависимости от уровня вложенности. В каждом из этих запросов будут выбраны все реквизиты элемента.
Еще вопросы? :)
16 Stim
 
12.10.09
11:16
(11) и как у тебя процедура возвращает значения, непонятно
17 аспид
 
12.10.09
11:18
(15)и че ? оперативку экономим ? или вычислительные мощности ?
(16) пардон. возврат убрать. сначала писал функцию.
18 аспид
 
12.10.09
11:19
(15) это я к тому что если что то экономим...либо код используется в тяжелом запросе, тогда да. эцих не помешает.. а ради разового отстрела, нужно ли морочиться с запросами.
19 Defender aka LINN
 
12.10.09
11:19
(17) О_о Ты это серьезно, или прикалываешься?
20 Defender aka LINN
 
12.10.09
11:20
(18) Это ж не повод начинать расслабляться. Написал один раз и забыл нафиг. А то потом понадобится оптимизировать, начнешь по второму разу работу делать. Или ты просто трудолюбив от природы? :)
21 Aprobator
 
12.10.09
11:21
гы - лень двигатель прогресса )))
22 аспид
 
12.10.09
11:23
(20) ну..скажем так вопрошающему пока нечего напрягать.. не то что бы расслабиться. то есть суть я ему передал, а делать запросом, функцией или процедурой, это его личный опыт.. главное что бы понятно было куда копать. сам бы лично такой код не юзал бы.
(20) мучительно искал отмазу.. да ))) я трудолюбив .. от природы ))
23 Aprobator
 
12.10.09
11:23
(20) кстати а вместо запроса  с итогами не дешевле организовать подзапрос по группам первого уровня справочника и дальше через соединение? Или соединение по В ИЕРАРХИИ в данном случае не отрабатывает?
24 Parti
 
12.10.09
11:24
(18) это не разовый отстрел. Нужно получить все элементы справочника, у которых верхний родитель - Материалы. Но получаю через COM-соединение, поэтому запросом тут как-то сложно..
25 аспид
 
12.10.09
11:24
(24) вот вот .. суть понятна ? а далее копай. как лучше..
26 Mitriy
 
12.10.09
11:25
(24) почему сложно? все то же самое...
27 аспид
 
12.10.09
11:27
логика банальна. если человек что то спрашивает, то не является экспертом .. так ?
выяснять глубину неэкспертизма, лениво.. поэтому отвечаем максимально просто. что бы было понятно.
28 Mitriy
 
12.10.09
11:27
(27) учись делать хорошо, а хреново - оно само получится...
29 Aprobator
 
12.10.09
11:29
(27) расслабься - чего ты завелся так? Ну грубоват немного тов. Defender, но дело он свое знает и фору многим здесь даст как специалист (мне в том числе).
30 Defender aka LINN
 
12.10.09
11:30
(23) Соединение по "в иерархии" вообще не делается.
(28) +100500
31 аспид
 
12.10.09
11:30
(28) согласен абсолютно. но при обучении делать хорошо, не забывать что основная цель не обучение а результат. не институт же.. иногда надо просто дать результат любой ценой быстро. а потом доводить до идеала...ну имхо конечно.
32 аспид
 
12.10.09
11:31
(29) да упаси бог. при моей работе быть нервным...скучно просто...потрепаться захотелось.. чего б не пофлудить с хорошим человеком.. тем более что в профессионализме Дефендера я собственно и не сомневался.. ))
33 Aprobator
 
12.10.09
11:31
(30) спс - буду знать. А то раньше с этим просто сталкиваться не приходилось. Ну вот как то не возникают у мя такие задачи.
34 NcSteel
 
12.10.09
11:36
Вот еще вариант )

СправочникСсылка.<Имя справочника>.ПолныйКод (CatalogRef.<Имя справочника>.FullCode)
СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>)
ПолныйКод (FullCode)
Синтаксис:
ПолныйКод()
Возвращаемое значение:
Тип: Строка. Строка, включающая код элемента и коды всех вышестоящих элементов.
Коды выводятся слева направо, начиная с самого верхнего уровня, разделяются символом "/".
Описание:
Получает код элемента справочника с учетом кодов всех вышестоящих элементов.
Пример:
Сообщить("Полный код данного элемента: " +
         СсылкаНаЭлемент.ПолныйКод());
35 Classic
 
12.10.09
11:36
В восьмерке аналога семерошному ПолныйКод() нет?
36 Classic
 
12.10.09
11:36
(34) Опередил:)
37 NcSteel
 
12.10.09
11:53
А еще можно так )

Попытка
РодительВысший = Элемент.Родитель.Родитель;
Исключение
Возврат РодительВысший;
КонецПопытки;

Попытка
РодительВысший = Элемент.Родитель.Родитель.Родитель;
Исключение
Возврат РодительВысший;
КонецПопытки;


Попытка
РодительВысший = Элемент.Родитель.Родитель.Родитель.Родитель;
Исключение
Возврат РодительВысший;
КонецПопытки;

Попытка
РодительВысший = Элемент.Родитель.Родитель.Родитель.Родитель.Родитель;
Исключение
Возврат РодительВысший;
КонецПопытки;
38 аспид
 
12.10.09
11:56
(37) гм. забавно. а если уровней вложенности 15-20 ?
39 Stim
 
12.10.09
11:59
(38) а если заранее просчитать уровень и форматированием строки добавить родителей, сколько нужно?:)
40 NcSteel
 
12.10.09
12:00
РодительВысший = "";
Пока Истина Цикл
Попытка
Выполнить("РодительВысший = Элемент.Родитель.Родитель.Родитель.Родитель.Родитель;");
Прервать;
Исключение

КонецПопытки;
КонецЦикла;
41 аспид
 
12.10.09
12:00
(24)и таки да. если задача звучит именно так, то -
СправочникМенеджер.ВыбратьИерархически(<Родитель>,<Владелец>,<Отбор>,<Порядок>)
42 NcSteel
 
12.10.09
12:01
тьфу ты
СтрокаРодитель = "Элемент";
РодительВысший = "";
Пока Истина Цикл
СтрокаРодитель = СтрокаРодитель + ".Родитель";
Попытка
Выполнить("РодительВысший =" + СтрокаРодитель );
Прервать;
Исключение

КонецПопытки;
КонецЦикла;
43 NcSteel
 
12.10.09
12:01
Опять скосячил )))

тьфу ты
СтрокаРодитель = "Элемент";
РодительВысший = "";
Пока Истина Цикл
СтрокаРодитель = СтрокаРодитель + ".Родитель";
Попытка
Выполнить("РодительВысший =" + СтрокаРодитель );

Исключение
Прервать
КонецПопытки;
КонецЦикла;

вот так будет правильно )))
44 NcSteel
 
12.10.09
12:02
(41) Извращенец, настоящий программист идет по пути (43)
45 Serg_1960
 
12.10.09
12:03
Башка и так в понедельник трещит - а тут вы ешё тарахтите. Берите, варвары, готовое:

Функция РодительВерхнегоУровня(Ссылка)
   
   Запрос = Новый Запрос(
   "ВЫБРАТЬ
   |    Номенклатура.Ссылка КАК Ссылка
   |ИЗ
   |    Справочник.Номенклатура КАК Номенклатура
   |ГДЕ
   |    Номенклатура.Ссылка = &Ссылка
   |ИТОГИ ПО
   |    Ссылка ТОЛЬКО ИЕРАРХИЯ");
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
   Возврат Выборка.Ссылка;
   
КонецФункции
46 аспид
 
12.10.09
12:05
(44) у меня децтво тяжелое было.. я начинал кодить с асма для 580го процессора )) поэтому некоторые перекосы в психике..
47 NcSteel
 
12.10.09
12:07
(45) Фу , пришел и все изгадил.
48 аспид
 
12.10.09
12:09
(47) вот вот .. оборвал крылья полету фантазии..

з.ы. Ростов ? земляк ?
49 NcSteel
 
12.10.09
12:10
(48) Да Ростов.
50 Serg_1960
 
12.10.09
12:12
Всё ещё тарахтите :( Универсальное оружие:

Функция РодительВерхнегоУровня(Ссылка)
   
   Имя = Ссылка.Метаданные().Имя;
   Запрос = Новый Запрос(
   "ВЫБРАТЬ
   |    "+Имя+".Ссылка КАК Ссылка
   |ИЗ
   |    Справочник."+Имя+" КАК "+Имя+"
   |ГДЕ
   |    "+Имя+".Ссылка = &Ссылка
   |ИТОГИ ПО
   |    Ссылка ТОЛЬКО ИЕРАРХИЯ");
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
   Возврат Выборка.Ссылка;
   
КонецФункции
51 pavlika
 
12.10.09
12:12
А ведь автор обозначил в (24) что ему нужно ))
52 аспид
 
12.10.09
12:13
(51) ага. а я ему в 41 ответил. на то что нужно. думаешь не взлетит такой вариант ?
53 NcSteel
 
12.10.09
12:13
(50) Ты это давай , прекращай. А то я в депрессию впаду.
54 аспид
 
12.10.09
12:14
(51) хотя конечно в (50) гораздо ближе к 22см ))
55 NcSteel
 
12.10.09
12:14
(52) Нет не взлетит , так как отбор по родителю не предусматривает отбора по верхнему родителю.
56 аспид
 
12.10.09
12:16
(55) фиг. задача звучит как ? выбрать всех кто в папке материалы. ну и пожалте вариант выбора. читай (24) внимательно
57 NcSteel
 
12.10.09
12:19
(56) А он обратную выборку хочет. Все ровно запрос эффективней.
58 аспид
 
12.10.09
12:20
(57) а у него с запросами через ком какие то траблы. и сформулировал видимо криво.
(0) откликнись.. чего надо то было точно ?
59 Parti
 
12.10.09
12:33
(58) надо было получить из справочника только те позиции, у которых верхний родитель - "МАТЕРИАЛЫ". Все остальные - накуй.
С запросами через ком разобралсо, но буду делать, как в 41
или.. что быстрее через ком - перебирать элементы как в 41 или организовать функцию проверки верхнего родителя (50) и перебирать все элементы?
зы: неужели нельзя просто и тупо запросом выбрать только те элементы, у которых верхний родитель - Материалы??
60 pavlika
 
12.10.09
12:42
тупо запросом:
ВЫБРАТЬ
   Номенклатура.Ссылка,
   Номенклатура.Наименование
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)
АВТОУПОРЯДОЧИВАНИЕ
61 Parti
 
12.10.09
12:46
спс
62 Serg_1960
 
12.10.09
13:08
Любителям извращений :)

   Текст = "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка В ИЕРАРХИИ(ВЫБРАТЬ Номенклатура";
   Для N = 1 По МойЭлемент.Уровень() Цикл
       Текст = Текст + ".Родитель";
   КонецЦикла;
   Текст = Текст + " КАК Родитель ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Ссылка = &Ссылка)";
   Запрос = Новый Запрос(Текст);
   Запрос.УстановитьПараметр("Ссылка", ВашЭлементВПодпапке);
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Сообщить(Выборка.Ссылка);    
   КонецЦикла;
63 Mkonst
 
12.10.09
13:38
(62) прочитай v8: Проблема при обновлении УПП релизом 24.2  предпослединй пост...