Как в запросе получить головного родителя элемента справочника? #627236


#0 by Zombi
Как в запросе получить головного родителя элемента справочника?
#1 by andrewks
головной родитель - это кто?
#2 by Zombi
Есть элемент справочника "Подразделения" "Оборудование", Элемент "Оборудование" является родителем для элемента "Керхер", который в свою очередь является родителем для элемента "КерхерЦентр". Выбираю я в запросе "КерхерЦентр", хочу видеть что он принадлежит элементу "Оборудование".
#3 by rinatru
классная задачка на отработку рекурсии :) на собеседовании часто задают
#4 by МишКа
Родитель.Родитель.Родитель ..... и ОБЪЕДИНИТЬ тебе помогут
#5 by Фрэнки
да и тут уже многажды перетиралось подобное
#6 by Rie
Если глубина иерархии - конечная, можешь N раз соединить таблицу саму с собой. Иначе - циклом.
#7 by Фрэнки
а разве возможно использование переменных, циклов и рекурсий внутри  текста запроса на 1С?
#8 by mikecool
выбор когда родитель.родитель.родитель...родитель(н) = пустая ссылка тогда родитель...родитель(н-1)
#9 by Rie
Возможно снаружи текста запроса. А ещё возможны временные таблицы.
#10 by vde69
для начала получи список корневых обьектов (ГДЕ Ссылка.Родитель = &Пустая) ну и дальше у справочника есть функция ПринадлежитЭлементу
#11 by Zombi
Я так понимаю, что проще вне запроса все сделать?
#12 by Rie
Проще скомбинировать. Совсем вне запроса - это, фактически, по мини-запросу на каждый элемент. Запросами можно уровни "оптом" получать.
#13 by andrewks
переменные - можно, циклы - в какой-то степени тоже, а вот с рекурсией бедя
#14 by badboychik
>> можешь N раз соединить таблицу саму с собой Слёт извращенцев какой то а не топик
#15 by John83
как насчет завести соответствующий реквизит или использовать для этих целей свойства?
#16 by Daenerys
#17 by Фрэнки
Смотря по важности поставленной задачи, следуя совету , завести реквизит "Прародитель" и подставлять в событии ПередЗаписью значение, которое рекрусивным способом получать по коду из А в запросе пользовать значение поля Прародитель
#18 by Rie
Какой интересный язык запросов... :-) Да и функция - неработающая.
#19 by mikecool
бурерожденная? )
#20 by Фрэнки
кстати, да - код даже синстакс-контроль не пройдет
#21 by mikecool
почему?
#22 by mikecool
правильнее было бы Если Не ЗначениеЗаполнено(Ссылка.Родитель) Тогда
#23 by Daenerys
именно. отличный сериал! у меня работает =)
#24 by Rie
...и функция всегда вернёт либо пустую ссылку, либо Неопределено.
#25 by mikecool
ну да, не досмотрел ))
#26 by Rie
У тебя, наверно, ровно 2 уровня иерархии. Угадал?
#27 by mikecool
не правильно у тебя работает ) и где драконы?
#28 by Daenerys
да
#29 by Rie
И на первом уровне иерархии нет ни одного элемента, только группы? Угадал?
#30 by DEVIce
А в запрос добавить итоги с иерархией, а потом обойти результат запроса с группировкой не проще будет?
#31 by Daenerys
а драконы, как в старом анекдоте, вымерли, потому что питались юными, невинными девами да
#33 by Rie
Создай элемент на первом уровне (или сунь этой функции группу) - и посмотри, как красиво вылетает 1С.
#34 by Zombi
Такой вот костыль получился(обработка таблицы-результата запроса):        Для Каждого СтрокаГоловныхПодразделений Из ТаблицаГоловныхПодразделений Цикл Одно "Если" можно убрать из цикла и в одно объединить.
#35 by Rie
Сейчас кто-то за флуд в тематической ветке отправится куда-то...
#36 by DimVad
Мне кажется, можно и в запросе, без кода... Типа так: 1. Получаем во временную таблицу элементы справочника, для которого нужны "головные родители". 2. Получаем в другую временную таблицу элементы справочника, являющимися каталогами и не имеющие родителя (т.е. - папки первого уровня). 3. Делаем полное объединение 1 с 2 по условию, что элемент из 2 находится в иерархии элемента из 1. Думаю - работать будет, а вот насколько быстро... ;-)
#38 by Lama12
Все бы было так просто если б связь по "В иерархии" работала.
#39 by mikecool
гм... а разве не работает?
#40 by Reset
А вот так сработает? Запрос=Новый Запрос("Выбрать Ссылка Из Справочник.Контрагенты как Контрагенты Где Контрагенты.Ссылка=&Ссылка
#41 by ssh2006
не а
#42 by vmv
тема обсасывалась 100500 раз и великолепно гуглитться тут. Вывод1: ничего нового тут не напишут Вывод2: если порядок иерархии не фиксирован, то только дрочево с Родитель.Родитель...Родитель Вывод3: если логика твоего проложения требует частого обращения к корневому родителю таблицы(отборы, соединения, вложенные запросы), то забей на дрочево и введи реквизит в таблицу справочника "КорневойРодитель" и на подписке "ПередЗаписью" его прошивай.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С