Имя: Пароль:
1C
1С v8
Дерево значений
0 semiluki
 
28.07.11
18:52
Подскажите пожалуйста как найти максимальный уровень дерева значений
1 poligraf
 
28.07.11
18:54
ДЗ.КоличествоУровней()
2 Axel2009
 
28.07.11
19:09
(0) пробежаться по дереву с рекурсией
(1) нет такого.. =)
3 poligraf
 
28.07.11
19:11
(2) блин. через три релиза в платформе будет. поторопился
4 semiluki
 
28.07.11
19:15
Так првильно?

Уровень = 0;

ОбрататьДерево(ДеревоЗн.Строки);

Процедура ОбрататьДерево(Строки)
   Уровень = Уровень + 1;
   Для Каждого Строка Из Строки Цикл
       ОбрататьДерево(Строка.Строки);      
   КонецЦикла;    
КонецПроцедуры // ОбрататьДерево()
5 poligraf
 
28.07.11
19:17
(4) нет.
Уровень-то ты как получишь?
Либо переменную делать глобальной (в пределах модуля), что не айс, либо функция рекурсивную - которая будет возвращать уровень.
6 semiluki
 
28.07.11
19:23
А как првильно?
7 Axel2009
 
28.07.11
19:27
НулевойУровень = 0;МаксУровень = 0;

ОбрататьДерево(ДеревоЗн.Строки, НулевойУровень);

Процедура ОбрататьДерево(Строки, Знач Уровень)

   Уровень = Уровень + 1;
   Если МаксУровень < Уровень Тогда
       МаксУровень = Уровень;
   КонецЕсли;
   Для Каждого Строка Из Строки Цикл
       ОбрататьДерево(Строка.Строки, Уровень);      
   КонецЦикла;    
КонецПроцедуры // ОбрататьДерево()
8 Rie
 
28.07.11
19:28
(7) Можно и без глобальных переменных.
9 poligraf
 
28.07.11
19:30
(6) Думать же надо...
Вот 1С лениво запускать проверить и с СП сверится, но как-то так...

Функция КоличествоУровней(СтрокиДЗ)
  Если СтрокиДЗ.Количество() = 0 Тогда Возврат 0 КонецЕсли;

  КоличествоУровней = 0;
  Для Каждого СтрокаДЗ ИЗ СтрокиДЗ Цикл
      КоличествоУровней = Макс(КоличествоУровней(СтрокиДЗ), КоличествоУровней);
  КонецЦикла;

  Возврат КоличествоУровней + 1;
КонецФункции
10 poligraf
 
28.07.11
19:31
*КоличествоУровней = Макс(КоличествоУровней(СтрокаДЗ.Строки), КоличествоУровней);
11 poligraf
 
28.07.11
19:32
Да и начальное условие не надо вроде как...
В бесконечную рекурсию не впадет
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой