Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Как запросом скопировать из одной базы в другую все содержимое справочника (число прочтений - 6780 )
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #15 - 21. Июля 2009 :: 11:16
Печать  
Есть еще экспорт-импорт, все делается в два клика в ЕМ (при условии что один из справочников пустой, ну или если допустимо все удалить и перезалить заново)
Иначе надо синхронизироваться
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #16 - 22. Июля 2009 :: 07:58
Печать  
В общем сделял я через OLE. Программа теперь сама значет что нужно обновить справочник. Если кому интересно, могу выслать на почту код программы сделаная на Delphi
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #17 - 22. Июля 2009 :: 07:58
Печать  
Как сделать запросом, пока не знаю..
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #18 - 23. Июля 2009 :: 04:49
Печать  
Выложите здесь исходники.. поглядеть.
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #19 - 03. Августа 2009 :: 10:49
Печать  
Код
Выбрать все
	 OleBase:=Ole1CBase.CreateObject('Справочник.Номенклатура'); //6
		  OleBase1:=Ole1CBase.CreateObject('Справочник.Номенклатура'); //6
		OleTorg:=Ole1CTorg.CreateObject('Справочник.Номенклатура'); //6

				//	end
				    //	finally
				    //	begin
//ListBox1.Items.Add('Ошибка');
//Application.ProcessMessages;
//end   ;




     i := 0;
	     strStatus.Caption := 'Выполняется проверка элементов';
  OleTorg.selectitems(1); //Открываем выборку элементов справочника
  while OleTorg.GetItem(1)>0 do //Выбираем все элементы
  begin



  AutoRunScan := 0;
	i := i +1;
			   if Stop = 1 then
			   begin
			     Stop := 0;
				    AutoRunScan := 1;
					  Break;

				     end;



  StatusBar1.SimpleText := OleTorg.Description ;
  Application.ProcessMessages;


   Prodolit := 1;
for r := 0  to IgnorList.Lines.Count -1  do
begin
if Pos(IgnorList.Lines.Strings[r],OleTorg.FullDescr) <> 0 then
 Prodolit := 0;

end;
if Prodolit = 1 then
begin






  if OleTorg.IsGroup = 1 then  //Если это группа
    begin

     if OleBase.FindByCode(OleTorg.FullCode,2) = 0 then	//Такой группы нет в базе.
	     begin

	     if OleTorg.Level > 1  then
		   begin

		     if OleBase.FindByCode(OleTorg.Parent.Code,0) = 1 then
			 begin
			  OleBase.UseParent(OleBase);
			  OleBase.NewGroup;
			  OleBase.Code := OleTorg.Code;
			  OleBase.Description := OleTorg.Description;
			  OleBase.Write;
			  ListBox1.Items.Add('Новая группа: ' + OleTorg.FullDescr) ;
			  end;

		   end
		   else
		   begin
			 OleBase.UseParent('');
			 OleBase.NewGroup;
			 OleBase.Code := OleTorg.Code;
			 OleBase.Description := OleTorg.Description;
			 OleBase.Write;
			 ListBox1.Items.Add('Новая группа: ' + OleTorg.FullDescr) ;
		   end;  //Это первый лвл??

		end;   //Это поиск группы

		   end; //Это группа?
		   // break;
		  //   Break;
end
			  end; //Перебор элементов


	   AdvProgressBar1.Max := i;
	  AdvProgressBar1.Position := 0;
		strStatus.Caption := 'Выполняется синхронизация элементов';
  OleTorg.selectitems(1); //Открываем выборку элементов справочника
  while OleTorg.GetItem(1)>0 do //Выбираем все элементы
  begin
	    AutoRunScan := 0;
   AdvProgressBar1.Position := AdvProgressBar1.Position +1;
			   if Stop = 1 then
			   begin
			     Stop := 0;
			     Break;
					 AutoRunScan := 1;
			   end;



  StatusBar1.SimpleText := OleTorg.Description ;
  Application.ProcessMessages;



    Prodolit := 1;
for r := 0  to IgnorList.Lines.Count -1  do
begin
if Pos(IgnorList.Lines.Strings[r],OleTorg.FullDescr) <> 0 then
 Prodolit := 0;

end;
if Prodolit = 1 then
begin





  if OleTorg.IsGroup = 0 then  //Если это группа
    begin
		 Code :=  OleTorg.Code;
     if OleBase.FindByCode(Code,0) = 1 then	//Такой элемента нет в базе.
	     begin

		    if    OleBase.Description <> OleTorg.Description then
			 begin
			   ListBox1.Items.Add('Переименованили элемент: ' + OleBase.Description + ' => ' + OleTorg.Description) ;
			  OleBase.Description := OleTorg.Description;
				OleBase.Write;
			 end;



	  if OleTorg.Level > 1 then
		  begin
			  Code :=  OleTorg.Parent.Code;
		     if OleBase1.FindByCode(Code,0) = 1 then
			 begin
			 if OleBase1.Level > 1 then
			 begin
			 Code1 :=  VarToStr(OleTorg.Parent.FullCode);
			 Code2 :=  VarToStr(OleBase.Parent.FullCode);

			   if   Code1 <>  Code2 then
			   begin
			   try

			     begin

				   ListBox1.Items.Add('Переместили элемент:  (было) ' + OleBase.Code + ' '  + OleBase.FullDescr) ;
				   ListBox1.Items.Add('Переместили элемент: (стало) ' + OleTorg.Code + ' ' + OleTorg.FullDescr) ;



			     OleBase.Parent := OleBase1;
				 OleBase.Write;
				  end
				   finally
				   begin
				    Ole1CBase := Unassigned;
				    Ole1CTorg := Unassigned;
				    Ole1CTorg := '';
				    Ole1CBase := '';

				   end


			   end;

			   end;

			 end;





			  end;
		  end;





		end
else

  

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


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #20 - 03. Августа 2009 :: 10:49
Печать  
Код
Выбрать все
  begin



	   if OleTorg.Level > 1  then
		   begin
		    if OleBase1.FindByCode(OleTorg.Parent.Code,0) = 1 then
			 begin
			  OleBase.UseParent(OleBase1);
			  OleBase.New;
			  OleBase.Code := OleTorg.Code;
		     //   ShowMessage( OleTorg.FullDescr);
			  OleBase.Description := OleTorg.Description;
		     OleBase.Write;
			  ListBox1.Items.Add('Новая элемент: ' + OleTorg.FullDescr) ;
			  end;

		   end
		   else
		   begin
			 OleBase.UseParent('');
			 OleBase.New;
			 OleBase.Code := OleTorg.Code;
			 OleBase.Description := OleTorg.Description;
			OleBase.Write;
		     ListBox1.Items.Add('Новая элемент: ' + OleTorg.FullDescr) ;
		   end;  //Это первый лвл??




end;





			    end;
			 //Если элемент есть, то проверим родителя....

			   end;

		   end;  //Это первый лвл??


				   AutoRunScan := 1;

						 strStatus.Caption := 'Ожидания изменений...';
				   Button2.Click; //Запишем в реест что бы 1С обновилась!

	     

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


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #21 - 03. Августа 2009 :: 10:51
Печать  
Это не весь код...
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #22 - 03. Августа 2009 :: 11:13
Печать  
Так наверное не кто и не знает, как все сделать это ввиде запроса...
  
Наверх
 
IP записан
 
VoditelKobyly
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 22
Зарегистрирован: 13. Февраля 2009
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #23 - 04. Августа 2009 :: 01:13
Печать  
Судя по твоему алгоритму тебе надо вопрос поставить по другому:
Как запросами скопировать из одной базы в другую все содержимое справочника?
Либо поменяй постановку вопроса либо постановку задачи. Тяжело написать один запрос, который бы менял данные в базе и одновременно куда-нибудь записывал, что на что он изменил.
Похоже в справочнике нет ссылок на другие метаданные, это очень упрощает задачу.
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Как запросом скопировать из одной базы в другую все содержимое справочника
Ответ #24 - 04. Августа 2009 :: 07:45
Печать  
Тему уже можно закрыть. т.к. сделал я на delphi. просто интересно, реально ли все это сделать запросом.
В одной базе есть код и наименование, а в другой базе есть код, наименование и куча других реквизитов. Я думал из начально, сделать это запросом.. ну как я не селен в запросах, сделал на delphi.
Огромное всем спасибо! Кстате, если будут у Вас вопросы с Delphi. пишите: admin@te.spb.su  - тоже помогу, чем смогу)

С уважением, Константин

  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать