как сделать копию группы

  • Автор темы Автор темы Guest
  • Дата начала Дата начала
G

Guest

Добрый день, есть справочник (поле код и наименование) в нем есть группа с под группами и элементами
Как можно сделать копию этой группы со всеми элементами и под группами.
Я пытался не чего не получилось. Платформа 1cv77
 
Добрый день, есть справочник (поле код и наименование) в нем есть группа с под группами и элементами
Как можно сделать копию этой группы со всеми элементами и под группами.
Я пытался не чего не получилось.
В чем именно выражается "я пытался"? Давайте конкретней: что делали, что не получилось.
P.S. Честное слово, скоро начну банить, если еще один расскажет, как он тужился над проблемой...
 
Маksim, ну скажите, что вы обычный пользователь... Ну спровоцируйте меня на гнев праведный!
 
Вот мой код:
перем текст;
Процедура Сформировать()
спр=СоздатьОбъект("Справочник.задача");
спрнов=СоздатьОбъект("Справочник.задача");

если ВыбСправочник.Выбран()=0 Тогда
Сообщить("Выберите группу");
Возврат;
Иначе

спр.ИспользоватьРодителя(ВыбСправочник.ТекущийЭлемент());
текст=СтрЗаменить(ВыбСправочник.Наименование,Прав(ВыбСправочник.Наименование,4),
Строка(ВыбЧисло));// нов.группа

спрнов.НоваяГруппа();
спрнов.Наименование=текст;
спрнов.Записать();
спрнов.НайтиПоНаименованию(текст);
этагруппа=спрнов.ТекущийЭлемент();
спрнов.ИспользоватьРодителя(этагруппа);


КонецЕсли;

спр.ВыбратьЭлементы();

Пока спр.ПолучитьЭлемент()=1 Цикл
если спр.ЭтоГруппа()=1 Тогда
спрнов.НоваяГруппа();
спрнов.Наименование=спр.Наименование
спрнов.Записать();

Иначе
спрнов.Новый();
спрнов.Наименование=спр.Наименование;
спрнов.Записать();


КонецЕсли;


КонецЦикла;

Получается что в новой группе создаются группы и все элементы
 
Так все-таки получается ? В чем тогда проблема ?
 
А проблема в том, что надо посмотреть в синтаксис-помощнике писание метода ВыбратьЭлементы()
 
Как я понял, элементы, которые изначально лежат в группах, которые лежит внутри выбранной группы, в копии попадают в корень новой группы и не раскладываются по отдельным группам

Алгоритмическая ошибка.
Как-то на с++ я делал нечто подобное для копирования файлов. Там идеально получилось использовать рекурсию
В 1С можно решить иначе
 
Можно обходить иерархически, и искать группу-родителя по коду.
 
Да у меня все элементы и группы попадают в корень новой группы, а мне нужно распределить их по родителям.
 
Выбирай группы в цикле (параметр метода выбратьэлементы()). Внутри выборки групп пускай цикл по выборке элементов.

второй вариант - таки запрос, ТЗ, её перебор. Иерархия там автоматом встает, кто родитель - понятно из предыдущей строчки.

Up. Насчет того что выбратьЭлементы позволяет выбрать только группы если параметр задать - это я погорячился.
 
второй вариант - таки запрос, ТЗ, её перебор. Иерархия там автоматом встает, кто родитель - понятно из предыдущей строчки

Т.е соэдаем ТЗ в ТЗ создаем колонку наименование, и родитель.

ТЗ.родитель=спр.родитель
 
Все же рекурсия - сильная вещь!!!

Прилагаю обработку
У себя протестил - работает
 

Вложения

Классно !
Чуть-чуть косметики - и первое место на конкурсе красоты
(Статус вывести, в частности, а то я всегда боюсь зацикливания рекурсий)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!