Имя: Пароль:
1C
 
Удаление элемента дерева значений в управляемой форме
0 rdaler
 
12.02.11
01:12
8.2.13.202 - Управляемое приложение. На форме реквизит ДеревоЗначений.
Необходимо организовать перенос элемента ДЗ из одного родителя в другого.
Скопировать элемент - не проблема, а вот как удалить? Насколько не врёт СП, удалить элемент дерева значений в управляемой форме можно только по индексу. И как же этот самый индекс текущего элемента получить?
1 rdaler
 
12.02.11
10:48
Совсем никто не в курсе?
2 IamAlexy
 
12.02.11
10:49
3 rdaler
 
12.02.11
10:52
ДеревоЗначений, а не динамический список.
4 Murzz
 
12.02.11
11:39
у строки дерева есть метод ПолучитьИдентификатор().
5 rdaler
 
12.02.11
11:56
(4)Идентификатор это не индекс!
6 Beans
 
12.02.11
12:37
Покажи как копируешь програмно элемент с учетом другого родителя, интресно...

&НаКлиенте
Процедура ДеревоОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
   
   Д = Элементы.Дерево.ТекущиеДанные;
   ДанныеФормыКоллекция = Дерево.ПолучитьЭлементы();
   Индекс = ДанныеФормыКоллекция.Индекс(Д);
   
Если Индекс = -1 Тогда
ДанныеФормыКоллекция0 = ДанныеФормыКоллекция[0].ПолучитьЭлементы();
Индекс = ДанныеФормыКоллекция0.Индекс(Д);
       
Если Индекс = -1 Тогда
ДанныеФормыКоллекция1 = ДанныеФормыКоллекция[1].ПолучитьЭлементы();
Индекс = ДанныеФормыКоллекция1.Индекс(Д);
//..Если Индекс = -1 Тогда
//..ДанныеФормыКоллекция2 = ДанныеФормыКоллекция[2].ПолучитьЭлементы();
//........................
Иначе
ДанныеФормыКоллекция0.Удалить(Д);
КонецЕсли;
Иначе
ДанныеФормыКоллекция.Удалить(Д);
КонецЕсли;

из этого всего надо будет сделать какой то цикл.
7 rdaler
 
12.02.11
13:11
Если брать в расчет исключительно мою задачу (максимум 2 уровня дерева и элементы разных уровней не перемешиваются между собой), то решение может выглядеть приблизительно так:

&НаКлиенте
Процедура УдалитьЭлемент(Команда)
   Если Элементы.Дерево.ТекущиеДанные=Неопределено Тогда
       Возврат;
   КонецЕсли;
   ЭлементыТекущегоУровняИерархии=?(Элементы.Дерево.ТекущиеДанные.ПолучитьРодителя()=Неопределено,
       Дерево.ПолучитьЭлементы(), Элементы.Дерево.ТекущиеДанные.ПолучитьРодителя().ПолучитьЭлементы());
   ТекИндекс=0;
   Пока ЭлементыТекущегоУровняИерархии[ТекИндекс]<>Элементы.Дерево.ТекущиеДанные Цикл
       ТекИндекс=ТекИндекс+1;
   КонецЦикла;
   ЭлементыТекущегоУровняИерархии.Удалить(ТекИндекс);
КонецПроцедуры
8 rdaler
 
12.02.11
13:12
+(7) Наименование реквизита - "Дерево", Наименование элемента управления тоже "Дерево".
9 rdaler
 
12.02.11
13:14
(7)Реализация, конечно, быдловатая, но по крайней мере работает верно.