Имя: Пароль:
1C
1С v8
Как по элементу справочника узнать его верхний родитель?
, ,
0 Vexcel
 
20.05.14
16:20
Есть иерархический справочник, ну допустим Номенклатура.
Есть элемент справочника, допустим Автомобиль.
Нужно найти его родителя, но не последнего, а первого.
Ну допустим есть верхние папки
Машины
Тракторы
Танки
в каждой папке есть ещё папки, а в них ещё папки и т.д.
И нужно вытащить не последнюю папку, а вот первую.

Можно конечно определить эти верхние папки(запрос по условию, где родитель пустой) потом перебирать в цикле эти папки запросом с отбором по нужной номенклатуре и "в иерархии(&папка)" но это не красиво.
1 Ёпрст
 
20.05.14
16:21
Нужно где ?
в запросе ?
2 mikecool
 
20.05.14
16:21
итоги по ссылка только иерархия
первый элемент в выборке будет искомый
3 Shurjk
 
20.05.14
16:22
Рекурсия будет красивей смотреться.
4 Fedor-1971
 
20.05.14
16:25
(3) Зачем рекурсия? Достаточно простого цикла:
Пока ЗначениеЗаполнено(спр.Родитель) цикл
  спр=спр.Родитель;
КонецЦикла;
5 Крошка Ру
 
20.05.14
16:27
(4)
  спр=спр.Родитель;

чем не рекурсия? ))
6 Fedor-1971
 
20.05.14
16:32
(5) Рекурсия - вызов процедуры(функции) из её тела, что забивает стек. В (4) простое присвоение в цикле, прочувствуй разницу.
7 Крошка Ру
 
20.05.14
16:33
(6) Реку́рсия — наличие в определении, описании, изображении какого-либо объекта или процесса самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя.
wiki:Рекурсия
8 Shurjk
 
20.05.14
16:35
(6) В1с проблемы с забиванием стэка решаются на уровне платформы.
9 ДенисЧ
 
20.05.14
16:36
(8) Правильно. Забился стек - 1с просто сваливается.
10 Shurjk
 
20.05.14
16:37
(9) типа того:) но только когда наблюдается бесконечный цикл.
11 Бывший мистянин
 
20.05.14
16:45
Вижу что в 1С так и продолжают пытаться программировать люди мало знакомые с элементарными понятиями программирования. Значит для профессионалов будет еще работа :).
12 Fedor-1971
 
20.05.14
16:45
(7) Блистать знаниями изволим? Предлагаю взять учебник по С (С++ или еще по какому языку программирования) и прочитать что такое рекурсия, что она делает со стеком. Особое внимание обратить на то,  что займет больше времени (и ресурсов) присваивание или вызов процедуры.
13 mehfk
 
20.05.14
16:46
(11) Кончил и закурил?
14 Крошка Ру
 
20.05.14
16:50
(12) Боже мой... Вот уж не думал, что ссылка на педивикию является блистанием))
Рекурсия - это не термин С (С++ или еще какого языка программирования), это понятие немножко шире. Просто ты под рекурсией понимаешь рекурсивный вызов функции(или процедуры), я - сопоставление объекта и его части, только и всего ;)))
15 Лаврентий Берия
 
20.05.14
16:55
(0) Посмотри, что вернёт забытый всеми метод .ПолноеНаименование(); Но надо быть уверенным, что в наименованиях групп верхнего уровня отсутствуют символы "/".
16 Fedor-1971
 
20.05.14
17:06
(14) Это больше Философия, главное, что-бы было понимание что делаем и не постучится ли в дверь админ с вопросом "Какого ... упал сервер?"
(15) ТС нужен родитель и в наименовании очень может быть "/" - пользователи вводят по принципу "А мне надо!"
17 Kamas
 
20.05.14
17:16
урра 16 постов про родителей))