Имя: Пароль:
1C
1C 7.7
v7: Перенос справочника Контрагенты по OLE
0 ion
 
06.02.13
11:01
Во время переноса воосоздаю архитектуру справочника, для этого мне после прохождения первого уровня справочника нужно элементу присвоить Родителя. Нахожу по коду в новом справочнике родителя, все отлично.
Но когда пытась присвоить объекту все виснет. Как можно в реквизит OLE-объекта записать другой OLE-объект?

СпрОле = V7.CreateObject("Справочник.Контрагенты");    
Спр = СоздатьОбъект("Справочник.Контрагенты");  
ТекОле = V7.CreateObject("Справочник.Контрагенты"); - для поиска по коду, если нужен родитель элементу

Если ПустоеЗначение(Спр.Родитель)=0 Тогда
                                   Если ТекОле.НайтиПоКоду(Спр.Родитель.Код)=1 Тогда
                                       СпрОле.Родитель=ТекОле.ТекущийЭлемент(); - вот тут система виснет
                                   КонецЕсли;
                           
КонецЕсли;
1 akaBrr
 
06.02.13
11:03
(0) а где создается элемент справочника СпрОле?
2 Wobland
 
06.02.13
11:04
после
Спр = СоздатьОбъект("Справочник.Контрагенты");  
Спр.Родитель всегда пустой, не?
3 Dolly_EV
 
06.02.13
11:04
СпрОле.Новый(); Где?
4 1Сергей
 
06.02.13
11:05
попробуй указать второй параметр у ТекОле.НайтиПоКоду(Спр.Родитель.Код)
5 Ёпрст
 
06.02.13
11:05
(0) нет проверки на то, что найденный элемент - группа.

+ присваивать родителя явно - моветон, можно нарваться на неуникальность кода.
6 Ёпрст
 
06.02.13
11:06
+ нет проверки, что элемент ужо есть,+ нет в коде Новый() или
7 ion
 
06.02.13
11:08
подключение из текущей базы к пустой
Для i=1 по 3 Цикл
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() = 1 Цикл
       Если Спр.Уровень()=i тогда
       Если СпрОле.НайтиПоКоду(Спр.Код)=0 Тогда  
           Если Спр.ЭтоГруппа() = 0 Тогда
           СпрОле.Новый();
           СпрОле.Код=Спр.Код;                          СпрОле.Наименование=Спр.Наименование;
           Если ПустоеЗначение(Спр.Родитель)=0 Тогда
                                           Если ТекОле.НайтиПоКоду(Спр.Родитель.Код)=1 Тогда
                                       СпрОле.Родитель=ТекОле.ТекущийЭлемент();
                                   КонецЕсли;
                               КонецЕсли;    

...
8 пипец
 
06.02.13
11:09
universam.ert
если конфигурации идентичны
9 ion
 
06.02.13
11:09
в справочнике контроль уникальности стоит
10 ion
 
06.02.13
11:10
конфигурации идентичны, но мне нужно именно код написать по заданию))
11 пипец
 
06.02.13
11:12
(10) запросом в ТЗ - потом по ТЗ по иерархии бегишь
В ТЗ структура - Элемент / родитель / уровень(полный код например)
12 1Сергей
 
06.02.13
11:12
(10) ты проверь, ТекОле точно Группа?
13 Lionee
 
06.02.13
11:13
изобретают опять лисапед,в (8) уже изобрели,ездит
14 ion
 
06.02.13
11:14
о, проверка не делалась, но в отладчике все ок показывает, до присвоения
15 пипец
 
06.02.13
11:23
самый универсальный вариант - грузишь всех в корень потом назначаешь родителей
ЗЫ по скорости точ в точь чем перебирать и сравнивать
16 ion
 
06.02.13
11:24
спасибо, попробую так