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

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

Гость
#1
Добрый день, есть справочник (поле код и наименование) в нем есть группа с под группами и элементами
Как можно сделать копию этой группы со всеми элементами и под группами.
Я пытался не чего не получилось. Платформа 1cv77
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#3
Добрый день, есть справочник (поле код и наименование) в нем есть группа с под группами и элементами
Как можно сделать копию этой группы со всеми элементами и под группами.
Я пытался не чего не получилось.
В чем именно выражается "я пытался"? Давайте конкретней: что делали, что не получилось.
P.S. Честное слово, скоро начну банить, если еще один расскажет, как он тужился над проблемой...
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#5
Маksim, ну скажите, что вы обычный пользователь... Ну спровоцируйте меня на гнев праведный!
 

Гость
#6
Вот мой код:
перем текст;
Процедура Сформировать()
спр=СоздатьОбъект("Справочник.задача");
спрнов=СоздатьОбъект("Справочник.задача");

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

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

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


КонецЕсли;

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

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

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


КонецЕсли;


КонецЦикла;

Получается что в новой группе создаются группы и все элементы
 

vbs

Well-Known Member
18.02.2007
1 708
3
#7
Так все-таки получается ? В чем тогда проблема ?
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#8
А проблема в том, что надо посмотреть в синтаксис-помощнике писание метода ВыбратьЭлементы()
 
H

Hryv

Гость
#9
Как я понял, элементы, которые изначально лежат в группах, которые лежит внутри выбранной группы, в копии попадают в корень новой группы и не раскладываются по отдельным группам

Алгоритмическая ошибка.
Как-то на с++ я делал нечто подобное для копирования файлов. Там идеально получилось использовать рекурсию
В 1С можно решить иначе
 

Гость
#11
Да у меня все элементы и группы попадают в корень новой группы, а мне нужно распределить их по родителям.
 

puh14

Well-Known Member
11.07.2008
1 412
0
#12
Выбирай группы в цикле (параметр метода выбратьэлементы()). Внутри выборки групп пускай цикл по выборке элементов.

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

Up. Насчет того что выбратьЭлементы позволяет выбрать только группы если параметр задать - это я погорячился.
 

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

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

ТЗ.родитель=спр.родитель
 
H

Hryv

Гость
#14
Все же рекурсия - сильная вещь!!!

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

Вложения

vbs

Well-Known Member
18.02.2007
1 708
3
#17
Классно !
Чуть-чуть косметики - и первое место на конкурсе красоты
(Статус вывести, в частности, а то я всегда боюсь зацикливания рекурсий)