Имя: Пароль:
1C
 
Вывести Всех Родителей ТекущегоЭлемента
0 Lenusik
 
01.04.08
11:16
Помогите, пожалуйста, решить задачку
Имеем форму списка многоуровневого справочника (не важно какого). На форме расположить реквизит диалога «Текст».

Этот реквизит должен отображать полный путь текущего элемента справочника (ТекущийЭлемент) в виде подчиненной структуры:

Родитель_1уровня

           - Родитель_2уровня

                                  - Родитель_3уровня

                                              ………..

                                                                                          -  ТекущийЭлемент



При изменении текущего элемента соответственно изменяется отображение.
1 Stepa86
 
01.04.08
11:22
Рекурсивно собирай текст
2 MaxS
 
01.04.08
11:22
вставить в соответствующее событие формы код
СтрРодитель = " ";
ТекРодитель = Элемент.Родитель;
Пока ЗначениеЗаполнено(ТекРодитель) Цикл
СтрРодитель = СтрРодитель + " " + СокрЛП(ТекРодитель.Наименование);
ТекРодитель = Элемент.Родитель;
КонецЦикла;
3 Черный всадник
 
01.04.08
11:25
Процедура Путь(Элемент, Путь = "")

  Если Элемент.Родитель <> Неопределенно Тогда
     Путь = Элемент.Родитель.Наименование + "\" + Путь; // тут лучше дернуть данные запросом
     Путь(Элемент.Родитель, Путь);
  КонецЕсли;

КонецПроцедуры
4 Lenusik
 
01.04.08
11:32
Спасибо,Попробую
5 Defender aka LINN
 
01.04.08
11:34
(3) Что ж вы так запросы-то не любите...

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Номенклатура.Ссылка КАК Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Ссылка = &Ссылка
|ИТОГИ ПО
|    Ссылка ТОЛЬКО ИЕРАРХИЯ"
Запрос.УстановитьПараметр("Ссылка", НужныйЭлемент);

Родители = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);


В "Родители" получаем готовое дерево.
6 MaxS
 
01.04.08
11:40
(5) ну да, это создаёт меньшую нагрузку на сервер, т.к. выполняется один запрос вместо N, где N-количество родителей.
просто в (5) кода(букав) больше и всё равно нужно обходить дерево... ;)
7 Валерыч
 
01.04.08
11:42
а ПолноеНаименование() не поможет?
8 Sadovnikov
 
01.04.08
11:42
(6) "выполняется один запрос вместо N, где N-количество родителей" - уверен? Можешь показать, что реально сервак делает?
Ибо имхается мне, что в даннос млучае получим кучу связываний таблицы справочника с самой собой.
9 Lenusik
 
01.04.08
11:44
В смысле ПолноеНаименование()?
Я новичок, можно попонятнее
10 MaxS
 
01.04.08
11:49
(8) ну по крайней мере обращение через точку (ТекРодитель = Элемент.Родитель) приводит к выполнению запроса на сервере.
А что делает (5)? да, согласен - спорный вопрос ;)
11 Defender aka LINN
 
01.04.08
11:52
(8), (10) А при обращении к Родителю считываются ВСЕ реквизиты объекта.
12 Sadovnikov
 
01.04.08
11:54
(11) А фиг его знает, что лучше при запросе 1 родителя.
13 Defender aka LINN
 
01.04.08
11:55
(12) Ща проверю :)
14 Defender aka LINN
 
01.04.08
11:57
+(13) Кстати, в (0) явно нужно как раз-таки дерево, нафига извращаться и придумывать текст - непонятно. Так что будем формировать для проверки дерево.
15 Lenusik
 
01.04.08
12:00
Не получается
16 Sadovnikov
 
01.04.08
12:10
(14) Типа UP, чтобы не потерялась веточка...
17 Черный всадник
 
01.04.08
12:14
(11) На самом деле не все. В кэш сначала читаються ссылка и текстовое представление, так что если убрать наименование лишних телодвижений совершаться не будет :P
18 Валерыч
 
01.04.08
12:17
(9) в смысле метод такой есть для ссылки или объекта справочника. В СП все написано. Получает строку из преставлений всех родителей + сам элемент разделенные "\". А уж поменять через СтрЗаменить "\" на то, что надо при выводе плевое дело.
19 Регистратор
 
01.04.08
12:23
а нафига выводить в текст спрашивается? добавь в форму дерево того же списка справочника и показывай там просто в дереве.
20 Lenusik
 
01.04.08
12:34
Спасибо за совет
21 Черный всадник
 
01.04.08
12:35
(0) Ваше фото скажет о вашей благодарности много больше слов....
22 Lenusik
 
01.04.08
16:11
Спасибо, очень помогло
Основная теорема систематики: Новые системы плодят новые проблемы.