КАК у элемента справочника быстро найти самого верхнего родителя? #387733


#0 by Vika64
вопрос, собственно в теме
#2 by Vika64
Спасибо, попробую.
#3 by almar
а в запросе?
#4 by gr13
2... варианта... есть тебе какой попроще и подурацкей, или посложнее и покрасивей?
#5 by AndOne
правильный.
#6 by H A D G E H O G s
Желательно для неограниченного по иерархии справочника
#7 by Sadovnikov
Для семерки: Set NoCount On While 1 = 1 Begin    Where        ID = @элТовар And ParentID != '     0   ' End Для восьмерки - по аналогии.
#8 by H A D G E H O G s
Нет в восьмерке в запросах переменных.
#9 by Sadovnikov
Сочуствую, конечно, восьмерке... Но, то же самое ADO еще никто не отменял :)
#10 by megalodon
для реально неограниченного количества уровней в запросе не получить. но если точно нать, что реальное количество уровней иерархии например не больше пяти - тогда запросто.
#11 by NcSteel
В запросе быстрее. Имхо
#12 by Sadovnikov
Как это не получить? См. .
#13 by megalodon
я про запросы 1С 8.х. Там к сожалению ни циклов ни рекурсии нет.
#14 by tsr
А если в Иерархии с условием Родитель=Справочник.ПустоеЗначение ?
#15 by Sadovnikov
Тогда см :)
#16 by megalodon
ну тогда скинь мне АДО драйвер для файловой восьмерки умнег :-)
#17 by NcSteel
Ссылка ТОЛЬКО ИЕРАРХИЯ А такой способ не устраивает?
#18 by gr13
правильного не знаю. если для ограниченного, то можно так ВЫБОР
#19 by Sadovnikov
А нефиг пользоваться левыми продуктами. Восьмерка, файловая. На до же...
#21 by Sadovnikov
Опупеть... "Здраствуйте, тормоза!!!"
#22 by NcSteel
Баян
#23 by gr13
угу, что-то вроде. потом можно попробовать прикрутить по левому соединению другую таблицу. Но у меня в правилах не получилось указать В Иерархии
#24 by gr13
какие тормоза))) нет никаких тормозов. Я как вариант привел, который будет работать, предложи лучше
#25 by megalodon
не годится, потому что результат нельзя использовать например в подзапросе.
#26 by ATI
насчет семерки: как-то Рупор приводил такой код :
#27 by NcSteel
Можно, выгружайте в Таблицу, дальше Временные таблицы
#28 by megalodon
ОК. В монопольном режиме 1С 8.х твое АДО будет работать? :-)
#29 by ATI
+26 вот где красота и изящество :D
#30 by NcSteel
Логичнее использовать не Иерархию справочника, а например Номенклатурные группы
#31 by Sadovnikov
Это да.. Тот еще извращенец :) "Извращенец" в данном случае - в хорошем смысле. Мое ODBC - будет. А ваше восьмерошное ADO - нет, конечно :)
#32 by megalodon
тогда это ничем не отличается от получения главного родителя в 1С-ком коде.
#33 by Sadovnikov
А засветика что скуль при таком запросе выполнит?
#34 by Сергей-ХХХ
А вообще у товара есть  полный код, который косухами разделен. Типа ИскомыйРодитель =  спр.НайтиПоКоду(Лев(товар.полныйкод,1,Найти(товар.полныйкод,"/")-1))
#35 by NcSteel
Да не лучше, но запрос быстрее + методично правильнее.
#36 by Sadovnikov
Ай молодца! Меня практически каждый твой пост радует! Зайди-ка на закладочку "Нумерация" в свойствах справочника.
#37 by Сергей-ХХХ
По коду будет искатся верхний уровень, а нам больше ничего и не надо ))) Меня твои посты тоже радуют глупостью...
#38 by Sadovnikov
У тебя СП украли? Почитай "<Родитель> (необязательный) Тип: СправочникСсылка. Родитель, в пределах которого нужно выполнять поиск. Если не указан, то поиск будет проводиться во всем справочнике. "
#39 by Сергей-ХХХ
НайтиПоКоду(<Код>, <Поиск по полному коду>, <Родитель>, <Владелец>) В чем проблема?
#40 by NcSteel
Юморной однако. Хотя в 7.7 есть возможность получить "полный код" справочника через ""
#41 by Sadovnikov
Еще раз внимательно прочитай. А потом все-таки загляни на закладочку "Нумерация".
#42 by Сергей-ХХХ
В 8.х тоже
#43 by NcSteel
Ты предлогаешь в элементе справочника хранить поле с програмно записанным путем к родителю, имхо это не правильно
#44 by Сергей-ХХХ
СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>) ПолныйКод (FullCode) Синтаксис: ПолныйКод Возвращаемое значение: Тип: Строка. Строка, включающая код элемента и коды всех вышестоящих элементов. Коды выводятся слева направо, начиная с самого верхнего уровня, разделяются символом "/". Описание: Получает код элемента справочника с учетом кодов всех вышестоящих элементов. Пример: Сообщить("Полный код данного элемента: " +          СсылкаНаЭлемент.ПолныйКод);
#45 by NcSteel
Нельзя, только програмно. посмотри свой код и заметишь "товар.полныйкод"
#46 by megalodon
как всегда на мисте чем тупее вопрос тем живее обсуждение.
#47 by gr13
а ты предложи красивое решение
#48 by NcSteel
о_0 Гуру, не замечал такого !! получается самое красивое
#49 by megalodon
а я предлагал в при наличии ряда условий, а без них штатно запросом низя.
#50 by NcSteel
что ты так упрям, запросом можно!!!
#51 by megalodon
твое решение в - это не запрос, а несколько запросов - тогда лучше делать кодом без затей.
#52 by НЕА123
ПолныйКод - это метод. и что тут неправильного?
#53 by NcSteel
КАК у элемента справочника быстро найти самого верхнего родителя? По этому сабжу запросом можно, ты же усложняешь задачу, но и более сложную задачу тоже лучше делать через запрос.
#54 by gr13
блин! как?
#55 by megalodon
да не в запросе это получается, а уже в выборке.
#56 by Sadovnikov
Неправильно то, что, если не стоит галка Контроль уникальности и серии кодов не в пределах всего справочника, то неизвестно, что ты найдешь.
#57 by НЕА123
если уникальности нет, то да, не катит. а если не в пределах спр, то так, по полному коду.
#58 by Sadovnikov
Вот так уже чуток лучше :)
#59 by Kashemir
Наиболее практичное решение на данный момент  ... увы. Более "красивое" можно добится в СКД используя связи наборов данных с передачей параметра. Но по факту это лишь имитация циклических запросов с изменением параметра.
#60 by Kashemir
+ Сорь ... имел ввиду
#61 by Sadovnikov
НайтиПоКоду должно быстрее отработать, при перечисленных выше ограничениях.
#62 by gr13
а как мне узнать в у конкретного элемента родителя верхнего уровня?
#63 by hhhh
так он там один и будет в выборке
#64 by НЕА123
автор-то, автор почему молчит.
#65 by Kashemir
Опечатался. См.
#66 by H A D G E H O G s
В выборке, а не в запросе.. 1С-ина дополнит запрос еще своими запросами..
#67 by gr13
я уже понял
#68 by Vika64
вообще-то мне просто надо было найти у элемента, мне известного: например МояНоменклатура - (это ссылка) самую его верхнюю папочку, например его родитель Папка1 а у папка1 родитель папка2 и т.д. вот мне надо самую верхнюю папку и ответ мне был дан сразу, спасибо gr13.... Правда я надеялась, что можно узнать самого верхнего типа так: ИскомыйРодитель = МояНоменклатура.СамыйВерхнийРодитель; но в 1С этого не предусмотрели.
#69 by vde69
я при решении похожей задачи (правда не со справочниками а с вложенными БП) создал реквизит "ВерхнийУровень"
#70 by Rebelx
самый быстрый - посчитать для всех групп группу верхнего уровня и похранить на время надобности в каком-нить соответствии. и по родителю элемента всегда получим нужный верхний элемент
#71 by Vika64
а можно подробнее? какая была задача и как воплотили?
#72 by H A D G E H O G s
А если папочку, в которой лежит элемент перенести в другого родителя верхнего уровня?
#73 by vde69
перезаписывать все элементы :( на самом деле зависит от задачи у меня для БП изменение вержнего родиделя невозможно по определению
#74 by vde69
а тебе вообще ЗАЧЕМ это надо делать? какая цель? может решение проще есть?
#75 by gr13
+1
#76 by NcSteel
Тогда лучше что то вроде "Номенклатурных групп", доп аналитики
#77 by vde69
мы не знаем ЗАЧЕМ, вариантов много мне это надо было для RLS использовать, там в верхнем БП была группа доступа
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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