Имя: Пароль:
1C
1С v8
Получить Верхнего родителя справочника
☑
0 Pusto32
 
09.11.26
✎
09:25
Помню в 7.7 видел:
ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр(Номенклатура"+СтрЗаменить(Формат("","С"+(Номенклатура.Уровень()-2))," ",".Родитель")+")]")).

а как в 8.3 можно было бы получить что-то подобное?
1 maxab72
 
09.11.26
✎
09:36
Можно, через ПолныйКод()
2 Мультук
 
гуру
09.11.26
✎
09:37
Без понятия, как работает (и работает ли) ваш волшебный код

В 8.3 нужно прочитать вот это "Транзитивное замыкание запросом"

https://infostart.ru/1c/articles/160707/

Функции ПолучитьВерхнегоРодителя(ссылкаНоменклатура) там нет,
но удочку вам дадут.

Если вы никуда не спишите, то тривиальная рекурсия пишется за 5 мин, но работает медленно.
3 Волшебник
 
09.11.26
✎
09:40
Функция РодительВерхнегоУровня(ссылка)
   а = ссылка.Родитель;
   Пока НЕ а.Родитель.Пустая() Цикл
	  а = а.Родитель;
   КонецЦикла;
   Возврат а;
КонецФункции
4 maxab72
 
09.11.26
✎
10:00
(3) С циклами это прошлый век...

Функция ПолучитьСамогоВерхнегоРодителя(Ссылка) Экспорт
    
    текМетаданныеИмя = Ссылка.Метаданные().Имя;
    
    Ответ = ПредопределенноеЗначение("Справочник." + текМетаданныеИмя + ".ПустаяСсылка");
    
    ПолныйКод = Ссылка.ПолныйКод();
    
    ПозицияДроби = СтрНайти(ПолныйКод, "/");
    
    Если ПозицияДроби > 0 Тогда
    
        КодРодителя = Лев(ПолныйКод, ПозицияДроби - 1);
        
        Ответ = Справочники[текМетаданныеИмя].НайтиПоКоду(КодРодителя);
    
    КонецЕсли;
    
    Возврат Ответ;

КонецФункции
5 Волшебник
 
09.11.26
✎
10:05
(4) Код может быть не уникальным. Или его вообще нет
6 toypaul
 
гуру
09.11.26
✎
10:06
(4) а если код не уникальный? а ничего что внутри ПолныйКод тот же цикл только внутри платформы?
7 Fish
 
гуру
09.11.26
✎
10:20
(4) Запросом, имхо, проще:

      "ВЫБРАТЬ
        |   Спр.Ссылка КАК Ссылка
        |ИЗ
        |   Справочник.Спр КАК Спр
        |ГДЕ
        |   Спр.Ссылка = &Ссылка
        |ИТОГИ ПО
        |   Ссылка ТОЛЬКО ИЕРАРХИЯ";
8 Eiffil123
 
09.11.26
✎
10:48
(7) удивительно, что это только на 7 ответе появилось. В какое страшное время мы живем
9 Санта Клаус
 
09.11.26
✎
11:20
(8) семерошники еще не перевелись
10 rsv
 
09.11.26
✎
11:35
(7) прикладной да . Где группа это paretid.
Если в справочнике добавить поле с  ссылкой на себя ( parent id) и на этом простом поле строить логику прикладной запрос уже не взлетит.
11 rsv
 
09.11.26
✎
11:36
И циклы наше все.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн