Имя: Пароль:
1C
 
Работа с деревом УФ. Пересчитать сумму в колонке дерева.
,
0 DIvanmgn
 
11.08.14
14:57
Здравствуйте.

При изменении ячейки требуется пересчитать всю колонку в дереве.

&НаКлиенте
Процедура ДеревоПриИзменении(Элемент)
    ПересчитатьСуммуДерева(Элемент);
КонецПроцедуры

Думал сделать так. Получить родителя. По нему получить выборку. Суммировать колонку выборки. Но вот имя колонки получить не нашел как. Элемент.ТекущийЭлемент.Имя="ДеревоКолонка1"
Элемент.ПолучитьРодителя().ПолучитьЭлементы()["Колонка1"]

Можно конечно откусить слева текст "Дерево". Но чую есть решение "поизящнее".

Допускаю что выбрал подход в принципе не верный. Прошу ногами не бить. Лучше наставьте на путь истинный.
1 DIvanmgn
 
11.08.14
15:11
хочу обратить внимание, что работа не с деревом значений а с
"ДанныеФормыДерево"
2 Drac0
 
11.08.14
16:08
(0) На сервере доступен ПутьКДанным.
3 DIvanmgn
 
12.08.14
11:59
Что-то не очень нравится. Пока получилось вот так:
&НаСервере
Процедура ПересчитатьСуммуДерева(ИмяКолонки,Ветка)
    
    Родитель = Ветка.ПолучитьРодителя();
    Если Родитель=Неопределено Тогда
        Возврат;
    КонецЕсли;
    Сумма = 0;
    Для Каждого Стр Из Родитель.ПолучитьЭлементы() Цикл
        Сумма = Сумма+Стр[ИмяКолонки];
    КонецЦикла;
    Родитель[ИмяКолонки]=Сумма;
    ПересчитатьСуммуДерева(ИмяКолонки,Родитель);
    
КонецПроцедуры

&НаСервере
Процедура ДеревоПриИзмененииСервер(Идентификатор,ИмяЭлемента)
    
    ТекСтр = Дерево.НайтиПоИдентификатору(Идентификатор);
    Корень = ТекСтр.ПолучитьРодителя();
    ПолноеИмяКолонки = Элементы.Найти(ИмяЭлемента).ПутьКДанным;
    ИмяКолонки = Прав(ПолноеИмяКолонки,СтрДлина(ПолноеИмяКолонки)-Найти(ПолноеИмяКолонки,"."));
    ПересчитатьСуммуДерева(ИмяКолонки,ТекСтр);

КонецПроцедуры // ДеревоПриИзмененииСервер()
&НаКлиенте
Процедура ДеревоПриИзменении(Элемент)
    
    ДеревоПриИзмененииСервер(Элемент.ТекущиеДанные.ПолучитьИдентификатор(),Элемент.ТекущийЭлемент.Имя);
КонецПроцедуры

Изящнее можно?
4 DIvanmgn
 
12.08.14
12:33
(2) То есть даже используя это свойство, я все равно не получаю точный адрес в дереве. Приходиться шаманить со строкой.
5 Drac0
 
12.08.14
15:48
(4) Куда точнее? ИмяДерева.ИмяПоля. И неважно, как обозвали элемент формы. Тем более легко превращается в универсальную.
6 DIvanmgn
 
13.08.14
08:06
(5) ну то есть это нормально, что потом нужно парсить строчку для определения имя колонки?
7 Drac0
 
13.08.14
08:39
(6) "Это нормально" (с) Малышева
8 РенеДекарт
 
13.08.14
10:17
(6) ты в 1С, дружище, привыкай..