|
Копирование Оформления | ☑ | ||
---|---|---|---|---|
0
slicem
15.11.11
✎
08:17
|
Имеется Дерево значений.
Одна из колонок дерева имеет тип "НастройкаОформления" Проблема: При копировании строки копируется ссылка на НастройкуОформления и, соответственно, оформление становится единым для родителя и потомка. Пробовал такую штуку: Процедура СоздатьОформление(Строка) Если ТипЗнч(Строка) = Тип("СтрокаДереваЗначений") Тогда Оформление = Новый НастройкаОформления(); ЗаполнитьЗначенияСвойств(Оформление,Строка.Оформление); Строка.Оформление = Новый НастройкаОформления(); КонецЕсли; Для Каждого Стр ИЗ Строка.Строки Цикл СоздатьОформление(Стр); КонецЦикла; КонецПроцедуры //СоздатьОформление(СтрокаВх,Оформление) Процедура ТабличноеПоле1ПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель) Если Копирование И НЕ Отказ Тогда СоздатьОформление(Элемент.Значение); КонецЕсли; КонецПроцедуры Работает своеобразно: связь между родителем и потомком сохраняется, зато рвётся связь от предыдущего копирования. Поможите плз. |
|||
1
slicem
15.11.11
✎
08:19
|
*0 опечатко
Процедура СоздатьОформление(Строка) Если ТипЗнч(Строка) = Тип("СтрокаДереваЗначений") Тогда Оформление = Новый НастройкаОформления(); ЗаполнитьЗначенияСвойств(Оформление,Строка.Оформление); Строка.Оформление = Новый НастройкаОформления(); ЗаполнитьЗначенияСвойств(Оформление,Строка.Оформление); КонецЕсли; Для Каждого Стр ИЗ Строка.Строки Цикл СоздатьОформление(Стр); КонецЦикла; КонецПроцедуры //СоздатьОформление(СтрокаВх,Оформление) |
|||
2
slicem
15.11.11
✎
08:19
|
*1 Да блин
ЗаполнитьЗначенияСвойств(Строка.Оформление,Оформление); |
|||
3
slicem
15.11.11
✎
09:37
|
наверьх
|
|||
4
slicem
15.11.11
✎
10:33
|
апп
|
|||
5
slicem
15.11.11
✎
11:15
|
аппп
|
|||
6
Axel2009
15.11.11
✎
11:18
|
а что надо то?
|
|||
7
slicem
15.11.11
✎
11:28
|
Ещё раз :)
Копирую строку. Меняю настройки оформления в новой строке - они меняются и в ней и в родителе. Надо, чтоб они жили сами по себе, как и происходит когда создаёшь новую строку не копированием. Надо либо а: не копировалось содержимое колонки "оформление" либо б: Как-нить программно "отцепить" их друг от друга. |
|||
8
slicem
15.11.11
✎
11:32
|
Есть ещё вариант: перехватывать копирование, ставить отказ и генерить новые строки вручную. Но что-то не хочется, я ведь ветви дерева копирую, ане одиночные строки. Да и понять, что происходит охота.
|
|||
9
Axel2009
15.11.11
✎
11:43
|
т.е. при копировании у тебя дерево
с1 -с2 -с3 копируешь с1 у тебя получается с1 -с2 -с3 с4 -с5 -с6 причем при изменении оформления в с4 меняется в с1? |
|||
10
slicem
15.11.11
✎
11:48
|
(9)ага
|
|||
11
Axel2009
15.11.11
✎
11:50
|
а ты пробовал только ту штуку что в (0) или еще какую?
|
|||
12
slicem
15.11.11
✎
11:52
|
(11) да, только вместо ЗаполнитьЗначенияСвойств я и напрямую и через промежуточные переменные копировал сами элементы настроек:
Оформление.Шрифт.Значение = Строка.Оформление.Шрифт.Значение; Создаётся впечатление, что при копировании строки, объект НастройкаОформления не копируется сам, а копируется ссылка на оный, а сам он живёт неведомо где. |
|||
13
slicem
15.11.11
✎
11:59
|
(12) Причем, если использовать код из (0), то связь между предыдущиими ветвями рвется:
с1 -с2 -с3 с4 -с5 -с6 с4.оформление=с1.оформление копируем с4 с1 -с2 -с3 с4 -с5 -с6 с7 -с8 -с9 с4.оформление<>с1.оформление с7.оформление=с4.оформление |
|||
14
Axel2009
15.11.11
✎
12:05
|
ну правильно, перед добавлением строк еще не существует. и он тебе при первом копировании обрабатывает 3 строки, после этого копирует. недаром процедура называется ПЕРЕД добавлением.
|
|||
15
slicem
15.11.11
✎
12:10
|
(14) Точно уже очевидного не вижу:).
Вот только что со всем этим делать... |
|||
16
slicem
15.11.11
✎
12:14
|
Ура победил, спасибо за (14).
Переехал в ПриНачалеРедактирования(). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |