- Как у строки дерева поменять родителя?
- Как в дереве значений строку перекинуть в другой родитель?
- Еще в этой же категории
- Работа с деревом значений в 1С
- Дерево значений
- Дерево значений на форме
- Заполнение дерева значений
- Обход дерева значений
- Как свернуть и развернуть дерево значений
- Как удалить строку и очистить дерево значений
- Запрос и дерево значений
- Дерево значений в таблицу значений и обратно
- Отбор в дереве значений
Как у строки дерева поменять родителя?
есть большое дерево (порядка 100тыс элементов) как перетащить ветку целиком к другому узлу?
копировать и потом удальть — не камильфо.
СтрокаДереваЗначений (ValueTreeRow)
Родитель (Parent)
Использование:
Процедура ПеренестиТекущуюЕдиницуВРодителя(СсылкаЧтоКидаем,СсылкаКудаКидаем)
Если СсылкаКудаКидаем=Неопределено Тогда
СсылкаКудаКидаем=Справочники.ЕдиницыКонфигурации.ПустаяСсылка();
КонецЕсли;
ОбъектЧтоКидаем=СсылкаЧтоКидаем.ПолучитьОбъект();
ОбъектЧтоКидаем.Родитель=СсылкаКудаКидаем.Ссылка;
ОбъектЧтоКидаем.Записать();
ОбновитьЕдиницыКонфигурации(Новый Массив);
КонецПроцедуры
(8) Предлагаешь выгрузить дерево в иерархический справочник, поменять родителя, загрузить дерево из иерархического справочника?
(10) в моей задачи так и требовалось, т.к. потом отчеты вывожу иерархические 🙂 иерархию мне надо было сохранять (компы и их конфигурация)
(+11) потом удобно списывать (перемещать)всё это оборудование с программным обеспечением разом за один мах и иерархия сохраняется причем :).
столкнулся с аналогичной проблемой. У меня иерархия файловой системы, приходиться удалять и добавлять заново.
(14) Если у переносимой ветки нет подстрок, то этого достаточно, иначе между заполнением и удаление вставить цикл по подстрокам с рекусивным вызовом
СкопироватьУзелДерева (мСтрокаДерева.Строки, НайденаяСтрока);
НайденаяСтрока.Родитель.Строки.Удалить(НайденаяСтрока);
Процедура СкопироватьУзелДерева (СтрокиПолучателя, УзелИсточник)
НоваяСтрока = СтрокиПолучателя.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, УзелИсточник);
Для каждого эл Из УзелИсточник.Строки Цикл
СкопироватьУзелДерева (НоваяСтрока.Строки, эл);
КонецЦикла;
КонецПроцедуры
Процедура Перенести(Ветка,Куда)
НоваяВетка=Куда.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка);
Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
Параметры: Ветка,куда — строки дерева значений
Кстати, согласен, сначала скопировать все, а потом удалить только голову, вероятно, немного быстрее будет, чем всех дочек поэлементно удалять.
Процедура Скопировать(Ветка,Куда)
НоваяВетка=Куда.Строки.Добавить();
ЗаполнитьЗначенияСвойств(НоваяВетка,Ветка);
Для каждого ПодСтрока из Ветка.Строки цикл Перенести(Подстрока,НоваяВетка); КонецЦикла;
КонецПроцедуры
Процедура Перенести(Ветка,Куда)
Скопировать(Ветка,Куда);
Ветка.Родитель.Строки.Удалить(Ветка);
КонецПроцедуры
(0)может надо поменять структуру данных?
например использовать не дерево а структуру и ТЗ? или еще как
если речь о дереве значений то использовать метод ПереместитьУзел(УзелПриемник, УзелПеремещения)
и тот и другой узел может являться просто корнем пустого дерева, корнем не пустого дерева, строкой дерева, узлом дерева.
Всякий опытный программист имеет в своем арсенале этот метод для разных систем программирования, встроенного такого метода, как правило, нет.
(23) я бы проще обьяснил. в дереве каждая строка может иметь или не иметь родителя-подчиненных. Дальше просто включать здравый смысл.
дерево и каждая его строка — это коллекции вложенных строк, дальше здравый смысл)
Источник
Как в дереве значений строку перекинуть в другой родитель?
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » — конкретный продукт, который выпускает компания 1С . Что такое Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = » Иванов Иван Иванович» ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = » » ; Excel файл как Внешний источник данных 16
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа » Внешние источники данных» и назовем его просто » Excel» . https://helpf.pro/uploads/img V82.COMConnector.1: Не найдена лицензия COM-соединением 1
При подключении из одной базы к другой через COM внезапно стала появляться следующая ошибка: «V82.COMConnector.1: Не найдена лицензия COM-соединением», хотя никаких изменений на серверах не делалось. Релиз платформы был 8.2.13. Обновил до 14-го – не База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Посмотреть все результаты поиска похожих
Еще в этой же категории
Примеры работы с Деревом значений в УП 11
Так как работа с ДеревомЗначений и ТаблицейЗначений в данном контексте практически не отличается, в примере будет использоваться ДеревоЗначений, все тоже самое за исключением иерархии применимо и к ТаблицеЗначений. Как известно, в платформе 1С 8.1 н Дерево значений в таблицу значений или в табличную часть и обратно 9
Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранени Преобразование дерева значений в таблицу значений и обратно 6
Хочу поделиться с посетителями сайта своим подходом к преобразованию таблицы значений в дерево значений и обратно. Вообще, при разработке отраслевой задачи, была необходимость почти во всех документах, выводить информацию в виде дерева и хранить ее Как Свернуть, Развернуть узлы Дерева значений на форме? 4
Как программно свернуть/развернуть дерево значений на управляемой форме? Желательно НаКлиенте. КоллекцияЭлементовДерева=ДеревоНоменклатуры.ПолучитьЭлементы(); //Свернуть дерево Для Каждого Строка Из КоллекцияЭлементовДерева Цикл ИдентификаторСт ДеревоЗначений в ТекстовыйДокумент 3
// Выводит данные ДереваЗначений в ТекстовыйДокумент, пригодный к рассмотрению в отладчике, окне сообщений и показу. // // Параметры: // рВетка — дерево значений, подлежащее выводу. Может иметь почти любую глубину иерархии, количество и тип ко Посмотреть все в категории Работа с Деревом Значений
Источник
Работа с деревом значений в 1С
В последнее время аномально часто мне в работе попадалось дерево значений, поэтому решил написать на эту тему статью.
Попробую рассмотреть способы решения основных задач связанных с деревом значений, при этом постараюсь писать «без воды».
Дерево значений
Из названия объекта понятно, что дерево значений служит для хранения/отображения какой-либо иерархической информации. Каждая строка дерева значений может иметь какое-то количество подчиненных строк, при этом такие операции как поиск, сортировка, подсчет итогов можно проводит с учетом уровня иерархии и подчиненных строк.
Кроме этого, каждая строка дерева значений имеет свойства «Родитель» и «Строки».
Дерево значений на форме
Визуальное представление дерева значений обеспечивает элемент «Табличное поле».
Заполнение дерева значений
При заполнении дерева значений нужно помнить, что сам объект «ДеревоЗначений» и все его строки имеют свойство «Строки»и добавление новых строк на любом уровне дерева осуществляется через это свойство.
Сам же объект «ДеревоЗначений» имеет еще и свойство «Колонки», которое ничем не отличается от аналогичного свойства у таблицы значений.
Небольшой пример программного заполнения таблицы значений для управляемых форм:
Обход дерева значений
Обход всех строк дерева значений делается при помощи рекурсии, вот так будет выглядеть код для обхода дерева созданного в примере выше:
Как свернуть и развернуть дерево значений
Сворачивается и разворачивается дерево значений очень просто.
Привел три примера: для сворачивания текущей строки, для сворачивания строк верхнего уровня, для сворачивания вообще всех строк (рекурсия).
Два примера: для разворачивания текущей строки и для разворачивания всех строк. У метода «Развернуть» есть дополнительный параметр, который позволяет указать нужно ли разворачивать подчиненные строки.
Как удалить строку и очистить дерево значений
Тут опять же все просто, нужно помнить, что при удалении/очистке строки, все подчиненные строки удаляются.
Точно также можно очистить от подчиненных элементов другую другую строку.
Удалить строку дерева значений не сложнее — нужно только знать ее индекс:
Запрос и дерево значений
Результат выполнения запроса очень легко преобразовать в дерево значений, для этого нужно воспользоваться методом «Выгрузить» и указать параметр «ТипОбхода» отличным от того, что стоит по умолчанию, т.е. «ПоГруппировкам» или «ПоГруппировкамСИерархией».
Если на форме имеется реквизит «ДеревоЗначений» и связанный с ним визуальный элемент, то можно сделать примерно так:
Причем полного совпадения колонок и типов не требуется — лишние колонки будут просто отброшены, а колонки с различными типами будут заполнены пустыми значениями.
Дерево значений в таблицу значений и обратно
Преобразовать дерево значений в таблицу значений и наоборот достаточно просто, ведь дерево значений это та же таблица значений, но с дополнительной колонкой — «Родитель». У меня есть отдельная статья о том как преобразовать дерево значений в таблицу значений и обратно.
Отбор в дереве значений
Стандартного отбора в дереве значений не предусмотрено. Так получилось потому, что непонятно как разрешать ситуацию, когда родительский элемент не удовлетворяет условию отбора, а подчиненные ему элементы удовлетворяют.
Таким образом, если Вам нужно реализовать отбор в дереве значений, то начать нужно с решения именно этой проблемы. А уже после этого можно придумать несколько способов реализовать задуманное.
Первый способ — накладывать отбор до вывода дерева значений (в запросе например). Это не классический отбор, но в тех случаях когда этот способ применим, то следует применять именно его, так как это почти всегда быстрее и правильнее чем что-либо другое.
Второй способ — перебор всех строк дерева значений. Описывать здесь особенно нечего, нужно просто взять обход дерева значений, проверять каждую строку на соответствие условию отбора и удалять лишние строки.
Еще один способ заключается в том, чтобы преобразовать дерево значений в таблицу значений, сделать отбор в таблице значений, проконтролировать результат (почистить «хвосты» — строки, родитель которых не удовлетворил условию отбора) и выполнить обратное преобразование в дерево значений.
На этом все, рассказал все, что знал, надеюсь мне удалось сэкономить Вам немного времени.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
(оценок: 36, средняя оценка: 4,64 из 5)
Источник