Имя: Пароль:
1C
1С v8
не получает родителя у элемента
,
0 manti
 
01.02.13
12:18
Читаю из Com cоединения спр. Контрагенты - группы и элементы. Записываются в данном виде  только группы и элементы раздельно.
Как записать элемент с родной группой?

Коннектор = Новый COMОбъект("V82.COMConnector");
   Попытка        
       База = Коннектор.Connect("Srvr="");
       Сообщить("Соединение с базой успешно установлено");
   Исключение
       Сообщить("Произошла ошибка подключения к базе"+ОписаниеОшибки());
       Возврат;
   КонецПопытки;

СпрКонтраг = База.Справочники.Контрагенты;
   Выборка = СпрКонтраг.ВыбратьИерархически();
   РегСведКонтактИнфа = База.РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();
   
   х=0;
   Пока Выборка.Следующий() Цикл
       х=х+1;
       //грузим только группы
       Если Выборка.ЭтоГруппа Тогда
           //если группа не удалена
           Если выборка.пометкаУдаления = Ложь тогда
               //проверим на повторения
               Если Справочники.Контрагенты.НайтиПоКоду(Выборка.код) = Справочники.Контрагенты.ПустаяСсылка()
                   Тогда
                   НовГр = Справочники.Контрагенты.СоздатьГруппу();
                   НовГр.Родитель       = Выборка.Ссылка.Родитель.Наименование;
                   НовГр.Наименование = Выборка.Ссылка.Наименование;
                   НовГр.Код           = Выборка.Ссылка.код;
                   НовГр.Записать();
                   Сообщить("Записана группа "+выборка.Наименование+" код группы = "+Выборка.код);
                   Иначе Продолжить;
               КонецЕсли;    
           Иначе Продолжить;
           КонецЕсли;
       Иначе
       //грузим сами элементы
        //если элемент НЕ удален
           Если выборка.пометкаУдаления = Ложь тогда
               //проверим на повторения
               Если Справочники.Контрагенты.НайтиПоКоду(Выборка.код) = Справочники.Контрагенты.ПустаяСсылка()
                   Тогда
                   НовЭлСпр = Справочники.Контрагенты.СоздатьЭлемент();
                   //шапка спр
                   НовЭлСпр.Родитель            = Выборка.Ссылка.Родитель.Наименование;
                   НовЭлСпр.Код                = Выборка.Ссылка.код;
                   НовЭлСпр.Наименование        = Выборка.Ссылка.Наименование;
                   НовЭлСпр.НаименованиеПолное = Выборка.Ссылка.НаименованиеПолное;
1 Wassily
 
01.02.13
12:20
НовЭлСпр.Родитель            = Выборка.Ссылка.Родитель.Наименование;
2 Нуф-Нуф
 
01.02.13
12:22
нужно не наименование а ссылку передвать
3 Godofsin
 
01.02.13
12:24
НовЭлСпр.Родитель            = Выборка.Родитель.Ссылка;
4 Wassily
 
01.02.13
12:25
(3) ты предлагаешь COM-объект в родителя записать?
5 Wassily
 
01.02.13
12:27
НовЭлСпр.Родитель = Справочники.Контрагенты.НайтиПоКоду(Выборка.Родитель.Код)
6 Godofsin
 
01.02.13
12:29
(4) чито то я читаю седня плохо =)
7 cw014
 
01.02.13
12:30
СпрКонтраг - КопроФаг???
8 cw014
 
01.02.13
12:30
(0)(7) Судя по коду я прав
9 hhhh
 
01.02.13
12:31
(0) может без ссылки?

            НовЭлСпр.Родитель            = Выборка.Родитель.Наименование;
                   НовЭлСпр.Код                 = Выборка.код;
                   НовЭлСпр.Наименование         = Выборка.Наименование;
                   НовЭлСпр.НаименованиеПолное = Выборка.НаименованиеПолное;
10 cw014
 
01.02.13
12:31
(9) Без ссылки каждый дурак может, а тут такой шедевр
11 manti
 
01.02.13
12:43
Ни
Выборка.Родитель.Наименование
Выборка.Ссылка.Родитель.Ссылка.Наименование
Выборка.Ссылка.Родитель.Ссылка
не записывают группу((
12 cw014
 
01.02.13
12:44
Выборка.Ссылка.Родитель.Ссылка - это что еще такое???

НовГр.Родитель        = Выборка.Родитель;
13 cw014
 
01.02.13
12:44
Стоп
14 cw014
 
01.02.13
12:45
Нифига у тебя не выйдет
15 cw014
 
01.02.13
12:46
Тебе сначала надо в текущей базе группу создать, а потом уже ее присваивать
16 manti
 
01.02.13
12:47
(14) эт почему? значение то он ворачивает), но не записывает
а тоесть уже записанную группу?
17 cw014
 
01.02.13
12:47
Вместо: НовГр.Родитель        = Выборка.Ссылка.Родитель.Наименование;
пишешь

ТекРодитель = Справочники.Контрагенты.НайтиПоКоду(Выборка.Код);

Если ТекРодитель.Пустая() тогда
НовРодитель = Справочники.Контрагенты.СоздатьГруппу();
ЗаполнитьЗначенияСвойств(НовРодитель, Выборка);
НовРодитель.Записать();
ТекРодитель = НовРодитель.Ссылка;
КонецЕсли;

НовГр.Родитель        = ТекРодитель;
18 cw014
 
01.02.13
12:48
(16) Потому что сначала посмотри в отладчике что у тебя в переменной, а потом задавай глупые вопросы
19 cw014
 
01.02.13
12:50
(16) У тебя НовГр.Родитель имеет тип СправочникСсылка.Контрагенты, Выборка.Ссылка.Родитель.Наименование имеет тип "Строка"
20 cw014
 
01.02.13
12:51
(16) А Выборка.Ссылка.Родитель имеет тип ComObject

Вот и думай, что к чему присваиваешь
21 manti
 
01.02.13
13:00
Если Справочники.Контрагенты.НайтиПоКоду(Выборка.код) = Справочники.Контрагенты.ПустаяСсылка()
                   Тогда
                       //НовГр = Справочники.Контрагенты.СоздатьГруппу();
                       //НовГр.Наименование = Выборка.Ссылка.Наименование;
                       //НовГр.Код           = Выборка.Ссылка.код;
                   ///////////////////////////////////////////////////////////
                   ТекРодитель = Справочники.Контрагенты.НайтиПоКоду(Выборка.Код);
                   Если ТекРодитель.Пустая() тогда
                       НовРодитель = Справочники.Контрагенты.СоздатьГруппу();
                       ЗаполнитьЗначенияСвойств(НовРодитель, Выборка);
                       НовРодитель.Записать();
                       ТекРодитель = НовРодитель.Ссылка;
                   КонецЕсли;
                   
                   //НовГр.Родитель       = Выборка.Родитель.Наименование;
                   ////////////////////////////////////////////////////////////
                       //НовГр.Записать();
                   Сообщить("Записана группа "+выборка.Наименование+" код группы = "+Выборка.код);
                   Иначе Продолжить;

Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
                       ЗаполнитьЗначенияСвойств(НовРодитель, Выборка);
по причине:
Ошибка установки значения свойства 'Owner'
по причине:
Справочник не имеет владельца
22 cw014
 
01.02.13
13:01
ЗаполнитьЗначенияСвойств(НовРодитель, Выборка,, "Владелец,Родитель");
23 cw014
 
01.02.13
13:01
ЗаполнитьЗначенияСвойств(НовРодитель, Выборка,, "Родитель");

Вот так правильно
24 manti
 
01.02.13
13:05
Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств)
                       ЗаполнитьЗначенияСвойств(НовРодитель, Выборка,, "Родитель");
по причине:
Ошибка установки значения свойства 'Owner'
по причине:
Справочник не имеет владельца
25 Wassily
 
01.02.13
13:28
(24) одну запятую оставь
26 hhhh
 
01.02.13
14:37
(24) специально для чукчей: ЗаполнитьЗначенияСвойств выкинь. Напиши

НовРодитель.Наименование = Выборка.Родитель.Наименование;
НовРодитель.Код = Выборка.Родитель.Код;
27 Wassily
 
01.02.13
15:03
(26) код и наименование заполняется
ТС хочет родителя подтянуть
28 hhhh
 
01.02.13
15:17
(27) это вообще не его код. ТС-у об этом еще рано задумываться.
29 manti
 
01.02.13
15:19
понял логику спасибо разобрался
Если Выборка.Родитель.Наименование = "" тогда
                       //если нет родителя
                           НовЭлСпр = Справочники.Контрагенты.СоздатьЭлемент();
                           НовЭлСпр.Код                = Выборка.Ссылка.код;
                           НовЭлСпр.Наименование        = Выборка.Ссылка.Наименование;
                           НовЭлСпр.НаименованиеПолное = Выборка.Ссылка.НаименованиеПолное;                    
                           НовЭлСпр.Записать();
                       Иначе
                            ТекРодитель = Справочники.Контрагенты.НайтиПоКоду(Выборка.родитель.код);
                           //Если ТекРодитель.Пустая() тогда
                            НовЭлСпр = Справочники.Контрагенты.СоздатьЭлемент();
                            НовЭлСпр.Наименование       = Выборка.Ссылка.Наименование;
                            НовЭлСпр.НаименованиеПолное = Выборка.Ссылка.НаименованиеПолное;                    
                            НовЭлСпр.Код                   = Выборка.Ссылка.Код;
                            НовЭлСпр.Родитель             = ТекРодитель;
                            НовЭлСпр.Записать();
                   КонецЕсли;