Очистить регистр сведений 1С - быстро и полностью
Регистры сведений в 1С со временем накапливают огромное количество ненужных данных. Это приводит к замедлению работы программы и переполнению дискового пространства на сервере. В этой статье мы рассмотрим самые эффективные способы очистки регистров сведений, которые позволят значительно ускорить 1С и освободить место на диске.
Что такое регистр сведений и когда его нужно очищать
Регистр сведений в 1С - это специальная база данных для хранения разнообразной информации. Она устроена как таблица из строк и столбцов. Строки называются записями, а столбцы - измерениями. Каждая запись содержит конкретные данные в разрезе измерений.
Например, в регистре сведений ЦеныНоменклатуры хранятся цены в разрезе товаров и дат. Одна запись будет содержать: товар, дату и цену. В регистре КурсыВалют хранятся курсы валют в разрезе валют и дат.
Существует два вида регистров сведений:
- Независимые - данные записываются напрямую в регистр
- Подчиненные - данные записываются через документы-регистраторы
Со временем в регистрах накапливается огромное количество записей, особенно в подчиненных регистрах. Это приводит к следующим проблемам:
- Замедление работы и торможение программы
- Увеличение размера базы данных и переполнение дискового пространства
- Затруднения при администрировании и обслуживании
- Ошибки и сбои при формировании отчетов
Поэтому периодическая очистка регистров сведений крайне необходима. Она позволяет избавиться от ненужных и неактуальных данных. В результате значительно ускоряется работа 1С и освобождается место на диске.
4 способа быстро очистить регистр сведений в 1С
Полная очистка независимого регистра всего за 2 строки кода
Для полной программной очистки независимого регистра сведений достаточно всего 2 строк кода. Рассмотрим на примере регистра КурсыВалют:
НабЗап = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); НабЗап.Записать();
В первой строке создаем пустой набор записей. Во второй строке записываем этот пустой набор в регистр. В результате все имеющиеся записи будут полностью замещены.
Данный способ позволяет за считанные секунды очистить даже самый большой регистр, содержащий миллионы записей.
Очистка независимого регистра с отбором по измерениям
Часто бывает необходимо очистить не весь регистр целиком, а только определенную часть записей. Для этого используется отбор по измерениям.
Например, нужно удалить записи регистра ЦеныНоменклатуры только по конкретным товарам:
НабЗап = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей(); НабЗап.Отбор.Номенклатура.Установить(МойТовар1); НабЗап.Отбор.Номенклатура.Установить(МойТовар2); НабЗап.Записать();
Таким образом, очищаются записи только по выбранным товарам. Остальные записи остаются в регистре.
Полная и выборочная очистка регистра, подчиненного документам
В отличие от независимых регистров, данные в подчиненные регистры попадают только через документы-регистраторы.
Например, регистр ОстаткиНоменклатуры заполняется документами поступления и реализации товаров. Для очистки такого регистра нужно указывать регистратор в отборе.
Полная очистка регистра по определенному регистратору:
НабЗап = РегистрыСведений.ОстаткиНоменклатуры.СоздатьНаборЗаписей(); НабЗап.Отбор.Регистратор.Установить(МойДокумент); НабЗап.Записать();
Выборочная очистка с дополнительным отбором по измерениям:
НабЗап.Отбор.Номенклатура.Установить(МойТовар); НабЗап.Записать();
1С очистить регистр сведений за период
Для очистки записей регистра сведений за определенный период времени, можно воспользоваться стандартным механизмом установки периода.
НабЗап = РегистрыСведений.Продажи.СоздатьНаборЗаписей(); НачалоПериода = НачалоМесяца(Дата(2023,2,1)); КонецПериода = КонецМесяца(Дата(2023,2,28)); НабЗап.УстановитьПериод(НачалоПериода, КонецПериода); НабЗап.Записать();
В примере будут очищены записи регистра продаж за февраль 2023 года.
Особенности очистки регистра курсов валют
Регистр сведений КурсыВалют используется для хранения курсов валют. Записи в нем создаются или автоматически при загрузке курсов из интернет, или вручную пользователями.
При очистке этого регистра нужно учитывать следующие нюансы:
- Лучше очищать курсы старше 1 года, т.к. они уже не актуальны
- Не удалять курсы текущего и предыдущего месяца
- Сохранить курсы важных валют (доллар, евро)
- Установить период очистки, например за прошлый год
НабЗап.Отбор.Период.Установить(НачалоГода(Год(ТекущаяДата())-1), КонецГода(Год(ТекущаяДата())-1)) НабЗап.Отбор.Валюта.Установить(Справочники.Валюты.НайтиПоКоду("USD")); НабЗап.Отбор.Валюта.Установить(Справочники.Валюты.НайтиПоКоду("EUR"));
Как правильно очистить регистр цен номенклатуры
В регистре ЦеныНоменклатуры накапливается большая история о ценах на товары, что со временем приводит к сильному замедлению работы.
При очистке этого регистра важные моменты:
- Очистить старые цены со скидками, которые не актуальны
- Оставить цены последних 3-6 месяцев
- Выгрузить текущие цены перед очисткой в отдельный документ на всякий случай
- Установить отбор по неактуальным видам цен
НабЗап.Отбор.ВидЦены.Установить(Справочники.ВидыЦен.НайтиПоНаименованию("Цена со скидкой"));
Полная очистка регистра сотрудников организаций за 5 минут
Регистр СотрудникиОрганизаций с течением времени сильно разрастается из-за большой текучки кадров.
Чтобы быстро очистить весь регистр целиком, достаточно:
- Сделать резервную копию базы на всякий случай
- Запустить очистку вне рабочего времени, чтобы никто не работал в программе
- Полностью перепровести документы кадрового учета после очистки
НабЗап = РегистрыСведений.СотрудникиОрганизаций.СоздатьНаборЗаписей(); НабЗап.Записать();
При этом вся история движения кадров восстановится заново за считанные минуты.
1C очистить регистр сведений по измерению
Иногда бывает необходимо удалить данные не из всего регистра целиком, а только по определенным измерениям.
Например, нужно очистить регистр себестоимости СебестоимостьНоменклатуры
только по отдельным товарам:
НабЗап.Отбор.Номенклатура.Установить(Товар1); НабЗап.Отбор.Номенклатура.Установить(Товар2);
Или очистить регистр бухгалтерии только по заданным счетам бухучета:
НабЗап.Отбор.Счет.Установить(Счет1); НабЗап.Отбор.Счет.Установить(Счет2);
Таким образом, отбор по измерениям позволяет гибко очищать данные в нужных разрезах.