Имя: Пароль:
1C
1С v8
Как у строки дерева поменять родителя?
,
0 vde69
 
07.03.12
19:23
есть большое дерево (порядка 100тыс элементов) как перетащить ветку целиком к другому узлу?

копировать и потом удальть - не камильфо...
1 EvgeniuXP
 
07.03.12
19:26
(0) переназначить родителя текущей строки на родителя другой строки - не зацикли главное :)
2 vde69
 
07.03.12
19:28
СтрокаДереваЗначений (ValueTreeRow)
Родитель (Parent)
Использование:

Только чтение.
3 EvgeniuXP
 
07.03.12
19:28
а добавляют в дерево строки как тогда?
4 Reset
 
07.03.12
19:31
ЗаполнитьЗначенияСвойств(ДругойУзел.Строки.Добавить(),Ветка);
Ветка.Родитель.Строки.Удалить(Ветка);
5 Reset
 
07.03.12
19:31
Таскать нельзя... или я не знаю.
6 EvgeniuXP
 
07.03.12
19:33
(5) можно таскать.
7 Reset
 
07.03.12
19:34
(6) Спасибо за разрешение ;)
8 EvgeniuXP
 
07.03.12
19:34
Процедура ПеренестиТекущуюЕдиницуВРодителя(СсылкаЧтоКидаем,СсылкаКудаКидаем)
   Если СсылкаКудаКидаем=Неопределено Тогда
       СсылкаКудаКидаем=Справочники.ЕдиницыКонфигурации.ПустаяСсылка();
   КонецЕсли;
   ОбъектЧтоКидаем=СсылкаЧтоКидаем.ПолучитьОбъект();
   ОбъектЧтоКидаем.Родитель=СсылкаКудаКидаем.Ссылка;    
   ОбъектЧтоКидаем.Записать();
   ОбновитьЕдиницыКонфигурации(Новый Массив);
КонецПроцедуры
9 EvgeniuXP
 
07.03.12
19:35
и заполняем дерево заново заново :)
10 Reset
 
07.03.12
19:39
(8) Предлагаешь выгрузить дерево в иерархический справочник, поменять родителя, загрузить дерево из иерархического справочника?
11 EvgeniuXP
 
07.03.12
19:41
(10) в моей задачи так и требовалось, т.к. потом отчеты вывожу иерархические :) иерархию мне надо было сохранять (компы и их конфигурация)
12 EvgeniuXP
 
07.03.12
19:44
(+11) потом удобно списывать (перемещать)всё это оборудование с программным обеспечением разом за один мах и иерархия сохраняется причем :).
13 pumbaEO
 
07.03.12
19:47
столкнулся с аналогичной проблемой. У меня иерархия файловой системы, приходиться удалять и добавлять заново.
14 vde69
 
07.03.12
19:55
а (4) работает? или нужно в рекурсии делать?
15 Reset
 
07.03.12
19:59
(14) Если у переносимой ветки нет подстрок, то этого достаточно, иначе между заполнением и удаление вставить цикл по подстрокам с рекусивным вызовом
16 vde69
 
07.03.12
20:01
СкопироватьУзелДерева (мСтрокаДерева.Строки, НайденаяСтрока);
НайденаяСтрока.Родитель.Строки.Удалить(НайденаяСтрока);

Процедура СкопироватьУзелДерева (СтрокиПолучателя, УзелИсточник)
   НоваяСтрока = СтрокиПолучателя.Добавить();
   ЗаполнитьЗначенияСвойств(НоваяСтрока, УзелИсточник);
   Для каждого эл Из УзелИсточник.Строки Цикл
       СкопироватьУзелДерева (НоваяСтрока.Строки, эл);
   КонецЦикла;
КонецПроцедуры
17 Reset
 
07.03.12
20:01
Процедура Перенести(Ветка,Куда)
 НоваяВетка=Куда.Строки.Добавить();
 ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка);
 Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
 Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
18 Reset
 
07.03.12
20:03
Не успел)

Параметры: Ветка,куда - строки дерева значений
19 Reset
 
07.03.12
20:12
Кстати, согласен, сначала скопировать все, а потом удалить только голову, вероятно, немного быстрее будет, чем всех дочек поэлементно удалять.

Процедура Скопировать(Ветка,Куда)
 НоваяВетка=Куда.Строки.Добавить();
 ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка);
 Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
КонецПроцедуры

Процедура Перенести(Ветка,Куда)
 Скопировать(Ветка,Куда);
 Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
20 Reset
 
07.03.12
20:12
(19) Копия (16),собственно ;)
21 Rebelx
 
07.03.12
20:25
(0)может надо поменять структуру данных?
например использовать не дерево а структуру и ТЗ? или еще как
22 ПесняПроЗайцев
 
07.03.12
20:30
(21) дерево наверно отличается от ТЗ ? )
23 vmv
 
07.03.12
20:34
если речь о дереве значений то использовать метод ПереместитьУзел(УзелПриемник, УзелПеремещения)

и тот и другой узел может являться просто корнем пустого дерева, корнем не пустого дерева, строкой дерева, узлом дерева.

Всякий опытный программист имеет в своем арсенале этот метод для разных систем программирования, встроенного такого метода, как правило, нет.
24 ПесняПроЗайцев
 
07.03.12
20:38
(23) я бы проще обьяснил. в дереве каждая строка может иметь или не иметь родителя-подчиненных. Дальше просто включать здравый смысл.
25 EvgeniuXP
 
07.03.12
20:39
(23) спасибо, мы не программисты, мы так - клоуны.
26 vmv
 
07.03.12
20:42
25. судя по ветке, вы абсолютно правы, ибо обсуждают очевидную вещь в надежде на халяву
27 vmv
 
07.03.12
20:44
(24) еще короче

дерево и каждая его строка - это коллекции вложенных строк, дальше здравый смысл)
28 pumbaEO
 
07.03.12
20:45
(26) а вдруг, кто-то выдумал чудодейственную конструкциююююююю?
29 vmv
 
07.03.12
20:46
(28) я выдумал и че, причем не тоько на 1С, причем не только копированием - у тебя скока денег?)