Имя: Пароль:
1C
 
получение самого верхнего родителя в справочнике
,
0 LivingStar
 
16.09.14
11:36
в справочнике есть иерархия
как в независимости от вложенности
получать всегда самого верхнего родителя элемента?
1 ДенисЧ
 
16.09.14
11:37
циклом
2 Dedal
 
16.09.14
11:40
3 Maxus43
 
16.09.14
11:40
рекурсией
4 Dmitriy_76
 
16.09.14
11:41
полныйКод() не ?
5 akaBrr
 
16.09.14
11:41
я бы сначала получил группы 1 уровня, а потом проверял на вхождение
6 ObjectRelation Model
 
16.09.14
11:43
в 1С это сделано через Ж
7 ИС-2
 
naïve
16.09.14
11:45
запросом вывести иерархию, взять первый элемент
8 DmitriyDI
 
16.09.14
11:46
РодительВерхнегоУровня (TopLevelParent)
Использование:

Чтение и запись.
Описание:

Тип: СправочникСсылка.
Содержит родителя верхнего уровня.

Доступность:

Толстый клиент.
9 Maxus43
 
16.09.14
11:48
(8) забыл добавить
Расширение табличного поля списка справочника (Catalog list table box extension)


хрен оно где работает, кроме списка
10 LivingStar
 
16.09.14
11:52
есть элемент, вывожу его, что бы на его место вывести родителя верхнего уровня, только применять запрос если?
11 ObjectRelation Model
 
16.09.14
11:53
какая задача в целом?
12 Maxus43
 
16.09.14
12:02
(10) запросом это как раз фиг получится нормально
13 LivingStar
 
16.09.14
12:07
(11) выбран контрагент, он может быть в разной вложенности находиться, но самый верхний каталог это город, название папки, нужно её получить.
14 Maxus43
 
16.09.14
12:08
(13) контактная инфа есть у контриков... странный учет у вас
15 Maxus43
 
16.09.14
12:09
см с (1) по (5), выбирай
16 LivingStar
 
16.09.14
12:09
там структура каталогов сделана
17 Эльниньо
 
16.09.14
12:11
В семёре сделал бы:
1. Рекурсия
2. ПолныйКод()
18 el7cartel
 
16.09.14
12:12
(16) ну а в чем проблема рекурсию применить?
19 el7cartel
 
16.09.14
12:12
где-то тема даже с примером есть...
20 ДенисЧ
 
16.09.14
12:16
А рекурсия-то тут зачем...
21 LivingStar
 
16.09.14
12:28
(20) в справочнике контрагенты каталог, в нем каталоги города, а в них может быть элементы в разной вложенности

получается нужно получить название каталога второго с верху по иерархии
22 ДенисЧ
 
16.09.14
12:36
(21) Я спрашиваю, не что получить, а зачем применять рекурсию ))
23 LivingStar
 
16.09.14
12:39
(22) знаете как это правильнее получить? Что нужно применить?
24 ДенисЧ
 
16.09.14
12:42
(23) To iterate is Human, to recurse Devine
Ты же не считаешь себя богом?
25 Пушкин
 
16.09.14
12:47
Одним запросом, слабо?!
26 Андрюха
 
16.09.14
12:50
Да можно ж не запросом, а в цикле, пока ЗначениеЗаполнено(ТекущийРодитель.Родитель), не?
27 Drac0
 
16.09.14
12:52
(26) И зачем запросы в цикле делать? Лучше запросом: и быстрее и проще.
28 anatoly
 
16.09.14
12:53
(25) если можно условие:
ГДЕ &контр В ИЕРАРХИИ(спр.ссылка)
И спр.ссылка.родитель = &пустая

то получится. но не уверен. пробовать лень ))
29 Андрюха
 
16.09.14
12:55
Да почему в цикле запрос? Я имел в виду:
ТекущийРодитель = Контрагент.Родитель;
Пока ЗначениеЗаполнено(ТекущийРодитель.Родитель) Цикл
    ТекущийРодитель = ТекущийРодитель.Родитель;
КонецЦикла;
Сообщить("Родитель верхнего уровня: " + ТекущийРодитель);
30 Drac0
 
16.09.14
12:57
(29) Ты думаешь, там не запрос? :)
31 Maxus43
 
16.09.14
12:58
дарю :)))

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
     РодительВерхнегоУровня = Неопределено;
     ПолучитьРодителя(Ссылка, РодительВерхнегоУровня);
    
КонецПроцедуры

Процедура ПолучитьРодителя(Элемент, РодительВерхнегоУровня)
    
    Если Не Элемент.Родитель.Пустая() Тогда
        ПолучитьРодителя(Элемент.Родитель, РодительВерхнегоУровня)    
    Иначе
        РодительВерхнегоУровня = Элемент;
    КонецЕсли;
        
КонецПроцедуры
32 Kamas
 
16.09.14
12:59
(30) там все запрос этож бд
33 Kamas
 
16.09.14
13:00
(31) цикл лучше рекурсии. Ну по крайней мере мне так в школе говорили))
34 Maxus43
 
16.09.14
13:00
научились уже запросом родителя верхнего уровня выбирать?
35 Maxus43
 
16.09.14
13:00
(33) зависит от задачи
36 Kamas
 
16.09.14
13:13
Стильно модно молодежно :
Функция ВерхнийЭлемент(Контрагент)
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Контрагенты.Ссылка
        |ИЗ
        |    Справочник.Контрагенты КАК Контрагенты
        |ГДЕ
        |    Контрагенты.ЭтоГруппа
        |    И Контрагенты.Родитель = &ПустаяССылка";

    Запрос.УстановитьПараметр("ПустаяССылка", Справочники.Контрагенты.ПустаяСсылка());

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Если Контрагент.ПринадлежитЭлементу(ВыборкаДетальныеЗаписи.Ссылка) тогда
            Возврат ВыборкаДетальныеЗаписи.Ссылка
        КонецЕсли;
КонецЦикла;
    Возврат Справочники.Контрагенты.ПустаяСсылка();
КонецФункции
37 Крошка Ру
 
16.09.14
13:18
(36) Запрос.УстановитьПараметр("ПустаяССылка", Справочники.Контрагенты.ПустаяСсылка());

Это уже не олдфажно.

Молодежно

ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
38 Крошка Ру
 
16.09.14
13:18
+(37) *Это уже олдфажно
39 Kamas
 
16.09.14
13:19
(37) согласен
40 Сияющий Асинхраль
 
16.09.14
13:23
Без проблем. Уровень элемента ты всегда вытащишь, а зная уровень всегда можно программно сформировать запрос. Но, честно сказать, я предпочитаю (29)
41 Сияющий Асинхраль
 
16.09.14
13:28
(40)->(34)
42 Килограмм
 
16.09.14
14:07
Думаю, (36) лучше (29) если мало групп и\или количество уровней вложенности большое, а так самому (29) больше нравится - проще
43 LivingStar
 
16.09.14
15:49
интересно в (31) как то можно задать что бы получить родителя второго уровня
44 Fragster
 
гуру
16.09.14
15:51
45 Fragster
 
гуру
16.09.14
15:53
также специально для скорости - я сделал РС с измерением - ссылкой и ресурсами - Уровень, Левое значение, Правое значение
46 Fragster
 
гуру
16.09.14
15:53
заполнение/обновеление РС в подписке
47 Fragster
 
гуру
16.09.14
15:56
получение цепочки родителей:

ВЫБРАТЬ РАЗЛИЧНЫЕ
                                 |    Иерархия.Ссылка
                                 |ИЗ
                                 |    РегистрСведений.Иерархия КАК Список
                                 |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Иерархия КАК Иерархия
                                 |        ПО (Список.Ссылка В (&Ссылки))
                                 |            И (Иерархия.ЛевоеЗначение <= Список.ЛевоеЗначение)
                                 |            И (Иерархия.ПравоеЗначение >= Список.ПравоеЗначение)
48 Fragster
 
гуру
16.09.14
15:56
верхние родители - соответственно добавляется условие по Уровень = 1
49 Fragster
 
гуру
16.09.14
15:57
получение всех детей также моментально, меняем меньше на больше и наоборот. Например в запросах можно использовать такое соединение.
50 Fragster
 
гуру
16.09.14
15:59
данные для такой иерархии:

Ссылка левоеЗначение ПравоеЗначение Уровень
а      1             10             1
-б1    2              7             2
--в1   3              4             3
--в2   5              6             3
-б2    8              9             2