IE2017

Очистка регистра Версии Объектов

Администрирование - Чистка базы

Очистка регистра Версии Объектов - пожалуй самого быстрорастущего регистра в базе (v. 1.1)

Если в вашей базе включен режим отслеживания истории изменения объектов, это очень помогает в поиске КТО, С ЧЕМ, КОГДА и ЧТО сделал в информационной базе. Однако этот режим заставляет регистр Версии Объектов, расти как на дрожжах. И в скором времени таблица этого регистра будет самой большой в базе.
Данная обработка позволяет очищать этот регистр.
Проблема в том, что если этот регистр весит уже гигабайт или больше, то очистка регистра займёт очень продолжительное время и может привести к ошибке памяти 1С. Для избежания этого, была добавлена возможность частичного удаления регистра. Для этого достаточно указать номер начальной и конечной версии, которые Вы хотите удалить.

Скачать файлы

Наименование Файл Версия Размер
Удаление версионирования
.epf 6,87Kb
29.08.12
280
.epf 6,87Kb 280 Скачать бесплатно

См. также

Комментарии
1. al petrov (petrov_al) 10 30.08.12 22:11 Сейчас в теме
А почему бы не удалять самые старые по периоду...
2. pepe (pepe) 61 31.08.12 13:44 Сейчас в теме
(1) petrov_al, Я с вами согласен. Я даже видел пример удаления, не помню у кого. Я на основании его создал регламентное задание.
Процедура УдалитьВерсии()
//Очистка регистра версионирования, по истечению срока хранения
	КоличествоДней = Константы.ХранениеВерсионированияДней.Получить();
	Если КоличествоДней > 0 Тогда
		ДатаПо = НачалоДня(ТекущаяДата()) - КоличествоДней *60*60*24; 
		ЗаписьЖурналаРегистрации("ОчистаВерсий", УровеньЖурналаРегистрации.Информация, , , "Очистка регистра сведений версии объекта, до: " + Формат(ДатаПо, "ДЛФ=DD"));

		ЗапросДаты = Новый Запрос;
		
		ЗапросДаты.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	НАЧАЛОПЕРИОДА(ВерсииОбъектов.ДатаВерсии, ДЕНЬ) КАК ДатаВерсии
		|ИЗ
		|	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
		|ГДЕ
		|	НАЧАЛОПЕРИОДА(ВерсииОбъектов.ДатаВерсии, ДЕНЬ) <= &ДатаПо
		|
		|УПОРЯДОЧИТЬ ПО
		|	ДатаВерсии";
		
		ЗапросДаты.Параметры.Вставить("ДатаПо",ДатаПо);
		
		ВыборкаДаты = ЗапросДаты.Выполнить().Выбрать();
		
		Пока ВыборкаДаты.Следующий() Цикл
			
			ОчиститьНаДату(ВыборкаДаты.ДатаВерсии);
			
		КонецЦикла;
	КонецЕсли; 
КонецПроцедуры

Процедура ОчиститьНаДату(ДатаОчистки)
	
	ЗапросОчистка = Новый Запрос;

	ЗапросОчистка.Текст = "ВЫБРАТЬ
	|	ВерсииОбъектов.Объект,
	|	ВерсииОбъектов.НомерВерсии,
	|	ВерсииОбъектов.ВерсияОбъекта,
	|	ВерсииОбъектов.АвторВерсии,
	|	ВерсииОбъектов.ДатаВерсии,
	|	ВерсииОбъектов.Сжато
	|ИЗ
	|	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
	|ГДЕ
	|	ВерсииОбъектов.ДатаВерсии >= &НачПериода
	|	И ВерсииОбъектов.ДатаВерсии <= &КонПериода";
	
	ЗапросОчистка.Параметры.Вставить("НачПериода",НачалоДня(ДатаОчистки));
	ЗапросОчистка.Параметры.Вставить("КонПериода",КонецДня(ДатаОчистки));
	
	Выборка = ЗапросОчистка.Выполнить().Выбрать();
	
	НовыйНомерВерсии=1;
	
	Пока Выборка.Следующий() Цикл
		ВерсииОбъектов = РегистрыСведений.ВерсииОбъектов;
		
		МенеджерЗаписиИИО = ВерсииОбъектов.СоздатьМенеджерЗаписи();
		МенеджерЗаписиИИО.Объект       = Выборка.Объект;
		МенеджерЗаписиИИО.НомерВерсии  = Выборка.НомерВерсии;
		МенеджерЗаписиИИО.Прочитать();
		
		МенеджерЗаписиИИО.Объект       = Справочники.Номенклатура.ПустаяСсылка();
		МенеджерЗаписиИИО.НомерВерсии  = НовыйНомерВерсии;
		МенеджерЗаписиИИО.ВерсияОбъекта = Неопределено;
		МенеджерЗаписиИИО.Записать();
		
		НовыйНомерВерсии=НовыйНомерВерсии+1;
		
	КонецЦикла;
	
	НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.Объект.Установить(Справочники.Номенклатура.ПустаяСсылка());
	НаборЗаписей.Записать();
	
	//Сообщить ("за: "+Формат(ДатаОчистки,"ДЛФ=DD")+" очищено "+НовыйНомерВерсии+" записей." ,СтатусСообщения.Внимание);
	
КонецПроцедуры	

  
...Показать Скрыть
3. Евгений worker (worker1c) 111 07.09.12 11:59 Сейчас в теме
Удаляя версии объектов, теряется история изменения объектов. Предлагаю более "мягкий" вариант оптимизации регистра "Версии объектов": Удалять записи в которых не содержится изменений относительно предыдущей записи. Обработка здесь: http://infostart.ru/public/150314/
Работает она конечно намного дольше вашей, но результат того стоит
4. serge_focus (serge_focus) 4 23.08.13 23:44 Сейчас в теме
И чем кардинально отличается данная обработка, от представленных здесь в изобилии бесплатных обработок? ;)
5. serge_focus (serge_focus) 4 23.08.13 23:56 Сейчас в теме
А еще с подобной задачей может справиться так называемый "чистильщик" регисторов -также на infostart.ru присутствует где-то.
Или стандартный механизм от 1С:
--------------------------------------------------------------------------------

Сервис - прочие обмены - универсальный обмен хмл - удаление данных
Bernstein_13; +1 Ответить
Оставьте свое сообщение