Получить родителя первого уровня

1. forev8 09.04.12 11:36 Сейчас в теме
Нужна идея.
как при обходе иерархического справочника проверить у элемента значение первого уровня.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. Ёпрст 1063 09.04.12 18:48 Сейчас в теме
(1)
ВерхнийРодитель=ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(Спр"+СтрЗаменить(Формат("","С"+(Спр.Уровень()-1))," ",".Родитель")+")]"));
©РупорАбсурда
2. _Z1 38 09.04.12 11:47 Сейчас в теме
может ВключатьПодчиненные(0)

или смотреть что у элеменнта значение Родитель = ПустоеЗначение
3. volodya1122 8 09.04.12 11:55 Сейчас в теме
Есть еще метод Уровень() . По нему узнать количество вхождений
И в цикле выбирать родителя для элемента
Или Писать Родитель(Родитель(Родитель(ТекушийСправочник))) . Количество повторений брать по номеру Уровня
4. Dmitr033 131 09.04.12 12:11 Сейчас в теме
Итерация для человека, а рекурсия для Бога!
Функция ДайПапу(элемент)
Если элемент.Родитель.Выбран() = 1 Тогда
   Возврат ДайПапу(элемент.Родитель);
КонецЕсли;
Возврат элемент;
КонецФункции
kotlovD; user1158788; FeDBuka; G3schaFt; DoctorRoot; Henistaromin; user1615730; Светлый ум; myoker; Alex17; yra111; igor-pn; freeek; AlDimOs; IrinaKostroma1; dalim; m1kll; dimisa; dicwork; dvk09; slights; MsDjuice; bol; dusha0020; +24 Ответить
14. victro* 07.04.21 11:21 Сейчас в теме
(117) Спасибо!
(4)
Функция ДайПапу(элемент)
Если элемент.Родитель.Выбран() = 1 Тогда
Возврат ДайПапу(элемент.Родитель);
КонецЕсли;
Возврат элемент;
КонецФункции
16. d.zhukov 1398 01.07.22 11:16 Сейчас в теме
(4) Каждый раз когда мне нужно найти родителя первого уровня в 1С я ищу комментарий мужика с бородой))
Rasten; Izumov; +2 Ответить
5. forev8 09.04.12 12:13 Сейчас в теме
Спасибо за хорошие мысли)
6. dk999 09.04.12 16:19 Сейчас в теме
рекурсия ради рекурсии? нахрена?

Папа = Элемент.Родитель;
Пока ПустоеЗначение(Папа.Родитель) = 0 Цикл
Папа = Папа.Родитель;
КонецЦикла;
user1158788; Yummynator; rule6; rendalina; KrivosheevEV; freeek; gaabora; Kesak; dalim; dicwork; bol; +11 Ответить
7. пользователь 09.04.12 16:57
Сообщение было скрыто модератором.
...
9. ibazh 24.04.12 16:34 Сейчас в теме
в цикле надо крутить до ПустоеЗначение(элемент.Родитель) = 0
10. semario 10 30.06.13 18:58 Сейчас в теме
Пример из Оле, подключаемся к 1с 7.7 через 1с 8.2:
СпрОле1 = БазаОле.CreateObject("Справочник.Номенклатура");
СпрОле1.ВыбратьЭлементы();
Пока СпрОле1.ПолучитьЭлемент() Цикл
//
СпрОле = БазаОле.CreateObject("Справочник.Номенклатура");
мКод=СпрОле1.код;
мПутьРодителя="";
~мПродолжимИскатьРодителя:
мЭлементЕсть = СпрОле.НайтиПоКоду(МКод);
Если мЭлементЕсть<>0 тогда
мРодитель = СпрОле.родитель.код;
Если мПутьРодителя <> 0 тогда
мПутьРодителя = мРодитель+"\\"+мПутьРодителя;
мКод=мРодитель;
перейти ~мПродолжимИскатьРодителя;
КонецЕсли;
КонецЕсли;
Сообщить(мПутьРодителя+"\\"+СпрОле1.наименование);
//
КонецЦикла;

*****************************
на выходе получаем путь до номенклатуры по родителям через "\\":
\\Ц0000011\\00079\\18-4\\\\184152 UC152 Саморез 4.8*152 (500шт) TYCOON
11. V_I_PRO 03.07.13 06:30 Сейчас в теме
(10) semario, А вместо этой хренотени использовать ПолныйКод() и ПолноеНаименование() не пробовали?
yra111; Kesak; Оберон; +3 Ответить
12. semario 10 03.07.13 11:28 Сейчас в теме
(11) V_I_PRO, Оо, запарился))) спасибо! буду пользоваться
13. LomayaZakat 11.03.21 16:05 Сейчас в теме
Функция ПолучитьРодителя(СправочникСсылка)
		
	Пока НЕ СправочникСсылка.Родитель.Пустая() Цикл
		СправочникСсылка = СправочникСсылка.Родитель;	
	КонецЦикла;
	
	Возврат СправочникСсылка;

КонецФункции
Показать
user1158788; +1 Ответить
15. victro* 07.04.21 11:32 Сейчас в теме
17. olololeg 15.09.22 22:50 Сейчас в теме
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Папа .Ссылка КАК Папа 
		|ИЗ
		|	Папа  КАК Папа 
		|ГДЕ
		|	Папа .Ссылка = &Папа 
		|ИТОГИ ПО
		|	Ссылка ТОЛЬКО ИЕРАРХИЯ";
	
	Запрос.УстановитьПараметр("Папа ", Папа );
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаСсылка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	ВыборкаСсылка.Следующий();
Показать


Такой еще вариант
18. ishelper 15.09.22 23:23 Сейчас в теме
(17)
Такой еще вариант
А ничего, что тема находится в разделе "Платформа 1С v7.7"?
19. tusv 211 16.09.22 10:05 Сейчас в теме
Я так понимаю метод ПолныйКод() не предлагать:? кстати и на сапогах работает, чуть изменив
Справочники.Номенклатура.НайтиПоКоду(Ссылка.ПолныйКод(),Лев(Найти(Ссылка.ПолныйКод(),"\")-1)
20. CheBurator 3119 16.09.22 20:50 Сейчас в теме
21. Dr.HiHi 3 17.09.22 20:35 Сейчас в теме
можно написать универсальный механизм, который будет работать в запросах

вариант # 1 (не сильно нравиться))))
в общем модуле повторного использования создаем функцию, которая будет возвращать текст запроса, где будет указана номенклатура и все ее родители... взять глубину метаданных справочника и через соединения нескольких временных таблиц добится требуемого текста запроса

вариант # 2
создать регистр сведений, который будет хранить все связи номенклатуры со всеми родителями
при записи элемента номенклатуры, создать фоновое задание, которое будет этот регистр корректировать (если нужно)
в запросе можно соединенить номенклатура с новым регистром и знать всех родителей... родитель, у которого пустой родитель - это и есть Ваш корень ;))
22. ishelper 17.09.22 22:14 Сейчас в теме
(21)
в запросе можно соединенить номенклатура с новым регистром и знать всех родителей...
И вам вопрос из (18). :-)
23. Dr.HiHi 3 18.09.22 11:10 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот