Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 09:29

Обход Дерева Значений по подуровням

Автор Funt432286, 14 ноя 2024, 15:19

0 Пользователей и 1 гость просматривают эту тему.

Funt432286

Доброго времени суток!

Есть на форме поле дерево значений, оно заполнено уровнями и подуровнями! Когда я обхожу весь список, система просматривает только основной уровень, подуровень обходить не хочет!

Для Каждого Стр Из ТЗ_ПантоныНомераТЗ.Строки Цикл
Если Стр.СсылкаРЗ = ВыбраннаяСтрока.СсылкаРЗ Тогда
Стр.СтатусКраски = "1111";
КонецЕсли;
КонецЦикла;

Подскажите пожалуйста, как просмотреть и уровни и подуровни при обходе?

fruitella

СтрокиПервогоУровня = НаименованиеТвоегоДерева.ПолучитьЭлементы();

Для Каждого СтрокаПервогоУровня Из СтрокиПервогоУровня Цикл

СтрокиВторогоУровня = СтрокаПервогоУровня.ПолучитьЭлементы();

Для Каждого СтрокаВторогоУровня Из СтрокиВторогоУровня Цикл

 
КонецЦикла;

//И тд.
КонецЦикла;


Funt432286

fruitella, у меня обычное предложение

УрНомерТЗ = ТЗ_Материал.ПолучитьЭлементы();
Для Каждого СтрТЗ Из УрНомерТЗ Цикл
УрПантон = СтрТЗ.ПолучитьЭлементы();
СтрТЗ.СтатусКраски = "1111";
Для Каждого СтрПантон Из УрПантон Цикл
Если СтрПантон.СсылкаРЗ = ВыбраннаяСтрока.СсылкаРЗ Тогда
СтрПантон.СтатусКраски = "1111";
КонецЕсли;
КонецЦикла;
КонецЦикла;


ошибка при отладке
Метод объекта не обнаружен (ПолучитьЭлементы)
{Обработка.МатериальноеОбеспечение.Форма.МатериалСклад.Форма(1035)}: УрНомерТЗ = ТЗ_Материал.ПолучитьЭлементы();

LexaK

Funt432286, Можно написать процедуру рекурсивного обхода
(что такое Рекурсия - знаете?)
если помогло нажмите: Спасибо!

Максим75

Funt432286, ну значит ТЗ_Материал - не данные формы дерево

LexaK

а все дерево надо обойти или только одну ветку?
если помогло нажмите: Спасибо!

Funt432286

LexaK, все дерево и если реквизит совпадет, то его ветку!

Funt432286

Максим75, нет, это элемент формы

LexaK

Funt432286, вот пример процедуры перебора ВСЕХ элементов дерева по индексу
незвисимо от положения в ветках
(измените условие и свой код вставьте)
&НаКлиенте
Функция НайтиИндексТекущийЗапрос()

лкСмещение = 0;
лкЭлементы = ДеревоЗапросов.ПолучитьЭлементы();
Если лкЭлементы.Количество() > 0 Тогда
лкСмещение = лкЭлементы[0].ПолучитьИдентификатор();
КонецЕсли;

//новый поиск текущего в ДЗ, простой перебор по индексам, На Клиенте, без рекурсии
Для лкИндекс = лкСмещение По лкСмещение + 1000 Цикл //по возможный Максимум элементов
лкСтр = ДеревоЗапросов.НайтиПоИдентификатору(лкИндекс);
Если лкСтр <> Неопределено и лкСтр.ТекущийЗапрос = Истина Тогда
Возврат лкИндекс;
КонецЕсли;
КонецЦикла;
//ни чего не нашли
Возврат Неопределено;

КонецФункции
если помогло нажмите: Спасибо!

Funt432286

LexaK, в обычных приложениях нет ПолучитьЭлементы(); к сожалению

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск