Как вывести всех родителей одного элемента в иерархическом справочнике? #626489


#0 by Конфигуратор1с
В общем есть иерархический справочник подразделение (иерархия элементов) . Выбираю я элемент на определенном уровне и хочу получить все вышестоящие элементы. Нужно в запросе. СКД не предлагать
#1 by ЧашкаЧая
#2 by PR
Никак
#3 by ЧашкаЧая
Ой, в запросе. Никак.
#4 by Конфигуратор1с
печалька(((
#5 by PR
А зачем?
#6 by Конфигуратор1с
Да вот есть документ договор. Вот, например менеджер есть, у него есть начальник отдела, у начальника отдела есть коммерческий директорк, у того директор генеральный. Вот что бы заключить договор вся эта лесенка должна его согласовать. Вот мне и нужно согласователей получить.
#7 by PR
1. А запросом зачем? 2. А почему бы не выбрать с иерархией, а в запросе не поставить отбор по менеджеру,
#8 by smaharbA
ПолноеНаименование
#9 by Конфигуратор1с
ну мне все равно получать в запросе по ним доп информацию типа фиофизлиц и так далее. так выбираю иерархию и ставлю отбор - выводит одного менеджера. ?
#10 by МишКа
Используй
#11 by andrewks
и шо с этим делать?
#12 by Конфигуратор1с
пробовал - нифига
#13 by mistеr
Если принять ограничение на глубину иерархии, то можно, соединением n раз.
#14 by andrewks
в том-то и фишка - "Если принять ограничение на глубину иерархии"
#15 by mistеr
В конкретном случае ТС это вполне допустимо. Хотя пройтись по ссылкам в цикле всяко лучше.
#16 by andrewks
решается в общем случае, но с динамическим текстом запроса
#17 by mistеr
Как?
#18 by andrewks
это писать надо. а писать мне лень. вот если бы меня материально простимулировали...  ;-)
#19 by МишКа
Запрос типа: где ссылка=&МояСсылка ИТОГИ ПО Ссылка ИЕРАРХИЯ выдает всех родителей + саму ссылку (2 раза) можешь попробовать в консоли
#20 by andrewks
бу-га-га
#21 by PR
Пля. При _выборе_ нужно выбирать иерархически.
#22 by Конфигуратор1с
пробовал - не выдает
#23 by Конфигуратор1с
у меня иерархия элементов
#24 by PR
И чо?
#25 by Конфигуратор1с
ничо - не пашет
#26 by mistеr
Ну идею хотя бы. Я вот не вижу общего решения.
#27 by PR
Потому что , а в ... хм... не работает, мягко говоря.
#28 by catena
Только с ограниченным уровнем иерархии. Ну или максимальную вложенность отдельно вычислять и основной запрос формировать динамически, исходя из полученной цифры.
#29 by dangerouscoder
а что мешает вычислить через ПолноеНаименование  длину вложенности и сделать динамический запрос.
#30 by Конфигуратор1с
+ та некрасиво это.  Я думал штатно как то можно, без динамических запросов (((
#31 by andrewks
получаем уровень исходного эл-та, и, исходя из этого уровня, собираем динамический текст запроса
#32 by andrewks
а это штатно
#33 by andrewks
безудержно жаль, что коррелированные подзапросы так слабо реализованы в 1с-ке. а то можно было статику написать, причём коротенькую
#34 by Конфигуратор1с
штатно это когда "выбрать усехродителей из спарвочник где ссылка = мояссылка"
#35 by andrewks
прямые запросы ждут тебя, солдат!
#36 by catena
Как вариант, без динамического формирования текста: вытащить запросом всё необходимое по всем работникам, а в коде уже к каждому родителю подтянуть его данные из выборки :)
#37 by МишКа
Поменял иерархию на "иерархия элементов". Все работает также.
#38 by andrewks
это неспортивно
#39 by andrewks
уж лучше сразу передать в зарос ТЗ с предками, закинуть в ВТ и сделать соединение
#40 by andrewks
блаженны верующие
#41 by Конфигуратор1с
покажи видео
#42 by МишКа
Причем здесь вера? Я в консоли запросов запустил - получил результат: все предки + 2 ссылки
#43 by МишКа
Зачем тебе видео? Запусти запрос в консоли запросов.
#44 by andrewks
я верю тебе. плохо то, что ты веришь в это. это означает только одно - ты совершенно не понимаешь принципов выполнения запросов и получения их результатов
#45 by Конфигуратор1с
Запустил и нифига у меня не выдало
#46 by МишКа
текст запроса из ?
#47 by МишКа
Да куда уж нам! ))))
#48 by catena
Ты к этой своей иерархии как будешь прикручивать должности и оклады?
#49 by МишКа
Зачем? Читай
#50 by catena
читай
#51 by МишКа
"фиофизлиц" можно через точку
#52 by andrewks
пятнично...
#53 by catena
Хм... У меня в УПП это регистр...
#54 by nbIx
сделай в запросе через Родитель.Родитель.Родитель раз 10 с запасом.
#55 by catena
В должнстях? 10 раз - "с запасом"? Оптимистично, однако.
#56 by МишКа
Да, можно и так: Выбрать ссылка.родитель из справочник.справочник1 где ссылка=&ссылка ОБЪЕДИНИТЬ ВСЕ Выбрать ссылка.родитель.Родитель из справочник.справочник1 где ссылка=&ссылка ОБЪЕДИНИТЬ ВСЕ Выбрать ссылка.родитель.Родитель.Родитель из справочник.справочник1 где ссылка=&ссылка
#57 by nbIx
Причем тут должности, сабж о подразделениях.
#58 by МишКа
Пробуй . Только из полученного списка надо удалить пустые ссылки и NULL.
#59 by mistеr
Тогда уж лучше ПолныйКод, надежнее. И правда работает. От дубля можно избавиться с помощью ТОЛЬКО ИЕРАРХИЯ.
#60 by mistеr
ВЫБРАТЬ Контрагенты.Ссылка КАК Ссылка ГДЕ Контрагенты.Ссылка = &МояСсылка ИТОГИ ПО Ссылка ТОЛЬКО ИЕРАРХИЯ Результат выгружаем в ТЗ. Затем эту ТЗ пихаем во второй запрос, где присоединяем все необходимое:
#61 by andrewks
и нафига этот изврат, если можно _сразу_ передать ТЗ предков, и присоединять? это не решает задачи выборки всех предков в рамках одного запроса. единственное решение, которое предложил я и многие другие - это динамический текст запроса
#62 by Мебиус
РЕКУРСИЯ!
#63 by Мебиус
))) пятница однако
#64 by mistеr
Сразу это как? Как получить ТЗ предков? Строго говоря, задача "выборки всех предков в рамках одного запроса" решена.
#65 by ВалераОшкин
можно использовать пакет запросов. В первом пакете выгрузить во временную таблицу, а во втором пакете её подхватить. Тогда ничего выгружать в ТЗ не надо.
#66 by andrewks
"Как получить ТЗ предков? "  элементарно - циклом Пока .Родитель<>ПустаяСсылка ещё один наивный
#67 by andrewks
"Строго говоря, задача "выборки всех предков в рамках одного запроса" решена" в контексте сабжа - да, в контексте - нет
#68 by mistеr
Так этот цикл уже решает задачу. Все остальное это извращения на тему "хочу только запросом".
#69 by andrewks
вот именно.
#70 by ВалераОшкин
Если заведомо известен уровень иерарархии элемента, то такой запрос написать возможно. По образцу примера из базы знаний о выводе в запросе курса на каждую дату указанного списка периодов.
#71 by andrewks
это всё уже перетёрли в ветке, и не раз.  и про статику с ограничением уровня, и про динамику
#72 by Мебиус
Задача решается только с помощью рекурсии. То есть в запросе НЕВОЗМОЖНО это сделать. А генерация текста и прочее не что иное как единственно возможная программная реализация задачи
#73 by Мебиус
книжки по математике видимо сейчас в дефиците)
#74 by andrewks
если бы 1С не сэкономила на поддержке коррелированных подзапросов, то взлетел бы такой запрос без закомменченного кусочка. а так - только с закомменченным
#75 by Мебиус
Суть рекурсии в том, что мы не знаем куда пойдем на следующем этапе (утрировано). То есть мы физически не можем знать весь путь (текст запроса) и решаем задачу перебором.
#76 by mistеr
Суть в том, что в запросе тоже может быть рекурсия. Многие SQL базы давно поддерживают, и желтая частично (в итогах), а могла бы и пошире.
#77 by Eugeneer
полный код емае.
#78 by PR
Если не нужно получить всех родителей непосредственно в самом запросе, а можно получить их при выборке данных, то можно выбрать один элемент с иерархией, он выдаст элемент и всех его родителей. Если нужно получить всех родителей в самом запросе (как несколько записей), то два пути. Либо сначала рекурсивно получить список всех родителей и выбрать все эти элементы запросом. Либо динамически сконструировать текст запроса, отталкиваясь от уровня элемента. О чем еще говорить, не понимаю.
#79 by France
В Скд посмотри
#80 by mikecool
в мсскл с 2005 версии года есть оператор with, который может строить иерархию по типу conect by .. prior в pl/sql так что думаю прямым запросом думаю можно ) вот только преобразование в элементы потом как делать - хз, в семерке я пользовал для этого 1с++
#81 by olegves
В запросе можно, но будет не уникально (не для всех случаев). До 10-уровневого справочника нормуль.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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