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

СМОТРЕТЬ >>

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

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

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

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

  • **
  • Сообщений: 97
  • РЕПУТАЦИЯ: 2
  • КПД: 2%
  • Регистрация: 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С:Специалист
  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 68
  • КПД: 19%
  • Регистрация: 2015-10-16
  • Компания: Центр бизнес решений "ALT"
  • Профессия: Разработчик 1С
Re: Рекурсия
« Ответ #1: 09 Ноя 2015, 15:33 »
Получите сразу результат запроса в виде дерева и не мучайтесь)
Если я Вам помог, нажми - Спасибо!

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

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

Оффлайн Vladimir_Sh

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

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

    КонецЦикла;

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

Оффлайн DmitriyF

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

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

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

Оффлайн Vladimir_Sh

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

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

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

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

    КонецЦикла;

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

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

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

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

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

Оффлайн Vladimir_Sh

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

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

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

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


Теги:
 


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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

alex0402
95 Сообщений
oleg-x
93 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
68 Сообщений
Golickoff Golickoff
51 Сообщений
ilyay ilyay
45 Сообщений
AIFrame
42 Сообщений
wise wise
31 Сообщений
Амал
30 Сообщений
ab30ru
24 Сообщений
lansy
22 Сообщений

* Кто онлайн

  • Точка Гостей: 290
  • Точка Скрытых: 0
  • Точка Пользователей: 10
  • Точка Сейчас на форуме:

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal