Всем добрый день!
8.2 ; ОФ
На форме есть табличное поле с типом Дерево значений.
Пытаюсь реализовать перемещение строк :
В итоге либо строки не двигаются, либо происходит бесконечное зацикливание и выкидывает с 1с. Так же стандартные кнопки перемещения( контектсное меню) не отрабатывают.
Что я упустил ?
8.2 ; ОФ
На форме есть табличное поле с типом Дерево значений.
ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
Пытаюсь реализовать перемещение строк :
Процедура ГруппировкиНаПечатьПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
Процедура ГруппировкиНаПечатьПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Колонка)
ПереместитьСтрокуДерева(ГруппировкиНаПечать, ПараметрыПеретаскивания.Значение, Строка);
КонецПроцедуры
Процедура ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НовыйРодитель, Уровень = 0)
Если Уровень = 0 Тогда
НоваяСтрока = НовыйРодитель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеремещаемаяСтрока);
ПереместитьСтрокуДерева(Дерево, ПеремещаемаяСтрока, НоваяСтрока, Уровень + 1);
Если ПеремещаемаяСтрока.Родитель = Неопределено Тогда
Дерево.Строки.Удалить(ПеремещаемаяСтрока);
Иначе
ПеремещаемаяСтрока.Родитель.Строки.Удалить(ПеремещаемаяСтрока);
КонецЕсли;
Иначе
Для Каждого Стр ИЗ ПеремещаемаяСтрока.Строки Цикл
НоваяСтрока = НовыйРодитель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
ПереместитьСтрокуДерева(Дерево, Стр, НоваяСтрока, Уровень + 1);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
ПоказатьВ итоге либо строки не двигаются, либо происходит бесконечное зацикливание и выкидывает с 1с. Так же стандартные кнопки перемещения( контектсное меню) не отрабатывают.
Что я упустил ?
По теме из базы знаний
- Подсистема "Инструменты разработчика" v7.13.2
- Номенклатура (расширение формы списка и выбора) для УТ, КА, ERP, Розница
- Синхронизация хранилища 1С и git-репозитория с применением OneScript и Gitsync. Методика и пошаговая инструкция для создания скрипта и его регулярного запуска
- Внедрение крупного проекта на ERP 2.5 с применением методических решений из УПП 1.3 и обеспечением товаров с разных складов с учетом серий
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если нужно строки дерева двигать, то вот это не подойдет?
КоллекцияСтрокДереваЗначений.Сдвинуть (ValueTreeRowCollection.Move)
Синтаксис:
Сдвинуть(<Строка>, <Смещение>)
Параметры:
<Строка> (обязательный)
Тип: Число.
Индекс строки, которую надо сдвинуть.
<Смещение> (обязательный)
Тип: Число.
Количество строк, на которые необходимо сдвинуть строку. Положительное смещение обозначает увеличение текущего индекса (сдвиг к концу коллекции), отрицательное - уменьшение текущего индекса (сдвиг к началу коллекции).
Описание:
Сдвигает строку на указанное количество позиций в коллекции строк данного уровня дерева значений.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
// сдвинем первую строку на следующую позицию
СтрокиСостава.Сдвинуть(0, 1);
// сдвинем вторую строку на предыдущую позицию
СтрокиСостава.Сдвинуть(1, -1);
Использование в версии:
Доступен, начиная с версии 8.0.
ПоказатьСинтаксис:
Сдвинуть(<Строка>, <Смещение>)
Параметры:
<Строка> (обязательный)
Тип: Число.
Индекс строки, которую надо сдвинуть.
<Смещение> (обязательный)
Тип: Число.
Количество строк, на которые необходимо сдвинуть строку. Положительное смещение обозначает увеличение текущего индекса (сдвиг к концу коллекции), отрицательное - уменьшение текущего индекса (сдвиг к началу коллекции).
Описание:
Сдвигает строку на указанное количество позиций в коллекции строк данного уровня дерева значений.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
// сдвинем первую строку на следующую позицию
СтрокиСостава.Сдвинуть(0, 1);
// сдвинем вторую строку на предыдущую позицию
СтрокиСостава.Сдвинуть(1, -1);
Использование в версии:
Доступен, начиная с версии 8.0.
(4) для примера я повесил событие на свою кнопку. То есть при нажатии на кнопку мы смотрим какая сейчас активная строка дерева. Берем строку родителя. А дальше у Строки родителя у реквизита "Строки" вызываем метод "Сдвинуть", в параметрах которого указываем строку, которую хотим подвинуть(нашу текущую строку) и то на сколько ее нужно переместить. Только надо еще проверки какие-нибудь чтобы не улететь за границы.
//В примере на гифке Строка2 и Строка3 подчинены Строка1
//В примере на гифке Строка2 и Строка3 подчинены Строка1
Прикрепленные файлы:
(9) Все, что связано с деревьями, не только понимать, но и объяснять сложно) Сейчас попробую перефразировать. Если у строки нет родителя, то это строка первого уровня, а коллекция строк первого уровня, на сколько я помню, это просто ИмяТвоегоДерева.Строки. Вот именно у этой коллекции и вызывай метод Сдвинуть() чтобы подвигать строку
(11)
Да, проверять, что у нее нет родителя
Если мы хотим двинуться вниз по дереву, то Примерно следующее:
Аналогично при движении наверх
А ну и перед делать проверку на то, что это первая строка ?
Да, проверять, что у нее нет родителя
Чтобы не вылетать за границы
Если мы хотим двинуться вниз по дереву, то Примерно следующее:
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);
Иначе
Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;
Аналогично при движении наверх
(12)
Вот так ?
Всё равно ловлю ошибку "неправильное смещение внутри коллекци"
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
ЭлементыФормы.ГруппировкиНаПечать.ТекущиеДанные.Родитель.Строки.Сдвинуть(ТекущаяСтрока,1);
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);
Иначе
Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;
ПоказатьВот так ?
Всё равно ловлю ошибку "неправильное смещение внутри коллекци"
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..
(13)
ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество()
Количество() я пропустил, когда Вам ответ писал.
Я еще только не проверял индекс с 0 начинается или с 1. Так что в отладчике проверьте и если что код на Количество()-1 подкорректируйте
И ИндексТекущейСтроки < РодительТекущейСтроки.Строки это число и колеекциястрок. как их сравнивать..
ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество()
Количество() я пропустил, когда Вам ответ писал.
Я еще только не проверял индекс с 0 начинается или с 1. Так что в отладчике проверьте и если что код на Количество()-1 подкорректируйте
(13)Сначала проверки, потом сдвиги, а то Вы сначала сдвиг делаете, а потом идете проверку делать и если она проходит, то еще один сдвиг. Примерно так должно быть:
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки = Неопределено Тогда
РодительТекущейСтроки = ГруппировкиНаПечать;
КонецЕсли;
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока);
Иначе
Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;
Показать
(17)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки = Неопределено Тогда
РодительТекущейСтроки = ГруппировкиНаПечать;
КонецЕсли;
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока,1);
Иначе
Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;
Показать
(16)Вот код и пример обработки. У меня работает:
Процедура КнопкаВнизНажатие(Элемент)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки = Неопределено Тогда
РодительТекущейСтроки = ГруппировкиНаПечать;
КонецЕсли;
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки < РодительТекущейСтроки.Строки.Количество() - 1 Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, 1);
Иначе
Сообщить("Мы в конце уровня дерева. Вниз двигаться нельзя");
КонецЕсли;
КонецПроцедуры
Процедура КнопкаВВерхНажатие(Элемент)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки = Неопределено Тогда
РодительТекущейСтроки = ГруппировкиНаПечать;
КонецЕсли;
ИндексТекущейСтроки = РодительТекущейСтроки.Строки.Индекс(ТекущаяСтрока);
Если ИндексТекущейСтроки <> 0 Тогда
РодительТекущейСтроки.Строки.Сдвинуть(ТекущаяСтрока, -1);
Иначе
Сообщить("Мы в начале уровня дерева. Вверх двигаться нельзя");
КонецЕсли;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
ДеревоЗначений.epf
(20)Строки дерева добавь в таком порядке. Добавь первую строку. Встань на нее фокусом и добавь вторую строку. Потом опять встань на первую строку фокусом и добавь третью строку. Вторая и третья строка у тебя окажутся подчинены первой. Затем попробую подвигать вторую и третью строки местами. Лень было реализовывать полноценный инструмент добавления строк ради демки.
Разве это важно для демонстрации перемещения строк? По моему нет, я сделал просто демку, которая показывает как работает перемещение, то что это действительно дерево видно в конфигураторе, то, что строки подчинены друг другу если их корректно внести тоже можно увидеть в конфигураторе
не программно стоят колонки и иеархия отсуствтует видимая.
Разве это важно для демонстрации перемещения строк? По моему нет, я сделал просто демку, которая показывает как работает перемещение, то что это действительно дерево видно в конфигураторе, то, что строки подчинены друг другу если их корректно внести тоже можно увидеть в конфигураторе
(21) Так работает да. Но я вот упустил что. У меня при открытии :
Видимо из-за этого и криво работает.. То есть у меня иеарирхия, каждая строки подчинена другой..
Если ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда
ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
Иначе
Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
КонецЕсли;
КонецЕсли;
ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки();
ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = "";
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход;
ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
ПоказатьВидимо из-за этого и криво работает.. То есть у меня иеарирхия, каждая строки подчинена другой..
(23)
Добавил этот код в свою обработку, только вырезав вызов функции "ПолучитьСписокКолонокТаблицыТовары()", которую я не знаю как у Вас работает. В итоге колонки построили, строки соответственно пустые. если строку добавить вручную, то перемещение отрабатывает
сли ГруппировкиНаПечать.Колонки.Количество() = 0 Тогда
ГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
Иначе
Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
КонецЕсли;
КонецЕсли;
ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки();
ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = "";
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход;
ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
ПоказатьГруппировкиНаПечать.Колонки.Добавить("Использовать", Новый ОписаниеТипов("Булево"));
ГруппировкиНаПечать.Колонки.Добавить("Группировка", Новый ОписаниеТипов("Строка"));
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
Иначе
Если ГруппировкиНаПечать.Колонки.Найти("Значение") = Неопределено Тогда
ГруппировкиНаПечать.Колонки.Добавить("Значение", Новый ОписаниеТипов("СписокЗначений"));
КонецЕсли;
КонецЕсли;
ЭлементыФормы.ГруппировкиНаПечать.СоздатьКолонки();
ЭлементыФормы.ГруппировкиНаПечать.ЧередованиеЦветовСтрок = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.ДанныеФлажка = ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.Данные = "";
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Использовать.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.КнопкаСпискаВыбора = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораИзСписка = Истина;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора.ДоступныеЗначения = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.СписокВыбора = ПолучитьСписокКолонокТаблицыТовары();
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Группировка.ЭлементУправления.РежимВыбораНезаполненного = РежимВыбораНезаполненного.ПриАктивизации;
ЭлементыФормы.ГруппировкиНаПечать.Колонки.Значение.РежимРедактирования = РежимРедактированияКолонки.Вход;
ЭлементыФормы.ГруппировкиНаПечать.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Добавил этот код в свою обработку, только вырезав вызов функции "ПолучитьСписокКолонокТаблицыТовары()", которую я не знаю как у Вас работает. В итоге колонки построили, строки соответственно пустые. если строку добавить вручную, то перемещение отрабатывает
(27)
Теперь так?
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки = Неопределено Тогда
Возврат;
Иначе
НоваяСтрока = РодительТекущейСтроки.Родитель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяСтрока);
РодительТекущейСтроки.Строки.Удалить(ТекущаяСтрока);
КонецЕсли;
ПоказатьТеперь так?
Прикрепленные файлы:
(31) Процедура перемещения вверх по дереву
Процедура КнопкаВверхПоИерархииНажатие(Элемент)
ТекущаяСтрока = ЭлементыФормы.ГруппировкиНаПечать.ТекущаяСтрока;
Если ТекущаяСтрока = Неопределено Тогда
Сообщить("Не выбрана строка дерева");
Иначе
Если ТекущаяСтрока.Родитель = Неопределено Тогда
Сообщить("Верхний уровень. Выше нельзя");
Иначе
РодительТекущейСтроки = ТекущаяСтрока.Родитель;
Если РодительТекущейСтроки.Родитель = Неопределено Тогда
РодительРодителя = ГруппировкиНаПечать;
Перенести(ТекущаяСтрока,РодительРодителя);
Иначе
РодительРодителя = РодительТекущейСтроки;
Перенести(ТекущаяСтрока,РодительТекущейСтроки.Родитель);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура Перенести(Ветка,Куда)
НоваяВетка=Куда.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка);
Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
ДеревоЗначений.epf
(38) Ну судя по Вашему примеру(gif)
3 должна оказаться сперва вместо 2,а 2 вместо 3, Потом 3 вместо 1 и 1 вместо 3.
В итоге 3 на вверху,1 на второй строке, 2 на третьей..
А выходит она двигается по иеарирхии находясь на одной строке чтоли.
И всё это должно быть с учетом 1 колонки со вложенным значком (-)
3 должна оказаться сперва вместо 2,а 2 вместо 3, Потом 3 вместо 1 и 1 вместо 3.
В итоге 3 на вверху,1 на второй строке, 2 на третьей..
А выходит она двигается по иеарирхии находясь на одной строке чтоли.
И всё это должно быть с учетом 1 колонки со вложенным значком (-)
(41)ну тогда я окончательно запутался, что Вам нужно. Может картинки нарисуете тогда как хотите чтобы все работало? Нужно менять родительскую и дочернюю строку местами и не трогая при этом всю подчиненную иерархию. То есть Было такое дерево Строка1-Строка2-Строка3. Строку 2 хотим поднять на верх. И в итоге должны получить дерево Строка2-Строка1-Строка3?
Дерево значений вообще проблемное в плане обработки. Сколько раз с ним сталкивался, всегда городил костыли для решения каждой задачи. Я бы посоветовал не использовать дерево как элемент хранения данных, оставив ему только информативную (визуальную) часть. Т.е. таблица значений хранит данные, а дерево заполняется по данным строк таблицы.
Особенно это хорошо получается, если вместо дерева выводить мини-отчет СКД с источником данных - таблица значений. Возможности отображения значительно расширяются.
К тому же, иерархический список на форме уже давно реализую не с помощью дерева значений, а с помощью таблицы в связке с условным оформлением - у каждой строки отмечен уровень вложенности, а в УО отключается видимость части колонок таблицы по полю "уровень". Работает быстро и удобно.
Особенно это хорошо получается, если вместо дерева выводить мини-отчет СКД с источником данных - таблица значений. Возможности отображения значительно расширяются.
К тому же, иерархический список на форме уже давно реализую не с помощью дерева значений, а с помощью таблицы в связке с условным оформлением - у каждой строки отмечен уровень вложенности, а в УО отключается видимость части колонок таблицы по полю "уровень". Работает быстро и удобно.
(34) Да вот откопал старую конфигурацию. Изначально данные дерева хранятся в плоской таблице – в данном случае ТЧ обработки.
Снизу на форме как раз эта ТЧ для понимания как хранятся данные.
Снизу на форме как раз эта ТЧ для понимания как хранятся данные.
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот