Имя: Пароль:
1C
1С v8
Присвоить родителя
0 urank
 
30.04.13
12:42
Здравствуйте, в одной дб есть два иерархических справочника спр1 и спр2, нужно рекурсивно скопировать все элементы первого во второй с сохранением вложенности. Делаю так
[code]
&НаКлиенте
Процедура ВыполнитьНаСервере1(Команда)
     Рекурсия();
КонецПроцедуры

&НаСервере
Процедура Рекурсия(Группа=Неопределено)
//    Перем РодительСпр1;
 Выборка=Справочники.Спр1.Выбрать(?(Группа=Неопределено,Справочники.Спр1.ПустаяСсылка(),Группа));
 Пока Выборка.Следующий() Цикл
     
     Если Выборка.ЭтоГруппа Тогда
     НоваяГруппа = Справочники.Спр2.СоздатьГруппу();
     НоваяГруппа.Родитель = Выборка.Родитель.Наименование;
     НоваяГруппа.Наименование = Выборка.Ссылка.Наименование;
     НоваяГруппа.Код = Выборка.Ссылка.Код;
     НоваяГруппа.Записать();
     Иначе
     НоваяЗапись = Справочники.Спр2.СоздатьЭлемент();
     НоваяЗапись.Родитель = Выборка.Родитель.Наименование;
     НоваяЗапись.Наименование = Выборка.Ссылка.Наименование;
     НоваяЗапись.Код = Выборка.Ссылка.Код;
     НоваяЗапись.Записать();
 КонецЕсли;
 
Если Выборка.Родитель <> Справочники.Спр1.ПустаяСсылка() Тогда
    РодительСпр1 = Выборка.Родитель;
    Если РодительСпр1 <> Справочники.Спр2.НайтиПоНаименованию(РодительСпр1) тогда
        ЭлементОбъект = РодительСпр1;
        ЭлементОбъект.Родитель = РодительСпр1.Родитель;
        ЭлементОбъект.Записать();
    Иначе
        продолжить;
       
   КонецЕсли;
КонецЕсли;  



   Рекурсия(Выборка.Ссылка);
КонецЦикла;
КонецПроцедуры
   
[/code]
Но выдаёт ошибку: Поле объекта недоступно для записи (Родитель)
        ЭлементОбъект.Родитель = РодительСпр1.Родитель;
Как не используя таблицу значений присвоить соответствующим элементам соответствующих родителей?
1 cw014
 
30.04.13
12:44
ПолучитьОбъект(), блеать
2 SherifSP
 
30.04.13
12:47
ггг ссылку можно записывать?))
3 urank
 
30.04.13
12:54
(2) Можно
4 cw014
 
30.04.13
12:54
(3) Ну записывай тогда, не будем мешать
5 urank
 
30.04.13
13:00
(4) Я только начал разбираться с 1с, в какой строке кода и на что ссылку скопировать надо?
6 Naumov
 
30.04.13
13:07
записывать можно только в ОБЪЕКТ. Ссылка только для чтения
7 cw014
 
30.04.13
13:08
Сначала разберись, чем типы СправочникСсылка отличается от СправочникОбъект...
8 Godofsin
 
30.04.13
13:09
(5) Разность познай, юный подаван, между СправочникСсылка и СправочникОбъект.
9 cw014
 
30.04.13
13:11
Я вот помню, когда "начал" разбираться с 1С - писал отчет, и на форумах не сидел, ибо отчет нужно было написать архибыстро... До поздна курил СП
10 urank
 
30.04.13
14:29
Ну так что? Кто-нибудь укажет явно на ошибку в коде?
11 salvator
 
30.04.13
14:32
(10) За полтора часа так и не понял? Вон из профессии.
12 hhhh
 
30.04.13
14:39
(10) НоваяЗапись.Родитель = Выборка.Родитель.Наименование

в поле Родитель фигачишь строку


        ЭлементОбъект = РодительСпр1;
        ЭлементОбъект.Родитель = РодительСпр1.Родитель;
        ЭлементОбъект.Записать();


РодительСпр1 - это ссылка, у нее нет метода Записать();
13 cw014
 
30.04.13
14:45
(12) в (11) ему явно указали на его ошибку ))))
14 urank
 
30.04.13
17:28
НоваяЗапись.Родитель = Выборка.Родитель.Наименование  - так тоже не работает, справочники разные.
15 Aprobator
 
30.04.13
21:45
(14) ик ик ик.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.