• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Guest

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

vitfil

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

vitfil

Маksim, ну скажите, что вы обычный пользователь... Ну спровоцируйте меня на гнев праведный!
 
G

Guest

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

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

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

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


КонецЕсли;

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

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

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


КонецЕсли;


КонецЦикла;

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

vbs

Так все-таки получается ? В чем тогда проблема ?
 
V

vitfil

А проблема в том, что надо посмотреть в синтаксис-помощнике писание метода ВыбратьЭлементы()
 
H

Hryv

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

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

unknown181538

Можно обходить иерархически, и искать группу-родителя по коду.
 
G

Guest

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

puh14

Выбирай группы в цикле (параметр метода выбратьэлементы()). Внутри выборки групп пускай цикл по выборке элементов.

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

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

Guest

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

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

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

Hryv

Все же рекурсия - сильная вещь!!!

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

Вложения

  • CopyGroup.rar
    9,3 КБ · Просмотры: 129
V

vbs

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

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