Регламентное задание: Очистка регистра сведений "Версии объектов"

28.06.18

База данных - Свертка базы

У каждого была проблема «растущего» регистра "Версии объектов". Мы дорастили просто до чудовищных размеров(20 мил.) почистить обработкой очень трудоемко, плюс баз у нас много. Решили написать  регламентное задание.

Скачать исходный код

Наименование Файл Версия Размер
Обработка «Очистки Регистра сведений 'Версии объектов'»:
.epf 6,68Kb
19
.epf 6,68Kb 19 Скачать

Постановка задачи:

  • Чистит каждую ночь по 5 часов

  • Удаляет записи прошлых лет

  • Оставляет всегда 1 самую старую версию.

  • После отработки пишет в журнал регистрации информацию по проделанной работе.

Все входные параметры легко зашиваются на константы.

Проверено на УПП 107.2.1.3 платформа (8.3.8.1933). 

После очистки рекомендую сделать сжатие базы.

Листинг регламентированного задания.

 

Процедура ВыполнитьОчисткуПоВидуОбъекта() Экспорт

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

     КоличествоВерсий = СтрокаОбъект.НомерВерсии;

    //Вводим 2 цикл для того чтоб оставить только 1 самую новую версию

    Пока КоличествоВерсий > 1 цикл

            КоличествоВерсий = КоличествоВерсий - 1;

            НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();

            НаборЗаписей.Отбор.НомерВерсии.Установить(КоличествоВерсий);

            НаборЗаписей.Отбор.Объект.Установить(СтрокаОбъект.Объект);

            НаборЗаписей.Записать();

            СчетчикВерсий = СчетчикВерсий + 1;

            СчетчикОбъектов = СчетчикОбъектов + 1;

            // Прекращаем работу, если время прошло

            Если ТекущаяДата() > ОстановитьПосле Тогда

                    ДатаОкончания = ТекущаяДата();

                    ВремяВыполнения = ДатаОкончания - ДатаНачало;

                    ИмяСобытия = "Замер времени очистки Регистра сведений 'Версии объектов'";

                    Комментарий = "Объектов обработано " +СчетчикОбъектов + ", удалено: "+ СчетчикВерсий + " версий. Затрачено "+ВремяВыполнения+" секунд.";            

                    ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,,, Комментарий);                

                    Возврат

            КонецЕсли;

        КонецЦикла;

    КонецЦикла;

//Вдруг чудо и закончили раньше 5 часов

ДатаОкончания = ТекущаяДата();

ВремяВыполнения = ДатаОкончания - ДатаНачало;

ИмяСобытия = "Замер времени очистки Регистра сведений 'Версии объектов'";

Комментарий = "Объектов обработано " +СчетчикОбъектов + ", удалено: "+ СчетчикВерсий + " версий. Затрачено "+ВремяВыполнения+" секунд.";            

ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация,,, Комментарий);                

КонецПроцедуры

 

Помидорами не кидаемся.

См. также

Оптимизированная свертка Бухгалтерии 3.0

Свертка базы Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Платные (руб)

Расширение позволяет за 1-2 дня свернуть базу с десятками миллионов документов. Использует оптимизированный алгоритм определения документов, на которые нет ссылок, для последующего удаления 16 фоновыми заданиями. Не помечает документы на удаление.

38400 руб.

08.02.2024    624    2    0    

3

Удаление данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 УТ 10.3./11, БП 2/3, ЗУП 2.5/3, КА 1.1/2, УНФ 1.6/3.0

Чистка данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление торговлей 11 Платные (руб)

Данные обработки помогут Вам легко и, главное быстро, выполнить удаление любых данных в Ваших базах 1С на платформах 8.1-8.3. Обработки помогут легко просмотреть связи ссылок в виде дерева, выбрать что удалять, а что нет, используя любые отборы. Это позволит уменьшить объем лишней и не нужной информации в справочниках и документах, планах видов характеристик и др. объектах и облегчит работу с данными пользователям и Вам. Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. (Обновление от 04.10.2023, версия 4.2)

9600 руб.

22.02.2013    136452    249    144    

418

Многофункциональная выгрузка из 1С:УТ 11/ УТ 10 в 1С:БП2, БП3 (соответствия товаров, контрагентов, складов, статей ДДС)+Свёртка по НДС

Перенос данных 1C Оптовая торговля Свертка базы Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Хотите точно знать, что вы выгружаете? Хотите сворачивать товары по НДС или фильтровать товары по доп. реквизиту? Вы волшебник, которому необходимо превращать одних контрагентов в других? Хотите при выгрузке превратить группу товаров в один? Или просто нужен удобный OLE обмен между 1C:Управление торговлей (ред. 11 или 10) и 1С:Бухгалтерия предприятия (ред. 2 или 3). Тогда эта обработка для вас!

10900 руб.

19.04.2013    169495    351    397    

327

Универсальное выборочное удаление данных из базы 1С (любые конфигурации на упр.формах: БП 3.0, УТ 11, КА 2, ERP, УНФ, ЗУП 3, Розница и т.д.)

Чистка данных Платформа 1С v8.3 Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Обработка позволяет удобно выборочно удалить данные из базы 1С. Это могут быть как неиспользуемые элементы справочников, так и неактуальные организации. При этом есть возможность провести анализ пересечений документов с другими организациями и таким образом уберечься от того, что при удалении обороты по другой организации изменятся.

3350 руб.

28.11.2019    24547    49    16    

62

Обрезание базы 1С

Свертка базы 8.3.8 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Управленческий учет Платные (руб)

Механизм обрезания (свертки) базы 1С. Описан процесс переноса среза остатков в новую базу. Представлено прикладное решение - обработка по переносу данных. Обработка работает в толстом и в тонком клиентах. Реализован способ обмена между базами без длительного отключения рабочей базы.

7200 руб.

27.03.2023    4394    12    2    

14

SALE! 10%

Выборочное удаление организаций из баз (управляемые формы), с удалением всех ссылающихся на эти организации данных

Чистка данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Позволяет удалить организации из любых программ на управляемых формах (БП 3.0, УТ 11, КА 2, ERP 2, ЗУП 3.0, УНФ, Розница 2.0 и пр.). Главное требование - программа должна содержать справочник "Организации". Реализован самый быстрый алгоритм непосредственного удаления объектов. Работает даже на базах большого размера. Для ускорения работы алгоритма не запускается проверка контроля ссылочной целостности. Проверку учета можно запустить отдельно с помощью дополнительной обработки. Необходимо перед удалением самостоятельно проверить базу на наличие перекрестных ссылок разных организаций в одном документе. Эту дополнительную обработку проверки перекрестных ссылок по запросу предоставляем бесплатно нашим покупателям.

3980 3582 руб.

16.03.2015    114239    183    77    

219

Замена Номенклатуры+Характеристики

Чистка данных Логистика, склад и ТМЦ Платформа 1С v8.3 План видов характеристик 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Настраиваемая обработка, позволяющая заменить пару: Номенклатура+Характеристика в документах, их движениях и независимых регистрах сведений. Без перепроведения. Поможет, если вы по каким-то причинам решили отказаться от характеристик

3600 руб.

04.08.2015    41297    89    70    

50

Удаление битых ссылок 1С в базе без монопольного режима

Чистка данных Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если в вашей информационной базе крутится очень много данных, или база должна быть доступна 24/7 (как в моем случае), или же вы боитесь запускать тестирование и исправление, НО существует потребность удалить битые ссылки, тогда эта обработка сможет Вам помочь. Обработка выявляет битые ссылки как в самих объектах метаданных, так и в их табличных частях(!), а так же может их удалить.

2400 руб.

23.08.2021    9328    15    3    

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


//Рекурсия
Процедура УдалитьСтарыеВерсии(Запрос, СчетчикВерсий, СчетчикОбъектов, ОстановитьПосле)
	
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
	
	Выборка = Результат.Выбрать();
	н=0; Всего = Выборка.Количество();
	Пока Выборка.Следующий() Цикл
		н=н+1;
		НаборЗаписей.Отбор.НомерВерсии.Установить(Выборка.НомерВерсии);
		НаборЗаписей.Отбор.Объект.Установить(Выборка.Объект);
		НаборЗаписей.Записать();
		
		#Если Клиент Тогда
			ОбработкаПрерыванияПользователя();
			Если н%50=0 Тогда
				Состояние("Обработано в этой порции данных" + н+"/"+Всего);
			КонецЕсли;
		#КонецЕсли
		
		СчетчикВерсий = СчетчикВерсий + 1;
		СчетчикОбъектов = СчетчикОбъектов + 1;
		
		Если ТекущаяДата() >= ОстановитьПосле Тогда
			Возврат
		КонецЕсли;
	КонецЦикла;
	
	УдалитьСтарыеВерсии(Запрос, СчетчикВерсий, СчетчикОбъектов, ОстановитьПосле);
	
КонецПроцедуры
Показать
2. abadonna83 44 28.06.18 15:12 Сейчас в теме
Нравится решение

НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();

Пока Выборка.Следующий() Цикл

Далее уже отборы и запись.
3. mike_pol 29 29.06.18 15:07 Сейчас в теме
Есть ряд замечаний:
1. не понятно, вы хотите оставить самый первый или самый последний экземпляр? Удаляя все записи, кроме первой или последней, вы лишаете себя возможности видеть все изменения, вносимые пользователями. В результате прояснить: кто, когда изменил документ и что изменено не представляется возможным. ( в случает отличия с печатной формой).
2. Ежедневно выставляя параметр запроса "Период" как начало года, вы не уменьшаете объем данных регистра за текущий год.(т.е. весь текущий год регистр растет)- текущий год не обрабатывается. ( запускать обработку ежедневно не имеет смысла - только раз в году). Обработав первый раз регистр "Версии объектов" в 2018 году, набор данных за 2017 год и ранее мало изменится, т.к. вам навряд ли разрешат изменять данные закрытых периодов, а реквизит регистра ДатаВерсии будет = дате записи, внесения изменений или перепроведения - в любом случае>01.01.2018
4. abadonna83 44 05.07.18 10:35 Сейчас в теме
Постановка задачи:
Оставляем самую свежую запись за 2017 год.Общая история хранится в бекапах.
При больших объемах регистра в 20 мил записей до 2017 г. удалять приходится порциями.
Закрытие периода не влияет на регистр "Версии объектов". Ночные задания проходят под правами администратора.

Все входные параметры(Период отбора, Количество оставляемых версия, Время работы) можно зашить на Константы в таком случае работа механизма будет гибкой.
5. shard 279 16.07.18 13:05 Сейчас в теме
у себя для очистки версий использую следующий принцип:
1) запросом выбираю объекты, которые не изменялись с какого-то момента времени (например с 01.01.18) - эти записи уже можно назвать условно постоянными и история по ним в рабочей базе не так важна.
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВерсииОбъектов.Объект,
	МАКСИМУМ(ВерсииОбъектов.НомерВерсии) КАК НомерВерсииДо18,
	0 КАК МаксНомерВерсии
ПОМЕСТИТЬ ВТ
ИЗ
	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов
ГДЕ
	ВерсииОбъектов.ДатаВерсии < ДАТАВРЕМЯ(2018, 1, 1, 0, 0, 0)

СГРУППИРОВАТЬ ПО
	ВерсииОбъектов.Объект

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ
	ВерсииОбъектов.Объект,
	0,
	МАКСИМУМ(ВерсииОбъектов.НомерВерсии)
ИЗ
	РегистрСведений.ВерсииОбъектов КАК ВерсииОбъектов

СГРУППИРОВАТЬ ПО
	ВерсииОбъектов.Объект
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Объект,
	СУММА(ВТ.НомерВерсииДо18) КАК НомерВерсииДо18,
	СУММА(ВТ.МаксНомерВерсии) КАК МаксНомерВерсии
ИЗ
	ВТ КАК ВТ

СГРУППИРОВАТЬ ПО
	ВТ.Объект
имеющие
	СУММА(ВТ.НомерВерсииДо18) = СУММА(ВТ.МаксНомерВерсии)
	
Показать

2) очищаю версии этих объектов
Инд = 0; Всего = РезультатТаблица.Количество();
нз=регистрысведений.ВерсииОбъектов.создатьнаборзаписей();
отбор=нз.отбор.объект;

Для Каждого Выборка Из РезультатТаблица Цикл
	ОбработкаПрерыванияПользователя();
	
	отбор.установить(выборка.объект);
	нз.записать();

	Состояние(""+Инд+" из "+Всего);
	Инд = Инд + 1;
КонецЦикла; 
Показать


обращаю внимание что определения переменных НЗ и ОТБОР вынесены за пределы цикла. 480 тысяч записей по 130 тысячам объектов были освобождены в течение 5-6 минут.
6. abadonna83 44 16.07.18 17:05 Сейчас в теме
Непонятно зачем эта строка

отбор=нз.отбор.объект;
Оставьте свое сообщение