|
Вопрос по дереву значений
|
Я
|
|
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 человек.