![]() |
|
Работа с деревом значений в Управляемой форме. | ☑ | ||
---|---|---|---|---|
0
Rom_Kat
16.06.19
✎
17:11
|
Дерево заполняю из Справочника с иерархией. В дереве на форме устанавливаю числовое значение реквизита. При изменении ячейки соответствующей этому реквизиту записывается на сервере это же значение по иерархии в справочник. Если ещё и рекурсивно записывать в дерево, то дерево на форме сворачивается.
Как бы записать в дерево или обновить запросом из справочника и оставить на форме в таком же виде как было и до записи? |
|||
1
Rom_Kat
16.06.19
✎
21:14
|
Как вообще управлять отображением дерева?
|
|||
2
Zhuravlik
17.06.19
✎
00:40
|
Свертка происходит после ЗначениеВРеквизитФормы. Соотв. чтобы не сворачивалось надо обновлять используя только данные формы. Либо запоминать текущую открытую позицию, и потом разворачивать дерево до нее (с этим вроде были какие-то сложности, не упомню, надо попробовать установку свойства ТекущаяСтрока, емнип). А прежде все задуматься - оно вообще того стоит? Может есть иное, либо более простое решение?
Вспоминается фраза с ИТС - если вы испытываете затруднения при разработке, скорее всего проблемы с архитектурой. Либо выбран неудачный подход к решению задачи. |
|||
3
Mort
17.06.19
✎
03:34
|
Вот клиентские функции:
Пример использования: СостояниеДерева = ПолучитьСостояниеДерева(Элементы.ДеревоЗначений, ДеревоЗначений, "Ссылка"); // Вместо "ссылка" нужно указать уникальное поле дерева ОбновитьДерево(); // Вызываем функцию которая меняет дерево. УстановитьСостояниеДерева(Элементы.ДеревоЗначений, ДеревоЗначений, СостояниеДерева, "Ссылка") Вот сам функции: Функция ПолучитьСостояниеДерева(ТаблицаФормы, Дерево, ПолеКлюча) Экспорт Результат = Новый Структура("ПутьТекущейСтроки, СостояниеУзлов", Новый Массив, Новый Соответствие); Если ТаблицаФормы.ТекущаяСтрока <> Неопределено Тогда ТекСтрока = Дерево.НайтиПоИдентификатору(ТаблицаФормы.ТекущаяСтрока); Выделение = Новый Массив; Пока ТекСтрока <> Неопределено Цикл Результат.ПутьТекущейСтроки.Вставить(0, ТекСтрока[ПолеКлюча]); ТекСтрока = ТекСтрока.ПолучитьРодителя(); КонецЦикла; КонецЕсли; ДобавитьСостояниеУзлов(ТаблицаФормы, Дерево, Результат.СостояниеУзлов, ПолеКлюча); Возврат Результат; КонецФункции Процедура ДобавитьСостояниеУзлов(ТаблицаФормы, СтрокиДереваФормы, СостояниеУзлов, ПолеКлюча) Для Каждого СтрокаДерева из СтрокиДереваФормы.ПолучитьЭлементы() Цикл СостояниеУзлов.Вставить(СтрокаДерева[ПолеКлюча], ТаблицаФормы.Развернут(СтрокаДерева.ПолучитьИдентификатор())); ДобавитьСостояниеУзлов(ТаблицаФормы, СтрокаДерева, СостояниеУзлов, ПолеКлюча); КонецЦикла; КонецПроцедуры Процедура УстановитьСостояниеДерева(ТаблицаФормы, Дерево, СостояниеДерева, ПолеКлюча) Экспорт Для Каждого СтрокаДерева из Дерево.ПолучитьЭлементы() Цикл Если СостояниеДерева.ПутьТекущейСтроки.Количество() > 0 И СтрокаДерева[ПолеКлюча] = СостояниеДерева.ПутьТекущейСтроки[0] Тогда ТаблицаФормы.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор(); СостояниеДерева.ПутьТекущейСтроки.Удалить(0); КонецЕсли; Развернут = СостояниеДерева.СостояниеУзлов.Получить(СтрокаДерева[ПолеКлюча]); Если Развернут <> Ложь Тогда ТаблицаФормы.Развернуть(СтрокаДерева.ПолучитьИдентификатор()); Иначе ТаблицаФормы.Свернуть(СтрокаДерева.ПолучитьИдентификатор()); КонецЕсли; УстановитьСостояниеДерева(ТаблицаФормы, СтрокаДерева, СостояниеДерева, ПолеКлюча); КонецЦикла; КонецПроцедуры |
|||
4
Rom_Kat
17.06.19
✎
12:08
|
(3) спасибо, попробую.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |