Администрирование · 10 мин
Как очистить регистры в 1С: практическое руководство
Способы очистки регистров сведений и накопления в 1С: через обработки, код и типовые механизмы. Риски, проверка результата и типичные ошибки.
Регистры в 1С накапливают данные постоянно: регистры накопления хранят движения документов, регистры сведений — независимые записи о ценах, курсах, настройках. Со временем объём растёт, база замедляется, а часть записей становится мусором — например, записи по отключённым настройкам или движения от ошибочно проведённых документов. Очистка регистров — штатная задача администратора, но выполнять её нужно осознанно: неправильное удаление записей способно разрушить отчётность и оборотно-сальдовую ведомость.
Выбор способа зависит от типа регистра и цели. Регистры сведений, не подчинённые регистратору, очищаются напрямую — записи в них самостоятельны. Регистры, подчинённые регистратору (накопления, бухгалтерии, расчёта), физически принадлежат документам: удалить их записи можно только через отмену проведения документов или прямую манипуляцию наборами записей, что требует осторожности.
Ниже разобраны рабочие методы для обоих случаев: от безопасной очистки через интерфейс до программного удаления больших объёмов. Каждый способ сопровождается условиями применения и проверкой результата.
Что нужно сделать перед очисткой регистров
Первое и безусловное правило — резервная копия. Для файловой базы достаточно скопировать файл 1Cv8.1CD при отсутствии активных сеансов, для клиент-серверной — сделать выгрузку через конфигуратор (Администрирование → Выгрузить информационную базу) или штатный бэкап средствами СУБД. Очистка регистра необратима: корзины и отмены операции в 1С нет.
Второй шаг — определить, какие именно записи нужно удалить. Полная очистка регистра оправдана редко: чаще требуется удалить записи за старый период, по конкретной организации или по измерению. Зафиксируйте критерии отбора до начала работы и оцените объём: удаление миллионов записей одной транзакцией может надолго заблокировать базу.
Третий шаг — проверить зависимости. Записи регистров сведений могут использоваться в регламентных заданиях, обменах данными и механизмах учёта. Например, очистка регистра курсов валют сломает пересчёт валютных операций, а удаление записей регистра «Версии объектов» безопасно, но приведёт к потере истории изменений.
Очистка регистра сведений через обработку «Групповое изменение реквизитов»
В типовых конфигурациях на управляемых формах (Бухгалтерия, ERP, Управление торговлей) есть встроенный инструмент «Групповое изменение реквизитов» — он находится в разделе «Администрирование» → «Обслуживание» → «Корректировка данных». Обработка умеет не только менять реквизиты, но и удалять записи независимых регистров сведений.
Порядок работы: выберите в списке нужный регистр сведений, задайте отбор (по периоду, организации, конкретному измерению), затем в действиях выберите вариант удаления записей. Обработка покажет количество записей, которые попадут под операцию — сверьте это число с ожиданиями до запуска.
Ограничение метода: обработка работает только с регистрами сведений, не подчинёнными регистратору, и доступна пользователям с правами администратора. Для очень больших объёмов она выполняется медленно, так как идёт постраничная обработка через механизмы БСП.
- 1Сделайте резервную копию базы
- 2Откройте Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов
- 3Выберите регистр сведений и настройте отбор записей
- 4Проверьте количество отобранных записей
- 5Выберите действие удаления и выполните операцию
- 6Проверьте результат универсальным отчётом по регистру
Очистка регистров универсальными обработками
На диске ИТС и в составе типовых поставок есть обработка «Удаление данных информационной базы», а также распространённая обработка «Очистка регистров», которая позволяет полностью очистить выбранный регистр одной кнопкой. Такие обработки открываются через Файл → Открыть и работают как в тонком, так и в толстом клиенте.
Универсальные обработки удобны для полной очистки: они вызывают метод очистки набора записей без отбора, что выполняется быстро на уровне СУБД. Но именно поэтому они опасны — никакого отбора по умолчанию нет, и одна ошибка в выборе регистра удалит все его данные.
Практическая рекомендация: запускайте такие обработки в монопольном режиме, чтобы параллельные сеансы не записали новые данные в процессе очистки. После завершения проверьте, что регистр действительно пуст, — постройте по нему универсальный отчёт или выполните запрос в консоли запросов.
Программная очистка регистра через набор записей
Самый гибкий способ — собственный код. Для регистра сведений, не подчинённого регистратору, создаётся набор записей, при необходимости на него накладывается отбор, и вызывается запись пустого набора:
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(Дата(2020, 1, 1));
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
Если нужна полная очистка без отбора, достаточно создать пустой набор и записать его с параметром Замещать = Истина — платформа выполнит быстрое удаление всех записей таблицы. Для регистров, подчинённых регистратору, отбор обязателен: набор записей всегда фильтруется по регистратору, поэтому «обнулить» такой регистр целиком через набор записей без перебора регистраторов нельзя.
Для больших объёмов удаляйте порциями: отбирайте записи пачками по несколько тысяч и очищайте в цикле с фиксацией транзакции на каждой итерации. Это снижает нагрузку на журнал транзакций СУБД и не блокирует работу пользователей надолго.
НаборЗаписей = РегистрыСведений.ВерсииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина); // полная очистка регистраОчистка регистров накопления и бухгалтерии через отмену проведения
Корректный способ убрать движения из регистров накопления — отменить проведение документов-регистраторов. Для массовой операции используйте обработку «Групповое изменение реквизитов» (действие «Отменить проведение») или типовую обработку «Проведение документов» из раздела администрирования. Платформа при отмене проведения сама удалит движения по всем регистрам, к которым привязан документ.
Если документы уже удалены, а записи в регистрах остались (такое бывает после прямого удаления объектов без контроля ссылочной целостности), записи становятся «осиротевшими». Их можно удалить программно: выбрать запросом уникальных регистраторов с движениями, у которых нет документа, и для каждого записать пустой набор с отбором по этому регистратору.
Альтернатива полной отмене проведения — свёртка базы. Типовая обработка свёртки удаляет документы прошлых периодов и заменяет их остатками на дату свёртки. Это правильный путь, если цель — уменьшить объём базы, сохранив корректность учёта, а не просто вычистить регистры.
Сравнение способов очистки
Подходит для регистров сведений и отмены проведения документов; безопасно, но медленно на больших объёмах
Быстрая полная очистка регистра; нет отбора, высокий риск ошибочного удаления
Максимальная гибкость и порционное удаление; требует навыков разработки и тестирования на копии
Корректное сокращение истории с сохранением остатков; длительная процедура, требует подготовки
Проверка результата и типичные ошибки
После очистки убедитесь, что данные удалены именно те и именно там. Постройте универсальный отчёт по регистру или выполните запрос с группировкой по периоду и измерениям — количество записей должно соответствовать ожиданию. Для регистров накопления дополнительно проверьте остатки: если вы отменяли проведение, остатки по затронутым позициям должны измениться предсказуемо.
Полезно выполнить тестирование и исправление базы (пункт «Реиндексация таблиц» и проверка ссылочной целостности) после массовых удалений — это ускорит дальнейшую работу и выявит битые ссылки, если очистка задела связанные объекты.
FAQ: частые вопросы об очистке регистров
Можно ли очистить регистр накопления полностью, не трогая документы?
Технически — да, программно, перебрав регистраторы и записывая пустые наборы. Но это создаст рассинхронизацию: документы останутся проведёнными, а отчёты покажут нули. Корректный путь — отмена проведения документов или свёртка базы.
Почему после удаления записей размер файла базы не уменьшился?
Удалённые данные остаются внутри файла как свободное место. Для файловой базы выполните тестирование и исправление с реиндексацией или выгрузку/загрузку через dt — это физически сожмёт файл. В клиент-серверном варианте сжатие выполняется средствами СУБД (shrink).
Как очистить регистр сведений только за старый период?
Используйте отбор по полю «Период» — в обработке группового изменения реквизитов или в коде через Отбор.Период.Установить(). Для периодических регистров записи с разными датами независимы, поэтому удаление старых записей не затрагивает актуальные.
Опасно ли очищать регистры сведений, созданные для хранения настроек?
Зависит от регистра. Регистры с пользовательскими настройками отчётов или историей версий очищаются безболезненно, но пользователи потеряют свои настройки. Регистры с учётными параметрами (курсы валют, ставки, графики работы) очищать нельзя — учётные механизмы перестанут работать корректно.
Нужен ли монопольный режим для очистки регистров?
Строго обязателен только для некоторых операций вроде свёртки. Для обычной очистки монопольный режим желателен: он исключает ситуацию, когда пользователь в момент удаления записывает новые данные в тот же регистр, и снижает риск конфликтов блокировок.
Как удалить «осиротевшие» движения, если документ-регистратор уже удалён?
Запросом выберите уникальные значения регистратора из таблицы движений, для которых нет существующего документа. Затем для каждого такого значения создайте набор записей с отбором по регистратору и запишите пустой набор — записи будут удалены.
Что важно запомнить
Перед очисткой всегда делайте резервную копию и тестируйте операцию на копии базы. Регистры сведений очищайте через групповое изменение реквизитов или набор записей с отбором, движения регистров накопления — через отмену проведения документов или свёртку. После операции проверяйте результат отчётом и выполняйте реиндексацию.