Имя: Пароль:
1C
1С v8
Обход дерева
0 Kamich
 
16.11.16
16:14
Добрый день форумчане!


Подскажите плз для чайника, как в массиве обойти дерево?

Например есть данные

-Автомобили
  - Мазда
  - Кия
  - БМВ
-Мотоциклы
  - Сузуки
  - Ямаха

Нужно получить следующее:

  Мазда
  Кия
  БМВ
  Сузуки
  Ямаха
1 Волшебник
 
модератор
16.11.16
16:15
в массиве нет деревьев
2 DrShad
 
16.11.16
16:16
обходи дерево и заполняй массив,  а еще лучше получи его из запроса формирующего дерево
3 Про100Филя
 
16.11.16
16:17
(0) процедура которая вызывает сама себя если заполнен родитель, если нет то записывай элемент в массив.
4 Kamich
 
16.11.16
16:18
В Массив передается значение,где проставлены галочки
5 DrShad
 
16.11.16
16:18
(3) а проверять на вхождение в массив?
и не процедура а рекурсивная функция
6 Kamich
 
16.11.16
16:19
(5) Можно подробнее?
7 DrShad
 
16.11.16
16:19
(4) продолжайте наблюдения
8 DrShad
 
16.11.16
16:20
(6) о чем?
9 Ёпрст
 
16.11.16
16:20
(4) Посмотри, там еще в структуру что-то должно записываться и в сооответствие на выходе.
10 Про100Филя
 
16.11.16
16:20
что то типо
Процедура ОбходДерева(Строка= неопределено)
Для каждого НоваяСтрока из ?(Строка=неопределено, Дерево.Строки, Строка.Строки) Цикл
Если ЗначениеЗаполнено(НоваяСтрока.Родитель) Тогда
ОбходДерева(НоваяСтрока)
Иначе
Массив.Добавить(НоваяСтрока);
КонецЕсли
КонецЦикла
КонецПроцедуры
11 Про100Филя
 
16.11.16
16:22
(5) может массив глобальный и возвращать ничего не надо, про проверку ничего не было, обход дерева строки с одинаковым названием будут считаться разными.
12 DrShad
 
16.11.16
16:24
(10) какой ужас
13 Про100Филя
 
16.11.16
16:34
(12) что не так?
14 DrShad
 
16.11.16
16:39
(13) все, а самое главное на выходе что?
15 olegves
 
16.11.16
16:44
дерево надо обходить сначала по солонь,а затем на солонь, чтобы голова не закружилась
16 Про100Филя
 
16.11.16
17:06
(14) Процедура какой выход? Перем Массив; и перед вызовом
очистить.
17 youalex
 
16.11.16
17:16
(10) *Если ЗначениеЗаполнено(НоваяСтрока.Родитель) Тогда*

тут, скорее,  
Если НоваяСтрока.Строки.Количество() > 0 //
AdBlock убивает бесплатный контент. 1Сергей