|
Вопрос по дереву значений | ☑ | ||
---|---|---|---|---|
0
Meilleur
03.10.16
✎
13:58
|
В событии ПриИзменении() для дерева значений программно меняю значение в одном из полей. И после этого все узлы ДЗ сворачиваются автоматически.
Подскажите, как избежать этого сворачивания ДЗ? Вот код: ДеревоОбъект = РеквизитФормыВЗначение("ДеревоПК", Тип("ДеревоЗначений")); ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Позиция", вхПозиция); ПараметрыОтбора.Вставить("Наименование", вхНаименование); СтрокиДерева = ДеревоОбъект.Строки.НайтиСтроки(ПараметрыОтбора, Истина); Если СтрокиДерева.Количество() > 0 Тогда СтрокиДерева[0][вхПараметрИмя] = вхЗначение; КонецЕсли; ЗначениеВРеквизитФормы(ДеревоОбъект, "ДеревоПК"); |
|||
1
DrShad
03.10.16
✎
14:03
|
узлы не сворачиваюся а дерево заново рисуется
|
|||
2
Meilleur
03.10.16
✎
14:07
|
(1) Хорошо.
Как тогда запомнить состояние (развёрнут/свёрнут) по каждому из узлов, чтобы потом при "заново рисуется" восстановить положение? И каким событием перехватить перерисовку? Или как можно отказаться от перерисовки дерева? |
|||
3
Fedor-1971
03.10.16
✎
14:10
|
(0) перебирай ЭлементФормы.ДеревоПК через ПолучитьЭлементы(), а не через преобразование в тип ДеревоЗначений.
При обратном преобразовании дерево заново перестроится с параметрами установленными при настройки элемента формы (НачальноеОтображениеДерева - Раскрывать все уровни - дерево будет развёрнутым). |
|||
4
DrShad
03.10.16
✎
14:11
|
то есть менять дерево на клиенте
|
|||
5
Fedor-1971
03.10.16
✎
14:13
|
(2) не преобразовывать, а перебирать
стр=ЭлементыФормы.ДеревоПК.ТекущиеДанные; - текущая ветка УровеньВниз=стр.ПолучитьЭлементы(); УровеньВверх=стр.ПолучитьРодителя(); |
|||
6
Fedor-1971
03.10.16
✎
14:16
|
(4) можно и наСервере, только придётся получить текущую строку через ПолучитьПоИдентификатору()
|
|||
7
Meilleur
03.10.16
✎
14:20
|
(4) У меня вся обработка на сервере ведётся...
Получается, мне надо на выходе этой обработки получать нужное значение и в ТекущиеДанные по имени колонки это значение подставлять? В таком случае дерево не будет перерисовываться? |
|||
8
Meilleur
03.10.16
✎
14:21
|
(6) ПолучитьПоИдентификатору()?
НайтиПоИдентификатору(). Наверное, Вы это имели ввиду? И опять же, как это отразится на перерисовке дерева? Попробую так сделать... |
|||
9
Meilleur
03.10.16
✎
14:22
|
(6) Попробую сделать как в (3)
|
|||
10
Fedor-1971
03.10.16
✎
14:27
|
(8) на дереве обновятся только текущие данные
|
|||
11
Meilleur
03.10.16
✎
14:38
|
(10) Сделал как в (3)
Флаг = Ложь; ВсеСтроки = ДеревоПК.ПолучитьЭлементы(); Для Каждого Строка Из ВсеСтроки Цикл Если Строка.Позиция = вхПозиция И Строка.Наименование = вхНаименование Тогда Строка[вхПараметрИмя] = вхЗначение; Прервать; Иначе ВсеПодстроки = Строка.ПолучитьЭлементы(); Для Каждого Подстрока Из ВсеПодстроки Цикл Если Подстрока.Позиция = вхПозиция И Подстрока.Наименование = вхНаименование Тогда Подстрока[вхПараметрИмя] = вхЗначение; Флаг = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если Флаг Тогда Прервать; КонецЕсли; КонецЦикла; Наверное, не очень красиво получилось. Но зато работает. Потом ещё причещу... Фёдор, спасибо за помощь! |
|||
12
Meilleur
03.10.16
✎
15:04
|
(6)
Так ещё проще получилось: ТекДанные = ДеревоПК.НайтиПоИдентификатору(вхИД); ТекДанные[вхПараметрИмя] = вхЗначение; Ещё раз спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |