Имя: Пароль:
1C
1С v8
v8: Как правИльно обойти строки дерева значений
,
0 SherifSP
 
01.08.12
13:11
Есть функция которая обходит в цикле строки дерева значения, но она ничего не возвращает(

Функция ОбойтиУровеньДерева(Строки)
   
   ТаблицаВыбраныхКоманд = Новый ДеревоЗначений;
   ТаблицаВыбраныхКоманд.Колонки.Добавить("ВыбранаяКоманда", Новый ОписаниеТипов("СправочникСсылка.Команды"));

   Для каждого Строка из Строки Цикл
       Если Строка.Отметка Тогда
           НовСтрока = ТаблицаВыбраныхКоманд.Строки.Добавить();
           НовСтрока.ВыбранаяКоманда = Строка.Команда;
       КонецЕсли;
        ОбойтиУровеньДерева(Строка.Строки);
   КонецЦикла;
     
   Возврат ТаблицаВыбраныхКоманд;
   
КонецФункции
1 izekia
 
01.08.12
13:15
2 SherifSP
 
01.08.12
13:21
(1) Для инд = 0 по 9 Цикл
      д.Строки.Добавить().Значение = "" + инд;
  КонецЦикла;
перебор строк в ДЗ?
3 SherifSP
 
01.08.12
13:25
(1)Переделал только все равно не возвращает ничего

ТаблицаВыбраныхКоманд = Новый ДеревоЗначений;
  ТаблицаВыбраныхКоманд.Колонки.Добавить("ВыбранаяКоманда", Новый ОписаниеТипов("СправочникСсылка.Команды"));
 
  Для каждого Строка из Строки Цикл
       Если Строка.Отметка Тогда
           НовСтрока = ТаблицаВыбраныхКоманд.Строки.Добавить();
           НовСтрока.ВыбранаяКоманда = Строка.Команда;
       КонецЕсли;
   КонецЦикла;

  стек = Новый Массив;
  стек.Добавить(ТаблицаВыбраныхКоманд);
  Пока стек.Количество() > 0 Цикл
      Для каждого строка Из стек[0].Строки Цикл
          Сообщить(строка.Значение);
          Если строка.Строки.Количество() > 0 Тогда
              стек.Добавить(строка);
          КонецЕсли;
      КонецЦикла;
      стек.Удалить(0);
  КонецЦикла;
 
  Возврат ТаблицаВыбраныхКоманд;
4 Reset
 
01.08.12
13:29
Бред какой-то.
Чего хочет получить автор? Копию дерева? Так есть метод Скопировать
5 DrShad
 
01.08.12
13:31
так у тя каждый раз создается новое Дерево
6 SherifSP
 
01.08.12
13:38
Я хочу пройти по строкам дерева значений проверить если есть отметка тогда добавить строку Команда
7 SherifSP
 
01.08.12
13:38
Рекурсивно не получается
8 Fish
 
01.08.12
13:40
(7) "Для того, чтобы понять рекурсию, надо понять рекурсию" (с)
С твоим подходом и не получится.
9 anddro
 
01.08.12
13:42
(6) а ТаблицаВыбраныхКоманд - это должно быть дерево с такой же структурой или просто список отмеченных команд?
10 H A D G E H O G s
 
01.08.12
13:43
"Героиновый рай, и они там вдвоём, И мы, наверное, туда попадём...."

v8: Обойти дерево значений извращенно.
11 H A D G E H O G s
 
01.08.12
13:44
Обойти дерево полностью, чтобы рекурсией мозг не насиловать:

ДеревоЗначений.Колонки.Добавить("Числовая",Новый ОписаниеТипов("Число"));
СтруктураПоиска=Новый Структура("Числовая",0);

МассивВсехСтрок=ДеревоЗначений.Строки.НайтиСтроки(СтруктураПоиска,Истина);

найти пометки
СтруктураПоиска=Новый Структура("Отметка",Истина);

МассивВсехСтрок=ДеревоЗначений.Строки.НайтиСтроки(СтруктураПоиска,Истина);
12 SherifSP
 
01.08.12
13:48
(0)
ТаблицаВыбраныхКоманд = Новый ДеревоЗначений;
   ТаблицаВыбраныхКоманд.Колонки.Добавить("ВыбранаяКоманда", Новый ОписаниеТипов("СправочникСсылка.Команды"));
   
   Для каждого Строка из Строки Цикл
       Для Каждого Стр из Строка.Строки Цикл
           Если Стр.Отметка Тогда
               НовСтрока = ТаблицаВыбраныхКоманд.Строки.Добавить();
               НовСтрока.ВыбранаяКоманда = Стр.Команда;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   Возврат ТаблицаВыбраныхКоманд;

Шериф не майся дурью, вот посмотри что я тебе приготовил)
13 izekia
 
01.08.12
13:48
пациент не в первый раз говорит сам с собой, это очень подозрительно
14 SherifSP
 
01.08.12
13:49
(12) спс работает
15 Птица
 
01.08.12
13:49
(7) см(5)
16 SherifSP
 
01.08.12
13:49
(13)))
17 SherifSP
 
01.08.12
13:50
(15)Там да, теперь норм
18 SherifSP
 
01.08.12
13:51
(13)У меня появляется раздвоение личности, когда морально тяжело
19 anddro
 
01.08.12
13:53
судя по (12) надо только список команд. Далее (12) будет работать, только в случае, когда отметки всегда на втором уровне.

ТаблицаВыбраныхКоманд = Новый ДеревоЗначений;
ТаблицаВыбраныхКоманд.Колонки.Добавить("ВыбранаяКоманда", Новый ОписаниеТипов("СправочникСсылка.Команды"));
Для Каждого НайденнаяСтрока Из Строки.НайтиСтроки(Новый Структура("Отметка", Истина), Истина) Цикл
   ТаблицаВыбраныхКоманд.Строки.Добавить().ВыбранаяКоманда = НайденнаяСтрока.Команда;
КонецЦикла;

Так тоже будет работать, хотя зачем ТаблицаВыбраныхКоманд это дерево значений, я понять не могу, ну да автору виднее.
20 SherifSP
 
01.08.12
13:57
(19)Задание такое(
21 SherifSP
 
01.08.12
13:57
(19)Моя бы воля, все в таблице значений сделал
22 anddro
 
01.08.12
13:59
(21) а ты точно уверен, что тебе не надо копировать структуру исходного дерева? Ни (12) ни (19) этого не делают. Требование, что результат - это дерево, как бы намекает.
23 SherifSP
 
01.08.12
14:07
(22)Нет
24 SherifSP
 
01.08.12
14:07
(22)Как проверить строку дерева значений на заполненность? ДеревоЗначения.Строки = Неопределено?
25 H A D G E H O G s
 
01.08.12
14:08
ДеревоЗначения.Строки.Количество()=0
26 SherifSP
 
01.08.12
14:08
(24)Не в цикле
27 anddro
 
01.08.12
14:09
(24) а что является критерием "заполненности"?
28 Fish
 
01.08.12
14:10
(27) Ну как же. Строка может быть пустой, полупустой, неполной, полной и переполненной :))
29 SherifSP
 
01.08.12
14:13
(28)Она или есть, или ее нету)
30 anddro
 
01.08.12
14:14
(29) тогда чем не устраивает (25)?
31 Anastasiy
 
01.08.12
14:15
(18) Блютус - и у нас всё стало хорошо)))
32 SherifSP
 
01.08.12
14:16
(30)Устраивает
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.