Имя: Пароль:
1C
 
Скопировать справочник Номенклатура
0 program345
 
02.02.18
09:21
День добрый!
Есть задача Копирование папки справочника, со всеми элементами внутри.

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


Процедура КнопкаВыполнитьНажатие(Кнопка)
    Запрос = Новый Запрос("ВЫБРАТЬ
    |    БизнесПроекты.Ссылка
    |ИЗ
    |    Справочник.БизнесПроекты КАК БизнесПроекты
    |ГДЕ
    |    БизнесПроекты.Ссылка В ИЕРАРХИИ(&Группа)"
    );
    Запрос.УстановитьПараметр("Группа", Откуда);
    Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    СЗ = Новый СписокЗначений; //Будем запихивать туда родителей
    Пока Результат.Следующий() Цикл
        ТекСпр = Результат.Ссылка.ПолучитьОбъект();
        Если ТекСпр.Родитель = Откуда.Родитель Тогда //Копируем корень
            элементСправочника = ТекСпр.Скопировать();
            элементСправочника.Родитель = Куда;
            элементСправочника.Записать();
            СЗ.Добавить(элементСправочника.Ссылка);  //Запихали корневого родителя
        Иначе                                        //Копируем все остальное
            элементСправочника = ТекСпр.Скопировать();
            элементСправочника.Родитель = СЗ[СЗ.Количество()-1].Значение;
            элементСправочника.Записать();
            Если ТекСпр.ЭтоГруппа  Тогда
                СЗ.Добавить(элементСправочника.Ссылка); //А здесь запихиваем всех остальных родителей
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
1 lodger
 
02.02.18
09:31
у вас текст вопроса и текст программы противоречат друг другу. уточнений не добавите?
2 catena
 
02.02.18
09:31
элементСправочника.Родитель = СЗ[СЗ.Количество()-1].Значение;

А если на одном уровне будет несколько групп с подгруппами?
3 igorPetrov
 
02.02.18
09:32
(0) Вы уж разберитесь чего хотите.
4 Lexey_
 
02.02.18
09:33
(3) он хочет дописать одну строчку и чтоб всё заработало
5 igorPetrov
 
02.02.18
09:35
(4) а, ну тогда все понятно. Всё просто:

Сообщить("Всё хорошо. Всё работает.");
6 program345
 
02.02.18
09:42
(3) нужно Копирование папки справочника с подчиненными ей папками и элементами.
7 hhhh
 
02.02.18
09:58
(6) наверно как-то так

    Пока Результат.Следующий() Цикл
       Если ТекСпр.Родитель = Откуда.Родитель Тогда//Копируем корень

            элементСправочника = ТекСпр.Скопировать();
            элементСправочника.Родитель = Куда;
            элементСправочника.Записать();
//Запихали корневого родителя

        Иначе    
           ТекСпр = Результат.Ссылка.ПолучитьОбъект();

           элементСправочника = ТекСпр.Скопировать();
           элементСправочника.Родитель =  
        Справочники.Номенклатура.НайтиПоНаименованию(ТекСпр.Родитель.Наименование, Куда);
        элементСправочника.Записать();
       КонецЕСли;
    КонецЦикла;
8 hhhh
 
02.02.18
09:59
(7) ++  НайтиПоНаименованию(ТекСпр.Родитель.Наименование,, Куда);

или сколько там запятых, ну ты понял
9 program345
 
02.02.18
10:01
(8) спасибо, попробуемс
10 Сияющий в темноте
 
02.02.18
10:21
наверное,нужна или рекурсия или очередь,что быстрее,определяется опытным путем
очередь занимает меньше памяти,а рекурсия понятнее
11 program345
 
02.02.18
10:38
https://s.mail.ru/AqBm/5BJmkrLpo сделал такое для примера
https://s.mail.ru/8gz5/BZWBZnr6v скопировалось не все
12 program345
 
02.02.18
10:39
тест7 это папка "Куда"