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