Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не работает перетаскивание в дереве значений
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Vidocq05
Доброго времени суток.

Обычные формы.
На форме есть табличное поле (ТП) с типом дерево значений. Установлены галочки "РазрешитьНачалоПеретаскивания" и "РазрешитьПеретаскивание". ТП заполняю запросом. Но перетаскивание не работает, не в пределах ветки, нигде.
Делаю тип ТП таблица значений - все ОК.
В интернете только находил, что должно работать. Ну если перетаскивать в другую ветку, то нужно программно менять родителя. Но это потом.
Сейчас меня интересует, почему не работает базовый механизм перетаскивания.
sava1
процедуры ПриНачале, Проверка, ПриОкончании - определены ? Данные для переноса заполнены?
Vidocq05
sava1 @ Сегодня, 13:13 необходимо зарегистрироваться для просмотра ссылки ,
Нет, ничего не определено.
Я предполагал, что достаточно поставить галочки "РазрешитьНачалоПеретаскивания" и "РазрешитьПеретаскивание" и перетаскивание в дереве значений будет работать как и в таблице значений (ну хотя бы в пределах ветки). В интернете простого (т.е. без всяких заморочек) примера перетаскивания в дереве значений не нашел.
sava1
насколько помню - при начале нужно заполнить данные для перетаскивания
в перетаскивании - их вписать.

Vidocq05
Изначально я нашел в интернете кусок кода без каких либо разъяснений.
Процедура ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НовыйРодитель, Уровень = 0)
  
   Если Уровень = 0 Тогда
              
       НоваяСтрока = НовыйРодитель.Строки.Добавить();
       ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока);
       ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НоваяСтрока, Уровень + 1);
      
       Если ПеремещаемаяСтрока.Родитель = Неопределено Тогда
           Дерево.Строки.Удалить(ПеремещаемаяСтрока);
       Иначе
           ПеремещаемаяСтрока.Родитель.Строки.Удалить(ПеремещаемаяСтрока);
       КонецЕсли;
      
   Иначе
      
       Для Каждого Стр ИЗ ПеремещаемаяСтрока.Строки Цикл
           НоваяСтрока = НовыйРодитель.Строки.Добавить();
           ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока);
           ПереместитьСтрокуДерева(Дерево, Стр, НоваяСтрока, Уровень + 1);
       КонецЦикла;
      
   КонецЕсли;
      
КонецПроцедуры

Я его сначала не совсем понял, но потом разобрался. И в результате получилось обычное перетаскивание в дереве значений. Вот код:
Процедура МаршрутыТППроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
    СтандартнаяОбработка = Ложь;
КонецПроцедуры

Процедура МаршрутыТППеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)    
    ПереместитьСтрокуДерева(МаршрутыТП, ПараметрыПеретаскивания.Значение, Строка);        
КонецПроцедуры

Процедура ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НовыйРодитель, Уровень = 0)
  
   Если Уровень = 0 Тогда
              
       НоваяСтрока = НовыйРодитель.Строки.Добавить();
       ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока);
       ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НоваяСтрока, Уровень + 1);
      
       Если ПеремещаемаяСтрока.Родитель = Неопределено Тогда
           Дерево.Строки.Удалить(ПеремещаемаяСтрока);
       Иначе
           ПеремещаемаяСтрока.Родитель.Строки.Удалить(ПеремещаемаяСтрока);
       КонецЕсли;
      
   Иначе
      
       Для Каждого Стр ИЗ ПеремещаемаяСтрока.Строки Цикл
           НоваяСтрока = НовыйРодитель.Строки.Добавить();
           ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока);
           ПереместитьСтрокуДерева(Дерево, Стр, НоваяСтрока, Уровень + 1);
       КонецЦикла;
      
   КонецЕсли;
      
КонецПроцедуры

Это не совсем так, как мне нужно, но дальше я разберусь.
Всем спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.