Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Как через OLE указать родителя? (число прочтений - 2372 )
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Как через OLE указать родителя?
25. Июня 2009 :: 17:40
Печать  
Хочу сделать синхронизацию между двумя базами. Не как через OLE не могу утановить Родителя.
Почему не работает примерно такой код:
Если OleBase.НайтиПоКоду(КодСп1,0)= 1 Тогда
Если OleBase1.НайтиПоКоду(КодСп1,0)= 1 Тогда
OleBase.Родитель = OleBase1.ТекущийЭлемент(); << тут ошибка.
  
Наверх
 
IP записан
 
leov-001
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 150
Зарегистрирован: 05. Марта 2009
Re: Как через OLE указать родителя?
Ответ #1 - 26. Июня 2009 :: 08:43
Печать  
Код
Выбрать все
Если OleBase.НайтиПоКоду(КодСп1,0)= 1 Тогда
Если OleBase1.НайтиПоКоду(КодСп1,0)= 1 Тогда
OleBase.Родитель = OleBase1.ТекущийЭлемент();

 



Код
Выбрать все
Если OleBase.НайтиПоКоду(КодСп1,0)= 1 Тогда
Если OleBase1.НайтиПоКоду(КодСп1,0)= 1 Тогда
OleBase.РодительКод = OleBase1.КодСп1;
 

  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #2 - 29. Июня 2009 :: 10:54
Печать  
Родитель не меняется. Изменяется только код родителя. А мне надо что бы изменился родитель.

Делаю я на Delhi:

Ole1CTorg :=   CreateOleObject('V77.Application');
Ole1CTorg.Initialize(Ole1CTorg.RMTrade, '/D' + OlePach.Text + ' /N' + OleLogin.Text + ' /P' + OlePass.Text,'NO_SPLASH_SHOW');
Ole1Cbase :=   CreateOleObject('V77.Application');
Ole1Cbase.Initialize(Ole1Cbase.RMTrade, '/D' + OlePach1.Text + ' /N' + OleLogin1.Text + ' /P' + OlePass1.Text,'NO_SPLASH_SHOW');

OleNomenklaturaBase:= Ole1Cbase.EvalExpr('СоздатьОбъект("Справочник.Номенклатура")');
OleNomenklaturaTorg1 := Ole1CTorg.EvalExpr('СоздатьОбъект("Справочник.Номенклатура")');

OleNomenklaturaTorg1.selectitems(1); //Открываем выборку элементов справочника
while OleNomenklaturaTorg1.GetItem(1)>0 do //Выбираем все элементы
  begin

     codeid :=   OleNomenklaturaTorg1.Code ; //Запишем в переменную код
     Application.ProcessMessages;

       if Stop = 1 then
         Break;


       if  (OleNomenklaturaTorg1.IsGroup = 0)  or (OleNomenklaturaTorg1.Level >= 2) then
     begin //Если это элемент и она на втором или более уровне…
        if OleNomenklaturaBase.FindByCode( codeid,0) = 1 then //Найдем в другой базе этот элемент.
           begin
try



                  Application.ProcessMessages;
        sListBox1.Items.Add(codeid + 'Было: ' +  OleNomenklaturaTorg1.FullDescr   );
      OleNomenklaturaBase.Parent.code  :=  OleNomenklaturaTorg1.Parent.Code; //Изменим родителя…

         OleNomenklaturaBase.Write;  //Записать
     sListBox1.Items.Add(OleNomenklaturaBase.Код + 'Стало: ' +  OleNomenklaturaBase.FullDescr   )  ;

end;
end;


  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #3 - 29. Июня 2009 :: 11:38
Печать  
admin spb писал(а) 25. Июня 2009 :: 17:40:
Хочу сделать синхронизацию между двумя базами. Не как через OLE не могу утановить Родителя.
Почему не работает примерно такой код:
Если OleBase.НайтиПоКоду(КодСп1,0)= 1 Тогда
Если OleBase1.НайтиПоКоду(КодСп1,0)= 1 Тогда
OleBase.Родитель = OleBase1.ТекущийЭлемент(); << тут ошибка.

По ОЛЕ передаются только простые типы, например "Строка", "Число" и т.д. "OleBase1.ТекущийЭлемент()" - это НЕ простой тип. Как указали во 2-м посте - передать можно, например, код "Код = OleBase1.ТекущийЭлемент().Код". Потом по этому коду найти Родителя в ОлеБейс и назначить этого Родителя. Подробнее можешь почитать, например, тут: http://www.mista.ru/articles1c/ole.htm
  
Наверх
ICQ  
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #4 - 29. Июня 2009 :: 12:33
Печать  
Надо было передавать родителя из той же базы.... а не из торговли Подмигивание
Альфу большое спасибо (ответил по ICQ), и вам тоже, огромное спасибо за быстрый ответ!
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #5 - 20. Июля 2009 :: 07:38
Печать  
Кстате, если не убрать галочку в 1С контроль уникальность кода в справочнике, то при попытке записать (изменить) родителя, 1С выдает что код не уникальный... Снял на хрен эту галочку, и все заработало)
  
Наверх
 
IP записан
 
dnp
Senior Member
****
Отсутствует


.

Сообщений: 479
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #6 - 20. Июля 2009 :: 07:41
Печать  
хе. можно было и новый уникальный код назначить - тоже всё заработало бы.
а без уникальности - нафиг этот код вообще нужен? посмотри теперь на синхренизированные таким образом элементы Улыбка
  
Наверх
ICQ  
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как через OLE указать родителя?
Ответ #7 - 20. Июля 2009 :: 08:11
Печать  
дубликатов нет! мне нужно было получить такой же код как и в другой базе... но почему то когда меняю родителя, при записи выдает ошибку что код не уникален! хотя в справочнике только один элемент с таким кодом...    может просто ошибка в том что я делаю все это на Delphi?)
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать