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