|   |   | 
| 
 | Работа с деревом значений в Управляемой форме. | ☑ | ||
|---|---|---|---|---|
| 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) спасибо, попробую.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |