Имя: Пароль:
1C
1C 7.7
v7: Корректное присвоение родителя при обмене справочниками через OLE между базами
0 Mister-X07
 
21.03.12
00:17
Загружаю в рус. торговле 921 в справочник Номенклатура, по оле элементы из справочника ТМЦ из укр. бухгалтерии 291 - вот код (ТМЦ - 3-уровненный справочник, Номенклатура - 5-уровненный):

спрНомГр1 = создатьОбъект("Справочник.Номенклатура");
спрНомГр2 = создатьОбъект("Справочник.Номенклатура");
спрНомЭл = создатьОбъект("Справочник.Номенклатура");
v7 = СоздатьОбъект("V77.Application");  
init = v7.Initialize(v7.RMTrade, , "");
   СпрТам = v7.EvalExpr("СоздатьОбъект(""Справочник.ТМЦ"")");
   СпрТам.ВыбратьЭлементы(0);    
   СпрТам.ИспользоватьДату(ТекущаяДата(),1);
   //НачатьТранзакцию();
   Пока (СпрТам.ПолучитьЭлемент() = 1) Цикл
                если СпрТам.пометкаУдаления()=1 тогда
               продолжить;
           конецесли;
           
           наим = сокрлп(СпрТам.Наименование);
           род = сокрлп(спрТам.Родитель.Наименование);
           если СпрТам.ЭтоГруппа()=1 тогда
               если спрНомГр1.НайтиПоНаименованию(наим,0,1)=0 тогда
                   спрНомГр1.НоваяГруппа();
                   спрНомГр1.Наименование=СпрТам.наименование;                
                   //спрНомГр1.Записать();
                   
                   если ПустоеЗначение(род)=0 тогда
                       если спрНомГр2.НайтиПоНаименованию(род,0,1)=0 тогда
                           спрНомГр2.НоваяГруппа();
                           спрНомГр2.Наименование = СпрТам.наименование;                
                           спрНомГр2.Записать();
                           спрНомГр1.Родитель = спрНомГр2.ТекущийЭлемент();
                       иначе
                           спрНомГр1.Родитель = спрНомГр2.ТекущийЭлемент();    
                       конецесли;    
                   конецесли;
                   спрНомГр1.Записать();
               конецесли;
           иначе
               если спрНомЭл.НайтиПоНаименованию(наим,0,1)=0 тогда
                   спрНомЭл.Новый();
                   спрНомЭл.Наименование = наим;                
                   спрНомЭл.ПолнНаименование= сокрлп(спрТам.ПолнНаименование);
                   спрНомЭл.СтавкаНДС = глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС");
                   //Цена0 = СпрТам.Цена_Закуп;
                   //Цена1 = число(ВходExcel.ActiveSheet.Cells(СчетчикЦикла,8).Value);
                   //Цена2 = число(ВходExcel.ActiveSheet.Cells(СчетчикЦикла,9).Value);
                   если ПустоеЗначение(род)=0 тогда
                       если спрНомГр1.НайтиПоНаименованию(род,0,1)=0 тогда //если спрНомГр1.НайтиПоНаименованию(род,0,1)=0 тогда
                           спрНомГр1.НоваяГруппа();
                           спрНомГр1.Наименование = род;                
                           спрНомГр1.Записать();
                           спрНомЭл.Родитель = спрНомГр1.ТекущийЭлемент();
                       иначе
                           сообщить("елемент = "+спрНомЭл.наименование);
                           сообщить("група = "+спрНомГр1.ТекущийЭлемент());
                           спрНомЭл.Родитель = спрНомГр1.ТекущийЭлемент();
                           
                       конецесли;
                   конецесли;

вот в этой строке возникает ошибка:

сообщить("елемент = "+спрНомЭл.наименование);
                           сообщить("група = "+спрНомГр1.ТекущийЭлемент());
                           спрНомЭл.Родитель = спрНомГр1.ТекущийЭлемент();

когда загружается элемент 3-го уровня из базы бух. Как перекидывать справочники н-уровня?
1 zxcvb
 
21.03.12
00:25
Мало кода, чтобы воспроизвести ошибку.
2 Mister-X07
 
21.03.12
00:38
ок, напишу завтра весь код обработки
3 zxcvb
 
21.03.12
00:39
Ошибку лучше напиши.
4 Mister-X07
 
21.03.12
00:42
не верное значение реквизита
5 zxcvb
 
21.03.12
00:43
Наверное спрНомГр1 стоит найти. Не знаю...
6 Mister-X07
 
21.03.12
00:46
да не - его то находит, но присвоить не дает как родителя, посмотрю еще спрНомГр1 на признак группы, возможно элемент такой нашло
7 zxcvb
 
21.03.12
00:49
А сам-то спрНомЭл создан?
8 zxcvb
 
21.03.12
00:52
Только сейчас заметил, что на + оказывается можно нажать!:))))
9 zxcvb
 
21.03.12
00:58
спрНомГр1.ВыбратьЭлементы()
10 Shrike
 
21.03.12
01:06
(0) А если бы справочник был бы 10 уровневый? А одинаковых наименований тоже быть не может?
11 Mister-X07
 
21.03.12
16:48
все ок, поправил и перенес по наименованию (так сказал руководитель, хотя я ему говорил о не надежности)
Программист всегда исправляет последнюю ошибку.