|
Как у строки дерева поменять родителя? | ☑ | ||
---|---|---|---|---|
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С, причем не только копированием - у тебя скока денег?)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |