Постановка задачи:
-
Чистит каждую ночь по 5 часов
-
Удаляет записи прошлых лет
-
Оставляет всегда 1 самую старую версию.
-
После отработки пишет в журнал регистрации информацию по проделанной работе.
Все входные параметры легко зашиваются на константы.
Проверено на УПП 107.2.1.3 платформа (8.3.8.1933).
После очистки рекомендую сделать сжатие базы.
Листинг регламентированного задания.
Процедура ВыполнитьОчисткуПоВидуОбъекта() Экспорт
//Через 5 часов
ПрекратитьРаботуЧерез = 5*3600;
ДатаНачало = ТекущаяДата();
ОстановитьПосле = ТекущаяДата() + ПрекратитьРаботуЧерез;
МассивОбъектов = Новый Массив;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВерсииОбъектов.Объект,
| МАКСИМУМ(ВерсииОбъектов.НомерВерсии) КАК НомерВерсии
|ИЗ
| РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
|ГДЕ
| ВерсииОбъектов.ДатаВерсии < &Период
|
|СГРУППИРОВАТЬ ПО
| ВерсииОбъектов.Объект
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(ВерсииОбъектов.Объект) > 1";
Запрос.УстановитьПараметр("Период", НачалоГода(ТекущаяДата()));
МассивОбъект=Запрос.Выполнить().Выгрузить();
СчетчикВерсий = 0;
СчетчикОбъектов = 0;
Для каждого СтрокаОбъект из МассивОбъект цикл
КоличествоВерсий = СтрокаОбъект.НомерВерсии;
//Вводим 2 цикл для того чтоб оставить только 1 самую новую версию
Пока КоличествоВерсий > 1 цикл
КоличествоВерсий = КоличествоВерсий - 1;
НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.НомерВерсии.Установить(КоличествоВерсий);
НаборЗаписей.Отбор.Объект.Установить(СтрокаОбъект.Объект);
НаборЗаписей.Записать();
СчетчикВерсий = СчетчикВерсий + 1;
СчетчикОбъектов = СчетчикОбъектов + 1;
// Прекращаем работу, если время прошло
Если ТекущаяДата() > ОстановитьПосле Тогда
ДатаОкончания = ТекущаяДата();
ВремяВыполнения = ДатаОкончания - ДатаНачало;
ИмяСобытия = "Замер времени очистки Регистра сведений 'Версии объектов'";
Комментарий = "Объектов обработано " +СчетчикОбъектов + ", удалено: "+ СчетчикВерсий + " версий. Затрачено "+ВремяВыполнения+" секунд.";
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,,, Комментарий);
Возврат
КонецЕсли;
КонецЦикла;
КонецЦикла;
//Вдруг чудо и закончили раньше 5 часов
ДатаОкончания = ТекущаяДата();
ВремяВыполнения = ДатаОкончания - ДатаНачало;
ИмяСобытия = "Замер времени очистки Регистра сведений 'Версии объектов'";
Комментарий = "Объектов обработано " +СчетчикОбъектов + ", удалено: "+ СчетчикВерсий + " версий. Затрачено "+ВремяВыполнения+" секунд.";
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,,, Комментарий);
КонецПроцедуры
Помидорами не кидаемся.