новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Помощь с деревом значений

    • #1
    • 03.10.2025 13:01
    0
    Добрый день, начал изучать дерево значений. Интересует поиск по дереву. Код получился таким, но работает только для первого уровня, как добавить поиск и по второму уровню? [CODE]ДеревоЗначений = РеквизитФормыВЗначение("Типы"); Корень1 = ДеревоЗначений.Строки.Добавить(); Корень1.Наименование = "Произвольный"; Корень1.Картинка = БиблиотекаКартинок.ТипНеопределено; //Корень1.Тип = БиблиотекаКартинок.ТипНеопределено; Корень2 = ДеревоЗначений.Строки.Добавить(); Корень2.Наименование = "Число"; Корень2.Картинка = БиблиотекаКартинок.ТипЧисло; Корень3 = ДеревоЗначений.Строки.Добавить(); Корень3.Наименование = "Строка"; Корень3.Картинка = БиблиотекаКартинок.ТипСтрока; Корень4 = ДеревоЗначений.Строки.Добавить(); Корень4.Наименование = "Дата"; Корень4.Картинка = БиблиотекаКартинок.ТипДата; Корень5 = ДеревоЗначений.Строки.Добавить(); Корень5.Наименование = "Булево"; Корень5.Картинка = БиблиотекаКартинок.ТипБулево; //********** КореньСправочники = ДеревоЗначений.Строки.Добавить(); КореньСправочники.Наименование = "СправочникСсылка"; КореньСправочники.Картинка = БиблиотекаКартинок.Справочник; Для Каждого Спр Из Метаданные.Справочники Цикл Справочник = КореньСправочники.Строки.Добавить(); Справочник.Наименование = Спр.Имя; Справочник.Картинка = БиблиотекаКартинок.Справочник; КонецЦикла; ДерЗнач = РеквизитФормыВЗначение("Типы"); ПоискТипа = "Авансовый"; МассивУдаляемыхСтрок = Новый Массив; Для Каждого Строка_Рек Из ДерЗнач.Строки Цикл //Первый уровень - работает КолВоСимвол = СтрНайти(НРег(Строка_Рек.Наименование), НРег(ПоискТипа), НаправлениеПоиска.СНачала); Если КолВоСимвол = 0 Тогда Если Строка_Рек.Наименование <> "СправочникСсылка" Тогда МассивУдаляемыхСтрок.Добавить(Строка_Рек); КонецЕсли; КонецЕсли; //Первый уровень - работает КонецЦикла; //Первый уровень - работает Для Каждого ЭлементМассива Из МассивУдаляемыхСтрок Цикл Если ЭлементМассива.Родитель = Неопределено тогда ДерЗнач.Строки.Удалить(ЭлементМассива); Иначе КонецЕсли; КонецЦикла; //Первый уровень - работает ЗначениеВРеквизитФормы(ДерЗнач, "Типы");[/CODE]
    • #2
    • 03.10.2025 14:07
    0
    Решено!
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться