Имя: Пароль:
1C
1С v8
Копирование Оформления
,
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).
Переехал в ПриНачалеРедактирования().
Независимо от того, куда вы едете — это в гору и против ветра!