Каталог решений - Восстановление / перенос движений документов

Восстановление / перенос движений документов

Восстановление / перенос движений документов

В наличии

Как быстро и выборочно восстановить движения из копии базы до изменений и не получить леща от Марьи Петровны?

Категория:

Описание

В копии базы до изменений:

  1. Создаём внешнюю обработку и собираем в табличную часть нужные документы. Пусть в этой ТЧ будет одна колонка "Документ" с типом "ДокументСсылка". Как собрать документы — статья не об этом.
  2. Добавим кнопку "Выгрузить", напишем обработчик:
  3. &НаСервере
    Процедура ВыгрузитьДокиНаСервере() 
    	
    	Данные = Новый ТаблицаЗначений;
    	Данные.Колонки.Добавить("УИД");  
    	Данные.Колонки.Добавить("ИмяОбъекта");
    	Данные.Колонки.Добавить("Движения");
    	
    	Для каждого Стр из Объект.Документы Цикл 
    					
    		ДокОбъект = Стр.Документ.ПолучитьОбъект();    
    		
    		СтрДанные = Данные.Добавить();
    		СтрДанные.УИД = Стр.Документ.УникальныйИдентификатор(); 
    		СтрДанные.ИмяОбъекта = ДокОбъект.Метаданные().Имя;
    		
    		ДвиженияДанные = Новый Структура();
    		
    		Для каждого Движ из ДокОбъект.Движения Цикл     
    			
    			ИмяРегистра = Движ.Метаданные().Имя;
    			
    			//Если ИмяРегистра = "ОборотыПлановыхОпераций" Тогда //Если нужно выгрузить движения по определенным регистрам				
    				Движ.Прочитать();
    				ДвижТЗ = Движ.Выгрузить();   
    				ДвиженияДанные.Вставить(ИмяРегистра, ЗначениеВСтрокуВнутр(ДвижТЗ));    
    			//КонецЕсли;
    			
    		КонецЦикла;
    				
    	КонецЦикла;  
    	
    	СтрДанные.Движения = ДвиженияДанные;
    	
    	СериализацияДанных = ЗначениеВСтрокуВнутр(Данные);    
    	
    	Файл = Новый ЗаписьТекста("C:\Выгрузка.txt");
    	Файл.Записать(СериализацияДанных);
    	Файл.Закрыть();
    	
    КонецПроцедуры

     

  4. Движения выгрузили. Теперь перейдем в рабочую базу и создадим в нашей обработке новую кнопку "Загрузить", напишем обработчик:
&НаСервере
Процедура ЗагрузитьДокиНаСервере()
	
	Текст = Новый ЧтениеТекста;
	Текст.Открыть("C:\Выгрузка.txt");   
	СериализацияДанных = Текст.Прочитать();  
	Текст.Закрыть();         
	
	Данные = ЗначениеИзСтрокиВнутр(СериализацияДанных);
	
	Для каждого Стр из Данные Цикл  
		
		ДокОбъект = Документы[Стр.ИмяОбъекта].ПолучитьСсылку(Стр.УИД).ПолучитьОбъект();  
				
		Для каждого Движ из ДокОбъект.Движения Цикл     
			
			ИмяРегистра = Движ.Метаданные().Имя;
			
			Если Стр.Движения.Свойство(ИмяРегистра) Тогда				 
				ИмпортированныеДвиженияТЗ = ЗначениеИзСтрокиВнутр(Стр.Движения[ИмяРегистра]);
				Движ.Загрузить(ИмпортированныеДвиженияТЗ);     
				Движ.ОбменДанными.Загрузка = Истина;   
				//ЗаменитьДоговорВПроводках(Движ, ДокОбъект.ДоговорКонтрагента); //Здесь можем подменить в движениях нужные значения
				Движ.Записать();
			КонецЕсли;
			
		КонецЦикла;	
		
	КонецЦикла;
	
КонецПроцедуры 

P.S. Если нужно подменить при загрузке движений некоторые значения, то напишем процедуру "ЗаменитьДоговорВПроводках". В моем случае я подменял договор на тот, который указан в документе. При этом процедура сама ищет, где указан договор, к определенным реквизитам не привязываюсь:

Процедура ЗаменитьДоговорВПроводках(Движения, Договор)  
	
	МетаданныеНабораДвижений = Движения.Метаданные();     
	ТипДоговор = Тип("СправочникСсылка.ДоговорыКонтрагентов");
	
	Для каждого СтрДвиж из Движения Цикл
		
		Для каждого Кол из МетаданныеНабораДвижений.Измерения Цикл		
			ЗначениеПоля = СтрДвиж[Кол.Имя];
			
			Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
				СтрДвиж[Кол.Имя] = Договор;	
			КонецЕсли;	
		КонецЦикла;   
		
		Для каждого Кол из МетаданныеНабораДвижений.Ресурсы Цикл		
			ЗначениеПоля = СтрДвиж[Кол.Имя];
			
			Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
				СтрДвиж[Кол.Имя] = Договор;	
			КонецЕсли;	
		КонецЦикла;
		
		Для каждого Кол из МетаданныеНабораДвижений.Реквизиты Цикл		
			ЗначениеПоля = СтрДвиж[Кол.Имя];
			
			Если ЗначениеЗаполнено(ЗначениеПоля) И ТипЗнч(ЗначениеПоля) = ТипДоговор Тогда
				СтрДвиж[Кол.Имя] = Договор;	
			КонецЕсли;	
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры

 

has been added to your cart:
Оформление заказа