Вход | Регистрация


Вопрос по дереву значений

Вопрос по дереву значений
Я
   Meilleur
 
03.10.16 - 13:58
В событии ПриИзменении() для дерева значений программно меняю значение в одном из полей. И после этого все узлы ДЗ сворачиваются автоматически.

Подскажите, как избежать этого сворачивания ДЗ?

Вот код:
    ДеревоОбъект = РеквизитФормыВЗначение("ДеревоПК", Тип("ДеревоЗначений"));
    
    ПараметрыОтбора = Новый Структура;
    ПараметрыОтбора.Вставить("Позиция", вхПозиция);
    ПараметрыОтбора.Вставить("Наименование", вхНаименование);
    СтрокиДерева = ДеревоОбъект.Строки.НайтиСтроки(ПараметрыОтбора, Истина);
    Если СтрокиДерева.Количество() > 0 Тогда
        СтрокиДерева[0][вхПараметрИмя] = вхЗначение;
    КонецЕсли;
    
    ЗначениеВРеквизитФормы(ДеревоОбъект, "ДеревоПК");
 
 
   DrShad
 
1 - 03.10.16 - 14:03
узлы не сворачиваюся а дерево заново рисуется
   Meilleur
 
2 - 03.10.16 - 14:07
(1) Хорошо.

Как тогда запомнить состояние (развёрнут/свёрнут) по каждому из узлов, чтобы потом при "заново рисуется" восстановить положение? И каким событием перехватить перерисовку?

Или как можно отказаться от перерисовки дерева?
   Fedor-1971
 
3 - 03.10.16 - 14:10
(0) перебирай ЭлементФормы.ДеревоПК через ПолучитьЭлементы(), а не через преобразование в тип ДеревоЗначений.
При обратном преобразовании дерево заново перестроится с параметрами установленными при настройки элемента формы (НачальноеОтображениеДерева - Раскрывать все уровни - дерево будет развёрнутым).
   DrShad
 
4 - 03.10.16 - 14:11
то есть менять дерево на клиенте
   Fedor-1971
 
5 - 03.10.16 - 14:13
(2) не преобразовывать, а перебирать
стр=ЭлементыФормы.ДеревоПК.ТекущиеДанные; - текущая ветка
УровеньВниз=стр.ПолучитьЭлементы();
УровеньВверх=стр.ПолучитьРодителя();
   Fedor-1971
 
6 - 03.10.16 - 14:16
(4) можно и наСервере, только придётся получить текущую строку через ПолучитьПоИдентификатору()
   Meilleur
 
7 - 03.10.16 - 14:20
(4) У меня вся обработка на сервере ведётся...
Получается, мне надо на выходе этой обработки получать нужное значение и в ТекущиеДанные по имени колонки это значение подставлять? В таком случае дерево не будет перерисовываться?
   Meilleur
 
8 - 03.10.16 - 14:21
(6) ПолучитьПоИдентификатору()?

НайтиПоИдентификатору(). Наверное, Вы это имели ввиду? И опять же, как это отразится на перерисовке дерева?

Попробую так сделать...
   Meilleur
 
9 - 03.10.16 - 14:22
(6) Попробую сделать как в (3)
   Fedor-1971
 
10 - 03.10.16 - 14:27
(8) на дереве обновятся только текущие данные
 
 Рекламное место пустует
   Meilleur
 
11 - 03.10.16 - 14:38
(10) Сделал как в (3)
    Флаг = Ложь;
    ВсеСтроки = ДеревоПК.ПолучитьЭлементы();
    Для Каждого Строка Из ВсеСтроки Цикл
        Если Строка.Позиция = вхПозиция И Строка.Наименование = вхНаименование Тогда
            Строка[вхПараметрИмя] = вхЗначение;
            Прервать;
        Иначе
            ВсеПодстроки = Строка.ПолучитьЭлементы();
            Для Каждого Подстрока Из ВсеПодстроки Цикл
                Если Подстрока.Позиция = вхПозиция И Подстрока.Наименование = вхНаименование Тогда
                    Подстрока[вхПараметрИмя] = вхЗначение;
                    Флаг = Истина;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        Если Флаг Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;


Наверное, не очень красиво получилось. Но зато работает. Потом ещё причещу...

Фёдор, спасибо за помощь!
   Meilleur
 
12 - 03.10.16 - 15:04
(6)
Так ещё проще получилось:

    ТекДанные = ДеревоПК.НайтиПоИдентификатору(вхИД);
    ТекДанные[вхПараметрИмя] = вхЗначение;

Ещё раз спасибо!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует