0
AndrewM
30.11.17
✎
16:41
|
Уважаемые знатоки!
Как заставить строку дерева встать в подчинение под другую строку?
Дано: на управляемой форме есть дерево. Когда я перетаскиваю строку из одного уровня вложенности в строку с другим уровнем либо в соседнюю ветку, тогда переносимая строка встаёт под выбранного родителя.
Скрин 1 (всё норм):
Но когда я тяну строку в соседнюю, у которой тот же уровень вложенности, она не заходит в подчинение к строке, а встаёт рядом, то есть работает просто как перемещение строки.
Скрин 2 (не норм, хочу по-другому):
Вопрос: как сделать так, чтобы строка заходила в подчинение к строке, даже если у них одинаковый уровень вложенности? То есть чтобы в "Скрин 2" было также, как в "Скрин 1".
В обработчиках При/ПриОкончании Перетаскивания не вижу в параметрах строку назначения, куда тянется строка. В параметрах обработчиков хранится только сама перетаскиваемая строка.
|
|
2
AndrewM
04.12.17
✎
11:12
|
(1) Забыл написать ответ. Вот что получилось:
Спасибо за наводку. Сделал через поиск по идентификатору.
Только переносить строку к другому родителю приходится на сервере, что не очень удобно, т.к. приходится выгружать/загружать дерево, а из-за этого пользователь видит, что обновилась вся таб.часть и что курсор встаёт на первую строку, что немного напрягает, если строк много.
<code>
&НаКлиенте
Процедура Расш1_деревоСоставПеретаскиваниеВместо(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
лТекЭлемент = Элемент.ТекущиеДанные;
лКлючиПереносимыхСтрок = Новый Массив;
Для Каждого лЭлемент Из ПараметрыПеретаскивания.Значение Цикл
лПереносимаяСтрока = деревоСостав.НайтиПоИдентификатору(лЭлемент);
лКлючиПереносимыхСтрок.Добавить(лПереносимаяСтрока.КлючСвязи);
КонецЦикла;
лНазначение = деревоСостав.НайтиПоИдентификатору(Строка);
Если лНазначение <> Неопределено Тогда
лРодительНазначения = лНазначение.ПолучитьРодителя();
лРодительТекущий = лТекЭлемент.ПолучитьРодителя();
Если лРодительТекущий = лРодительНазначения Тогда
СтандартнаяОбработка = Ложь;
ИзменитьРодителя(лКлючиПереносимыхСтрок, лНазначение.КлючСвязи);
ПоказатьУровеньДерева(уровеньРазвертки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИзменитьРодителя(лКлючиПереносимыхСтрок, лКлючРодителя)
лДерево = РеквизитФормыВЗначение("деревоСостав");
Для Каждого лКлючСвязи Из лКлючиПереносимыхСтрок Цикл
лСтрокаТекущая = лДерево.Строки.Найти(лКлючСвязи, "КлючСвязи", Истина);
лСтрокаРодителя = лДерево.Строки.Найти(лКлючРодителя, "КлючСвязи", Истина);
Если лСтрокаТекущая <> Неопределено И лСтрокаРодителя <> Неопределено Тогда
ДобавитьНовуюВеткуРодителю(лСтрокаРодителя, лСтрокаТекущая);
лСтрокаТекущая.Родитель.Строки.Удалить(лСтрокаТекущая);
КонецЕсли;
КонецЦикла;
ЗначениеВРеквизитФормы(лДерево, "деревоСостав");
КонецПроцедуры
</code>
|
|