Контекстное меню и перемещение строк.

1. Intercititude 01.09.20 09:16 Сейчас в теме
Всем добрый день!
8.2 ; ОФ

На форме есть табличное поле с типом Дерево значений.
  ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
  ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
  ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));


Пытаюсь реализовать перемещение строк :

Процедура ГруппировкиНаПечатьПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

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



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


В итоге либо строки не двигаются, либо происходит бесконечное зацикливание и выкидывает с 1с. Так же стандартные кнопки перемещения( контектсное меню) не отрабатывают.

Что я упустил ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Jeka44 01.09.20 09:55 Сейчас в теме
Если нужно строки дерева двигать, то вот это не подойдет?
КоллекцияСтрокДереваЗначений.Сдвинуть (ValueTreeRowCollection.Move)
Синтаксис:
Сдвинуть(<Строка>, <Смещение>)
Параметры:
<Строка> (обязательный)
Тип: Число.
Индекс строки, которую надо сдвинуть.
<Смещение> (обязательный)
Тип: Число.
Количество строк, на которые необходимо сдвинуть строку. Положительное смещение обозначает увеличение текущего индекса (сдвиг к концу коллекции), отрицательное - уменьшение текущего индекса (сдвиг к началу коллекции).
Описание:
Сдвигает строку на указанное количество позиций в коллекции строк данного уровня дерева значений.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
// сдвинем первую строку на следующую позицию

СтрокиСостава.Сдвинуть(0, 1);
// сдвинем вторую строку на предыдущую позицию

СтрокиСостава.Сдвинуть(1, -1);
Использование в версии:
Доступен, начиная с версии 8.0.
Показать
4. Intercititude 01.09.20 13:45 Сейчас в теме +0.72 $m
(2) Что то у меня нету такого метода.
И это к кнопкам привязать имеете ввиду ?
5. Jeka44 01.09.20 14:29 Сейчас в теме
(4) для примера я повесил событие на свою кнопку. То есть при нажатии на кнопку мы смотрим какая сейчас активная строка дерева. Берем строку родителя. А дальше у Строки родителя у реквизита "Строки" вызываем метод "Сдвинуть", в параметрах которого указываем строку, которую хотим подвинуть(нашу текущую строку) и то на сколько ее нужно переместить. Только надо еще проверки какие-нибудь чтобы не улететь за границы.
//В примере на гифке Строка2 и Строка3 подчинены Строка1
Прикрепленные файлы:
6. Intercititude 02.09.20 12:14 Сейчас в теме
(5)
1. Первую строку не сдвинуть,так как родитель отсуствтует.
2. Выход за границы индексов таблицы: "неправильное смещение внутри коллекции".

подскажите реализацию..
7. Jeka44 02.09.20 12:18 Сейчас в теме
(6) "Первую строку не сдвинуть". Попробуй напрямую обратиться к строкам верхнего уровня дерева ИмяТвоегоДерева.Строки.Сдвинуть(НужнаяСтрока, Смещение)
9. Intercititude 02.09.20 12:20 Сейчас в теме
(7) Я совсем новичок, а объясняете сложно )
10. Jeka44 02.09.20 12:24 Сейчас в теме
(9) Все, что связано с деревьями, не только понимать, но и объяснять сложно) Сейчас попробую перефразировать. Если у строки нет родителя, то это строка первого уровня, а коллекция строк первого уровня, на сколько я помню, это просто ИмяТвоегоДерева.Строки. Вот именно у этой коллекции и вызывай метод Сдвинуть() чтобы подвигать строку
11. Intercititude 02.09.20 12:38 Сейчас в теме
(10) А ну и перед делать проверку на то, что это первая строка ?

А по поводу метода количества() как проверять ?
12. Jeka44 02.09.20 13:52 Сейчас в теме
(11)
А ну и перед делать проверку на то, что это первая строка ?

Да, проверять, что у нее нет родителя

Чтобы не вылетать за границы

Если мы хотим двинуться вниз по дереву, то Примерно следующее:

ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);

Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда
     РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);
Иначе
     Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;


Аналогично при движении наверх
13. Intercititude 02.09.20 15:47 Сейчас в теме
(12)
   ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;

                РодительТекущейСтроки = ТекущаяСтрока.Родитель;

               

                ЭлементыФормы.ГруппировкиНаПечать.ТекущиеДанные.Родитель.Строки.Сдвинуть(ТекущаяСтрока,1);

               

                ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);

 

                Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда

                     РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);

                Иначе

                     Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");

                КонецЕсли;
Показать


Вот так ?
Всё равно ловлю ошибку "неправильное смещение внутри коллекци"
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..
14. Jeka44 02.09.20 15:56 Сейчас в теме
(13)
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..


ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество()

Количество() я пропустил, когда Вам ответ писал.

Я еще только не проверял индекс с 0 начинается или с 1. Так что в отладчике проверьте и если что код на Количество()-1 подкорректируйте
15. Jeka44 02.09.20 16:04 Сейчас в теме
(13)Сначала проверки, потом сдвиги, а то Вы сначала сдвиг делаете, а потом идете проверку делать и если она проходит, то еще один сдвиг. Примерно так должно быть:
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;

                РодительТекущейСтроки = ТекущаяСтрока.Родитель;

Если РодительТекущейСтроки = Неопределено Тогда
     РодительТекущейСтроки = ГруппировкиНаПечать;
КонецЕсли;
                                      

                ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);

 

                Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда

                     РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);

                Иначе

                     Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");

                КонецЕсли;
Показать
16. Intercititude 02.09.20 16:21 Сейчас в теме
(15) Неправильное смещение внутри коллекции как ни крути..
17. Jeka44 02.09.20 16:24 Сейчас в теме
(16)Скиньте Ваш код как он есть сейчас, я попробую у себя внешнюю обработку сделать и смоделировать чтобы все работало
18. Intercititude 02.09.20 16:26 Сейчас в теме
(17)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;

                РодительТекущейСтроки = ТекущаяСтрока.Родитель;

               

                Если РодительТекущейСтроки = Неопределено Тогда

                     РодительТекущейСтроки = ГруппировкиНаПечать;

                КонецЕсли;

               

                ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);

 

                Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда

                     РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока,1);

                Иначе

                     Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");

                КонецЕсли;
Показать
19. Jeka44 02.09.20 16:31 Сейчас в теме
(16)Вот код и пример обработки. У меня работает:

Процедура КнопкаВнизНажатие(Элемент)
	
	
	ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
	
	РодительТекущейСтроки = ТекущаяСтрока.Родитель;
	
	Если РодительТекущейСтроки = Неопределено Тогда
		РодительТекущейСтроки = ГруппировкиНаПечать;
	КонецЕсли;
	
	
	ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
	
	
	
	Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() - 1 Тогда
		
		РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, 1);
		
	Иначе
		
		Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
		
	КонецЕсли;
	
КонецПроцедуры


Процедура КнопкаВВерхНажатие(Элемент)
	
	ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
	
	РодительТекущейСтроки = ТекущаяСтрока.Родитель;
	
	Если РодительТекущейСтроки = Неопределено Тогда
		РодительТекущейСтроки = ГруппировкиНаПечать;
	КонецЕсли;
	
	
	ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
	
	
	
	Если ИндексТекущейСтроки <> 0 Тогда
		
		РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, -1);
		
	Иначе
		
		Сообщить("Мы в начале уровня дерева. Вверх двигаться нельзя");
		
	КонецЕсли;
	
	
КонецПроцедуры 
Показать
Прикрепленные файлы:
ДеревоЗначений.epf
20. Intercititude 02.09.20 16:42 Сейчас в теме
(19) Открыл у себя. Попадаю в сообщение() всегда..
Плюс у Вас не программно стоят колонки и иеархия отсуствтует видимая.
21. Jeka44 02.09.20 16:46 Сейчас в теме
(20)Строки дерева добавь в таком порядке. Добавь первую строку. Встань на нее фокусом и добавь вторую строку. Потом опять встань на первую строку фокусом и добавь третью строку. Вторая и третья строка у тебя окажутся подчинены первой. Затем попробую подвигать вторую и третью строки местами. Лень было реализовывать полноценный инструмент добавления строк ради демки.

не программно стоят колонки и иеархия отсуствтует видимая.

Разве это важно для демонстрации перемещения строк? По моему нет, я сделал просто демку, которая показывает как работает перемещение, то что это действительно дерево видно в конфигураторе, то, что строки подчинены друг другу если их корректно внести тоже можно увидеть в конфигураторе
23. Intercititude 02.09.20 16:54 Сейчас в теме
(21) Так работает да. Но я вот упустил что. У меня при открытии :
  Если ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда
	  
	  ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
	  
	  ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
	  
	  ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
	  
  Иначе
	  
	  Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда
		  
		  ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
		  
	  КонецЕсли;
	  
  КонецЕсли;
  
  ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки();
  
  ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина;
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные;
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = "";
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
  
  
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина;
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина;
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары();
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары();
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации;
  
  
  
  ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход;
  
  
  
  ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Показать


Видимо из-за этого и криво работает.. То есть у меня иеарирхия, каждая строки подчинена другой..
24. Jeka44 02.09.20 16:59 Сейчас в теме
(23)
сли ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда

ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));

ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));

ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));

Иначе

Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда

ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));

КонецЕсли;

КонецЕсли;

ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки();

ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина;

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные;

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = "";

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;



ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина;

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина;

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары();

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары();

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;

ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации;



ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход;



ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Показать


Добавил этот код в свою обработку, только вырезав вызов функции "ПолучитьСписокКолонокТаблицыТовары()", которую я не знаю как у Вас работает. В итоге колонки построили, строки соответственно пустые. если строку добавить вручную, то перемещение отрабатывает
25. Intercititude 02.09.20 17:07 Сейчас в теме
(24) Вот какую иеархию я имею ввиду.
Если так делать, то не отрабатывает.
Прикрепленные файлы:
26. Jeka44 02.09.20 17:08 Сейчас в теме
(25)Да, если ты так делаешь, то работать не будет, потому что это надо уровень иерархии менять, а если в пределах одного уровня, то все норм.
Прикрепленные файлы:
27. Intercititude 02.09.20 17:11 Сейчас в теме
(26) Собственно это меня и интересует. Как программно менять кнопкой иеарирхию ?
28. Jeka44 02.09.20 17:12 Сейчас в теме
(27)попробуй Поменять у строки родителя на родителя родителя например. Вру, так делать нельзя. Сейчас что-нибудь придумаю
29. Jeka44 02.09.20 17:18 Сейчас в теме
(27)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
	
	РодительТекущейСтроки = ТекущаяСтрока.Родитель;
	
	Если РодительТекущейСтроки = Неопределено Тогда
		Возврат;
	Иначе
		
		НоваяСтрока = РодительТекущейСтроки.Родитель.Строки.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяСтрока);
		РодительТекущейСтроки.Строки.Удалить(ТекущаяСтрока);
		
	КонецЕсли;
Показать


Теперь так?
Прикрепленные файлы:
ДеревоЗначений.epf
30. Jeka44 02.09.20 17:32 Сейчас в теме
(29)Отвечу сам себе. Не правильно это. Подчиненные строки рубит. Надо рекурсию запускать и получится как у автора вопроса в самом начале. Начинаем все с начала)
Intercititude; +1 Ответить
31. Intercititude 02.09.20 17:42 Сейчас в теме
(30) Возможно один выход это (3)
32. Jeka44 02.09.20 17:46 Сейчас в теме
(31)Не будем так просто сдаваться, уже даже из принципа интересно) Сегодня вечером после работы постараюсь сделать, завтра к утру отвечу
35. Jeka44 03.09.20 09:00 Сейчас в теме
(31) Процедура перемещения вверх по дереву
Процедура КнопкаВверхПоИерархииНажатие(Элемент)
	
	ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
	
	Если ТекущаяСтрока = Неопределено Тогда
		
		Сообщить("Не выбрана строка дерева");
		
	Иначе
		
		Если ТекущаяСтрока.Родитель = Неопределено Тогда
			
			Сообщить("Верхний уровень. Выше нельзя");
			
		Иначе
			
			РодительТекущейСтроки = ТекущаяСтрока.Родитель;
			
			Если РодительТекущейСтроки.Родитель = Неопределено Тогда
				РодительРодителя = ГруппировкиНаПечать;
				Перенести(ТекущаяСтрока,РодительРодителя);
				
			Иначе
				РодительРодителя = РодительТекущейСтроки;
				Перенести(ТекущаяСтрока,РодительТекущейСтроки.Родитель);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
		
КонецПроцедуры

Процедура Перенести(Ветка,Куда)
	НоваяВетка=Куда.Строки.Добавить();
	ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка); 
	Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
	Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
Показать
Прикрепленные файлы:
ДеревоЗначений.epf
37. Intercititude 03.09.20 10:59 Сейчас в теме
(35) Как то неоднозначно вообще.. По факту может якобы вверх и двигается. Но Визуально непонятно )
38. Jeka44 03.09.20 11:17 Сейчас в теме
(37)Не совсем понял Вашего замечания. Вроде все корректно работает
Прикрепленные файлы:
39. Intercititude 03.09.20 11:24 Сейчас в теме
(38) Ну судя по Вашему примеру(gif)
3 должна оказаться сперва вместо 2,а 2 вместо 3, Потом 3 вместо 1 и 1 вместо 3.
В итоге 3 на вверху,1 на второй строке, 2 на третьей..
А выходит она двигается по иеарирхии находясь на одной строке чтоли.

И всё это должно быть с учетом 1 колонки со вложенным значком (-)
40. Jeka44 03.09.20 11:38 Сейчас в теме
(39)
3 должна оказаться сперва вместо 2,а 2 вместо 3

Нет, мы всю ветку поднимаем по иерархии дерева. То есть ветка 3 становится на одном уровне с веткой 2 и они подчинены ветке1.
41. Intercititude 03.09.20 11:40 Сейчас в теме
(40)Но мне то как раз смена веток просто нужна грубо говоря..
42. Jeka44 03.09.20 11:48 Сейчас в теме
(41)ну тогда я окончательно запутался, что Вам нужно. Может картинки нарисуете тогда как хотите чтобы все работало? Нужно менять родительскую и дочернюю строку местами и не трогая при этом всю подчиненную иерархию. То есть Было такое дерево Строка1-Строка2-Строка3. Строку 2 хотим поднять на верх. И в итоге должны получить дерево Строка2-Строка1-Строка3?
43. Intercititude 03.09.20 11:53 Сейчас в теме
(40) А если мне вниз двигать, то вместо РодительТекущейСтроки.Родитель И РодительРодителя, что писать ?

Необходимо ещё и вниз двигать для полного понимания правильности , но не пойму как.
44. Jeka44 03.09.20 12:19 Сейчас в теме
(43)Когда двигаешься вниз надо понимать текущую строку какому именно из ее потомков ты хочешь переподчинить
45. Intercititude 03.09.20 12:24 Сейчас в теме
(44) Звучит просто... Уже битый час сижу не могу понять
46. Jeka44 03.09.20 12:26 Сейчас в теме
(45)Тут надо либо пытаться перетаскивание тогда использовать чтобы сразу тащить на нужную строку, либо форму открывать со всеми подчиненными строками текущей строки и предлагать выбор какой строке подчиниться.
49. Intercititude 03.09.20 16:57 Сейчас в теме
(46) Помогите. Весь день мучаюсь. Никак..
50. Jeka44 03.09.20 17:14 Сейчас в теме
(49)На работе сейчас завал, после работы постараюсь сделать и завтра утром отвечу
47. Intercititude 03.09.20 12:40 Сейчас в теме
48. Jeka44 03.09.20 13:30 Сейчас в теме
(47)ну только если всегда на первую подчиненную перетаскивать, но все зависит от конкретной задачи, которую вы собираетесь реализовать
51. Intercititude 04.09.20 12:56 Сейчас в теме
(48) Да всё просто. Хотелось бы от нижней иеарирхии двигать строки вверх и соответственно вниз, при этом заменяя строки в рамках движения.
52. Intercititude 07.09.20 09:51 Сейчас в теме
(48) Добрый день. Помогите как через перетаскивание делать,либо я думал может через добавление вспомогательной колонки это сделать с типом уид
36. Jeka44 03.09.20 09:01 Сейчас в теме
(31)ответил в (35), просто случайно не к тому сообщению привязал
22. Jeka44 02.09.20 16:49 Сейчас в теме
(20)
Прикрепленные файлы:
8. Jeka44 02.09.20 12:19 Сейчас в теме
(6) "Выход за границы" не сколько я помню у строк есть метод количество() вот и смотри какой номер строки у текущей строки и не является ли она уже последней
3. acces969 362 01.09.20 10:58 Сейчас в теме
Дерево значений вообще проблемное в плане обработки. Сколько раз с ним сталкивался, всегда городил костыли для решения каждой задачи. Я бы посоветовал не использовать дерево как элемент хранения данных, оставив ему только информативную (визуальную) часть. Т.е. таблица значений хранит данные, а дерево заполняется по данным строк таблицы.
Особенно это хорошо получается, если вместо дерева выводить мини-отчет СКД с источником данных - таблица значений. Возможности отображения значительно расширяются.
К тому же, иерархический список на форме уже давно реализую не с помощью дерева значений, а с помощью таблицы в связке с условным оформлением - у каждой строки отмечен уровень вложенности, а в УО отключается видимость части колонок таблицы по полю "уровень". Работает быстро и удобно.
33. SlavaKron 02.09.20 17:48 Сейчас в теме
Делал такое дерево - сложноподчиненная ТЧ. Изменение иерархии реализовал через перетаскивание. И да, там всё через рекурсию.
34. Intercititude 02.09.20 17:53 Сейчас в теме
53. SlavaKron 17.09.20 17:47 Сейчас в теме
(34) Да вот откопал старую конфигурацию. Изначально данные дерева хранятся в плоской таблице – в данном случае ТЧ обработки.
Снизу на форме как раз эта ТЧ для понимания как хранятся данные.
Прикрепленные файлы:
Дерево.epf
Intercititude; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот