Управляемая форма 1С 8.2 – работа с деревом значений и таблицей значений. Часть II (Реализация DRAG and DROP)
&НаКлиенте Процедура ЭлементДеревоПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) // Узел нельзя переносить в узлы подчиненные ему самому // т.е. родительский узел нельзя переносить в дочерние. // Проверим это условие для всех выделенных элементов СтандартнаяОбработка = Ложь; РеквизитДерево = ЭтаФорма["Дерево"]; ИДНовыйРодитель = Строка; // Если НовыйРодитель = Неопределено => Корень дерева НовыйРодитель = ?(ИДНовыйРодитель = Неопределено, Неопределено, РеквизитДерево.НайтиПоИдентификатору(ИДНовыйРодитель)); МассивИДПереносимыхЭлементов = ПараметрыПеретаскивания.Значение; Для каждого ИДПереносимыйЭлемент из МассивИДПереносимыхЭлементов Цикл ПереносимыйЭлемент = РеквизитДерево.НайтиПоИдентификатору( ИДПереносимыйЭлемент); Если НЕ ПроверитьВозможностьПереноса(ПереносимыйЭлемент, НовыйРодитель) Тогда ПараметрыПеретаскивания.Действие=ДействиеПеретаскивания.Отмена; Прервать; КонецЕсли; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ЭлементДеревоПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка=Ложь; РеквизитДерево = ЭтаФорма["Дерево"]; ИДПриемник = Строка; // Если ИДПриемник = Неопределено => Корень дерева Приемник = ?(ИДПриемник = Неопределено, Неопределено, РеквизитДерево.НайтиПоИдентификатору(ИДПриемник)); МассивИДИсточник = ПараметрыПеретаскивания.Значение; Для Каждого ИДИсточник Из МассивИДИсточник Цикл Источник = РеквизитДерево.НайтиПоИдентификатору(ИДИсточник); НоваяСтрока = СкопироватьСтрокуДерева(РеквизитДерево,Приемник,Источник); // Производится копирование в корень // Для "красоты" развернем вновь созданную ветвь Если Приемник = Неопределено и НоваяСтрока<>Неопределено Тогда Элементы["Дерево"].Развернуть(НоваяСтрока.ПолучитьИдентификатор(), Истина); КонецЕсли; КонецЦикла; // Для "красоты" развернем ветвь-родителя Если НЕ Приемник = Неопределено Тогда Элементы["Дерево"].Развернуть(ИДПриемник, Истина); КонецЕсли; КонецПроцедуры
Если публикация помогла Вам справится с проблемой, решить задачу или расширить свои знания - поддержите автора.
Комментарии:
Оставить комментарий на Steelvan
Не нашел, куда перечислять благодарность.
Пользуйтесь на здоровье ))