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

Рекурсия

Автор Пустовалов Артем, 09 ноя 2015, 15:24

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

Пустовалов Артем

Всем привет) Есть код добавления строк в дерево значений)

Пока Выборка.Следующий() Цикл
      
      Если Выборка.ключСвязи = 0 Тогда
         Строка = Дерево.Строки.Добавить();   
         Строка.Номенклатура = Выборка.Номенклатура;
         Строка.КлючСвязи = Выборка.КлючСвязи;
         Строка.КлючСтроки = Выборка.КлючСтроки
      Иначе
         
         Для Каждого Строка из Дерево.Строки Цикл
            
            Если Строка.КлючСтроки = Выборка.КлючСвязи Тогда
               Строка1 = Строка.Строки.Добавить();
               Строка1.Номенклатура = Выборка.Номенклатура;
               Строка1.КлючСвязи = Выборка.КлючСвязи;
               Строка1.КлючСтроки = Выборка.КлючСтроки;
            Иначе
               
               Для Каждого Строка1 из Строка.строки Цикл
                  
                  Если Строка1.КлючСтроки = Выборка.КлючСвязи Тогда
                     Строка2 = Строка1.Строки.Добавить();
                     Строка2.Номенклатура = Выборка.Номенклатура;
                     Строка2.КлючСвязи = Выборка.КлючСвязи;
                     Строка2.КлючСтроки = Выборка.КлючСтроки;
                  Иначе
                     Для Каждого Строка2 из Строка1.строки Цикл
                        Если Строка2.КлючСтроки = Выборка.КлючСвязи Тогда
                           Строка3 = Строка2.Строки.Добавить();
                     Строка3.Номенклатура = Выборка.Номенклатура;
                     Строка3.КлючСвязи = Выборка.КлючСвязи;
                     Строка3.КлючСтроки = Выборка.КлючСтроки;
                  КонецЕсли;
                  КонецЦикла;

                  КонецЕсли ;
               КонецЦикла ;
            КонецЕсли;
         КонецЦикла ;
         
      КонецЕсли;
      


Но уровней много. Погуглил - Выход рекурсия. Но ни как не разберусь как ее сделать.Как можно реализовать Эту рекурсию.

Vladimir_Sh

Получите сразу результат запроса в виде дерева и не мучайтесь)
Если я Вам помог, нажми - Спасибо!

Пустовалов Артем

Цитата: Vladimir_Sh от 09 ноя 2015, 15:33
Получите сразу результат запроса в виде дерева и не мучайтесь)
Хочу попробывать рекурсивно.

Vladimir_Sh

Тогда что то подобное:

Процедура ОбходДереваЗначений(СтрокаДерева)
   
    Для Каждого Строка Из СтрокаДерева.Строки Цикл
       
         //Что то делаем
       
         ОбходДереваЗначений(Строка);

    КонецЦикла;

КонецПроцедуры

Если я Вам помог, нажми - Спасибо!

DmitriyF

Пустовалов Артем, а зациклиани не боишься

Пустовалов Артем

Цитата: DmitriyF от 09 ноя 2015, 20:38
Пустовалов Артем, а зациклиани не боишься
А какие у тебя еще есть предложения?)

Vladimir_Sh

В моем варианте зацикливания не будет, но при большом уровне вложенности может не хватить стека вызовов(по-моему так называется) и платформа закроется без каких либо предупреждений/ошибок
Если я Вам помог, нажми - Спасибо!

Пустовалов Артем

Цитата: Vladimir_Sh от 09 ноя 2015, 15:47
Тогда что то подобное:

Процедура ОбходДереваЗначений(СтрокаДерева)
   
    Для Каждого Строка Из СтрокаДерева.Строки Цикл
       
         //Что то делаем
       
         ОбходДереваЗначений(Строка);

    КонецЦикла;

КонецПроцедуры


Не работает почему то Наверное я что то не так делаю) Вот мой код

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

       ОбходДереваЗначений(Строка,ВыборкаКлюча);
       КонецЕсли
   КонецЦикла;
КонецПроцедуры

Если засовывать туда строку то тут Для Каждого Строка Из СтрокаДерева.Строки Цикл Строка не определена

Vladimir_Sh

А что у Вас такое "ВыборкаКлюча"? При обходе я не вижу чтобы она изменялась. Предпологаю что это ТаблицаЗначений, если так то гуглите как преобразовать ТЗ в ДЗ в интернете очень много информации.
Если я Вам помог, нажми - Спасибо!

Пустовалов Артем

Цитата: Vladimir_Sh от 10 ноя 2015, 12:27
А что у Вас такое "ВыборкаКлюча"? При обходе я не вижу чтобы она изменялась. Предпологаю что это ТаблицаЗначений, если так то гуглите как преобразовать ТЗ в ДЗ в интернете очень много информации.

ВыборкаКлюча это выборка из запроса

Теги:

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

Рейтинг@Mail.ru

Поиск