![]() |
Модераторы: stron |
![]() ![]() ![]() |
|
Maкsim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
Есть код в нем рекурсивно происходит копирование группы справочника.
Можно ли обойтись без рекурсии? Я пробовал с помощью ТЗ но не могу восстановить иерархию? Жду советов. Перем ВидСпр; //*----*----*----*----*----*----*----*----*----*----*----*----*----*----* Процедура СкопироватьГруппу(НачГруппа, НовГруппа) НачСпр = СоздатьОбъект("Справочник."+ВидСпр); НовСпр = СоздатьОбъект("Справочник."+ВидСпр); НовСпр.ИспользоватьРодителя(НовГруппа); НачСпр.ИспользоватьРодителя(НачГруппа); НачСпр.ВыбратьЭлементы(1); Пока НачСпр.ПолучитьЭлемент()=1 Цикл Если НачСпр.Родитель<>НачГруппа Тогда Продолжить; КонецЕсли; Если НачСпр.ЭтоГруппа()=1 Тогда НовСпр.НоваяГруппа(); НовСпр.Наименование = НачСпр.Наименование; НовСпр.Записать(); СкопироватьГруппу(НачСпр.ТекущийЭлемент(), НовСпр.ТекущийЭлемент()); Продолжить; КонецЕсли; НовСпр.Новый(); НовСпр.Наименование = НачСпр.Наименование; НовСпр.Записать(); КонецЦикла; КонецПроцедуры //СкопироватьГруппу //*----*----*----*----*----*----*----*----*----*----*----*----*----*----* Процедура Сформировать() Если ПустоеЗначение(ВыбГруппа)=1 Тогда Возврат; КонецЕсли; Если ВыбГруппа.ЭтоГруппа()=0 Тогда Возврат; КонецЕсли; ВидСпр = ВыбГруппа.Вид(); Спр = СоздатьОбъект("Справочник."+ВидСпр); Спр.НоваяГруппа(); Спр.Наименование = "Копия "+ВыбГруппа.Наименование; Спр.Записать(); СкопироватьГруппу(ВыбГруппа, Спр.ТекущийЭлемент()); КонецПроцедуры //*----*----*----*----*----*----*----*----*----*----*----*----*----*----* Процедура ПриОткрытии() ВыбГруппа.ВыборГруппы(1); КонецПроцедуры //ПриОткрытии |
|||
|
||||
AkelaSQL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 14.9.2007 Где: Москва Репутация: 6 Всего: 7 |
А чем рекурсия-то не угодила?
|
|||
|
||||
Maкsim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
А может быть так что рекурсия приведет к зависанию системы?
Мне нужно несколько алгоритмов решений. |
|||
|
||||
AkelaSQL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 14.9.2007 Где: Москва Репутация: 6 Всего: 7 |
Рекурсию можно заменить только циклом, но у него может быть такой-же недостаток....
|
|||
|
||||
Maкsim |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 28.6.2010 Репутация: нет Всего: нет |
А можно пример цикла
|
|||
|
||||
AkelaSQL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 392 Регистрация: 14.9.2007 Где: Москва Репутация: 6 Всего: 7 |
Ну право нет у меня времени и желания рисовать код, особенно не имея полноты описания задачи.
Как я догадываюсь (возможно ошибаюсь) задача заключается в том, чтобы скопировать группу и все вышестоящие уровни справочника. Так вот, решение этой задачи может быть достигнуто различными способами. Один из вариантов Ваш с рекурсией, он наиболее компактен и понятен. Можно поступить по другому: 1. Получить СпрНач.ПолныйКод() элемента (группы). Там указаны коды всех вышестоящих уровней через "/" Распарсить эту строку, получить элементы по коду и создать их копии, я думаю не составит труда. 2. Использовать метод Уровень() и по его значению организовать цикл. Пока СпрНач.Уровень() > 0 Цикл ... Добавлено через 1 минуту и 19 секунд Или Пока ПустоеЗначение(Родитель) = 0 Цикл .... Добавлено через 1 минуту и 46 секунд ![]() |
|||
|
||||
SaschaL |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 880 Регистрация: 13.12.2006 Где: Челябинская обл г .Нязепетровcк Репутация: 8 Всего: 9 |
Можно просто:
Код приведен для 1С 7.7 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "1C: Предприятие, SAP, ERP и учётные системы" | |
|
Запрещается! 1. Обсуждение крэков, кейгенов и других подобных программ Пробуйте искать сами или обращайтесь в приват к участникам форума. Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения. Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...) 2. Давать ссылки на взломанные продукты
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |