Имя: Пароль:
1C
1С v8
УФ + Дерево + Флажки, программное изменение флажков в подчиненных строках
0 bacila
 
26.09.14
14:40
Добрый день ,   трабл следующий , делаю дерево значений заполняю, в нем есть колонка с булевом (флажок),  при изменении флажка на верхнем уровне хотелось бы заполнить флажки нижнего уровня,  если делаем значение в реквизит и потом обратно, то дерево отрисовывается заново , ну и получается свернуто, а хотелось бы чтоб оно оставалась таким какое было в момент изменения флажка. Есть ли у кого нибудь соображения по этому поводу?
1 Зойч
 
26.09.14
14:44
Заполняй флажки в без проебразования
2 Зойч
 
26.09.14
14:44
Для каждого Строка1 из Дерево.ПолучитьЭлементы() Цикл
КонецЦикла
3 Балоун
 
26.09.14
14:44
интересно, а если я тут сейчас как начну делиться обработками ;)
Почему на мисте нельзя обмениваться обработками?
4 Балоун
 
26.09.14
14:46
не знаю, насколько в тему

&НаКлиенте
Процедура ПродажиПометкаПриИзменении(Элемент)
    СтрокиДерева=Элемент.Родитель.ТекущиеДанные.ПолучитьЭлементы();
    Уровень=УровеньСтроки(Элемент.Родитель.ТекущиеДанные);
    СтараяПометка=(Элемент.Родитель.ТекущиеДанные.Пометка+2)%3;
    Если Уровень=4 Тогда
        Элемент.Родитель.ТекущиеДанные.Пометка=СтараяПометка;
        Возврат;
    КонецЕсли;
    
    Элемент.Родитель.ТекущиеДанные.Пометка=1-СтараяПометка;
    Для Каждого ТекСтрока Из СтрокиДерева Цикл ;
        ПроставитьГалкиПотомкам(ТекСтрока, Элемент.Родитель.ТекущиеДанные.Пометка);
    КонецЦикла;
    ПроставитьГалкиРодителям(Элемент.Родитель.ТекущиеДанные.ПолучитьРодителя());
КонецПроцедуры

&НаКлиенте
Процедура ПроставитьГалкиПотомкам(СтрокаДерева, Галка)
    СтрокаДерева.Пометка=Галка;
    Для Каждого ТекСтрока Из СтрокаДерева.ПолучитьЭлементы() Цикл
        Если ТекСтрока.Пометка<>Галка Тогда
            ПроставитьГалкиПотомкам(ТекСтрока, Галка);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПроставитьГалкиРодителям(Родитель)
    Если Родитель=Неопределено Тогда
        Возврат;
    КонецЕсли;
    Соседи=Родитель.ПолучитьЭлементы();
    с=0;
    Для Каждого ТекСтрока Из Соседи Цикл
        с=с+ТекСтрока.Пометка;
    КонецЦикла;
    НоваяПометка=?(с=Соседи.Количество(), 1, ?(с, 2, 0));
    Если Родитель.Пометка<>НоваяПометка Тогда
        Родитель.Пометка=НоваяПометка;
        ПроставитьГалкиРодителям(Родитель.ПолучитьРодителя());
    КонецЕсли;
КонецПроцедуры
5 bacila
 
26.09.14
14:48
Спасибо кто откликнулся ))) щас опробую все варианты)
6 bacila
 
26.09.14
15:14
(4) Прям то что надо, код правда не совсем понятен мне был ) твой  но в нем было все что надо, спасибо
7 Ерепень
 
26.09.14
15:16
(6) там флажки трёхцветные
8 bacila
 
26.09.14
15:23
(7) вон оно че )