Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
25 Мар 2017, 04:57
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Рекурсия  (Прочитано 1354 раз)

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

Оффлайн Пустовалов Артем

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2015-10-14
  • Сайт: 
  • Профессия: Ученик 1С
Рекурсия
« Первое сообщение: 09 Ноя 2015, 15:24 »
Всем привет) Есть код добавления строк в дерево значений)

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

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


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


Оффлайн Vladimir_Sh

  • 1С:Специалист
  • ****
  • Сообщений: 348
  • РЕПУТАЦИЯ: 65
  • КПД: 19%
  • Регистрация: 2015-10-16
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #1: 09 Ноя 2015, 15:33 »
Получите сразу результат запроса в виде дерева и не мучайтесь)
Если я Вам помог, нажми - Спасибо!

Оффлайн Пустовалов Артем

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2015-10-14
  • Сайт: 
  • Профессия: Ученик 1С
Re: Рекурсия
« Ответ #2: 09 Ноя 2015, 15:37 »
Получите сразу результат запроса в виде дерева и не мучайтесь)
Хочу попробывать рекурсивно.

Оффлайн Vladimir_Sh

  • 1С:Специалист
  • ****
  • Сообщений: 348
  • РЕПУТАЦИЯ: 65
  • КПД: 19%
  • Регистрация: 2015-10-16
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #3: 09 Ноя 2015, 15:47 »
Тогда что то подобное:

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

    КонецЦикла;

КонецПроцедуры
Если я Вам помог, нажми - Спасибо!

Оффлайн DmitriyF

  • *****
  • Сообщений: 668
  • РЕПУТАЦИЯ: 42
  • КПД: 6%
  • Регистрация: 2013-03-18
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #4: 09 Ноя 2015, 20:38 »
Пустовалов Артем, а зациклиани не боишься

Оффлайн Пустовалов Артем

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2015-10-14
  • Сайт: 
  • Профессия: Ученик 1С
Re: Рекурсия
« Ответ #5: 10 Ноя 2015, 08:17 »
Пустовалов Артем, а зациклиани не боишься
А какие у тебя еще есть предложения?)

Оффлайн Vladimir_Sh

  • 1С:Специалист
  • ****
  • Сообщений: 348
  • РЕПУТАЦИЯ: 65
  • КПД: 19%
  • Регистрация: 2015-10-16
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #6: 10 Ноя 2015, 08:51 »
В моем варианте зацикливания не будет, но при большом уровне вложенности может не хватить стека вызовов(по-моему так называется) и платформа закроется без каких либо предупреждений/ошибок
Если я Вам помог, нажми - Спасибо!

Оффлайн Пустовалов Артем

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2015-10-14
  • Сайт: 
  • Профессия: Ученик 1С
Re: Рекурсия
« Ответ #7: 10 Ноя 2015, 11:57 »
Тогда что то подобное:

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

    КонецЦикла;

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

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

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

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

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

Оффлайн Vladimir_Sh

  • 1С:Специалист
  • ****
  • Сообщений: 348
  • РЕПУТАЦИЯ: 65
  • КПД: 19%
  • Регистрация: 2015-10-16
  • Сайт: 
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #8: 10 Ноя 2015, 12:27 »
А что у Вас такое "ВыборкаКлюча"? При обходе я не вижу чтобы она изменялась. Предпологаю что это ТаблицаЗначений, если так то гуглите как преобразовать ТЗ в ДЗ в интернете очень много информации.
Если я Вам помог, нажми - Спасибо!

Оффлайн Пустовалов Артем

  • **
  • Сообщений: 90
  • РЕПУТАЦИЯ: 1
  • КПД: 1%
  • Регистрация: 2015-10-14
  • Сайт: 
  • Профессия: Ученик 1С
Re: Рекурсия
« Ответ #9: 10 Ноя 2015, 12:29 »
А что у Вас такое "ВыборкаКлюча"? При обходе я не вижу чтобы она изменялась. Предпологаю что это ТаблицаЗначений, если так то гуглите как преобразовать ТЗ в ДЗ в интернете очень много информации.

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


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
144 Сообщений
alex0402
113 Сообщений
Norfolk
51 Сообщений
LexaK
47 Сообщений
MuI_I_Ika MuI_I_Ika
37 Сообщений
друган
21 Сообщений
AsadRoman
20 Сообщений
alexandr_ll
19 Сообщений
Константин5825
18 Сообщений
MrLvovsky MrLvovsky
16 Сообщений

* Кто онлайн

  • Точка Гостей: 193
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal