К статье
Практический материал

Администрирование · 10 мин

Как очистить регистры в 1С: практическое руководство

Способы очистки регистров сведений и накопления в 1С: через обработки, код и типовые механизмы. Риски, проверка результата и типичные ошибки.

Регистры в 1С накапливают данные постоянно: регистры накопления хранят движения документов, регистры сведений — независимые записи о ценах, курсах, настройках. Со временем объём растёт, база замедляется, а часть записей становится мусором — например, записи по отключённым настройкам или движения от ошибочно проведённых документов. Очистка регистров — штатная задача администратора, но выполнять её нужно осознанно: неправильное удаление записей способно разрушить отчётность и оборотно-сальдовую ведомость.

Выбор способа зависит от типа регистра и цели. Регистры сведений, не подчинённые регистратору, очищаются напрямую — записи в них самостоятельны. Регистры, подчинённые регистратору (накопления, бухгалтерии, расчёта), физически принадлежат документам: удалить их записи можно только через отмену проведения документов или прямую манипуляцию наборами записей, что требует осторожности.

Ниже разобраны рабочие методы для обоих случаев: от безопасной очистки через интерфейс до программного удаления больших объёмов. Каждый способ сопровождается условиями применения и проверкой результата.

Что нужно сделать перед очисткой регистров

Первое и безусловное правило — резервная копия. Для файловой базы достаточно скопировать файл 1Cv8.1CD при отсутствии активных сеансов, для клиент-серверной — сделать выгрузку через конфигуратор (Администрирование → Выгрузить информационную базу) или штатный бэкап средствами СУБД. Очистка регистра необратима: корзины и отмены операции в 1С нет.

Второй шаг — определить, какие именно записи нужно удалить. Полная очистка регистра оправдана редко: чаще требуется удалить записи за старый период, по конкретной организации или по измерению. Зафиксируйте критерии отбора до начала работы и оцените объём: удаление миллионов записей одной транзакцией может надолго заблокировать базу.

Третий шаг — проверить зависимости. Записи регистров сведений могут использоваться в регламентных заданиях, обменах данными и механизмах учёта. Например, очистка регистра курсов валют сломает пересчёт валютных операций, а удаление записей регистра «Версии объектов» безопасно, но приведёт к потере истории изменений.

Очистка регистра сведений через обработку «Групповое изменение реквизитов»

В типовых конфигурациях на управляемых формах (Бухгалтерия, ERP, Управление торговлей) есть встроенный инструмент «Групповое изменение реквизитов» — он находится в разделе «Администрирование» → «Обслуживание» → «Корректировка данных». Обработка умеет не только менять реквизиты, но и удалять записи независимых регистров сведений.

Порядок работы: выберите в списке нужный регистр сведений, задайте отбор (по периоду, организации, конкретному измерению), затем в действиях выберите вариант удаления записей. Обработка покажет количество записей, которые попадут под операцию — сверьте это число с ожиданиями до запуска.

Ограничение метода: обработка работает только с регистрами сведений, не подчинёнными регистратору, и доступна пользователям с правами администратора. Для очень больших объёмов она выполняется медленно, так как идёт постраничная обработка через механизмы БСП.

Порядок действий через групповое изменение
  1. 1
    Сделайте резервную копию базы
  2. 2
    Откройте Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов
  3. 3
    Выберите регистр сведений и настройте отбор записей
  4. 4
    Проверьте количество отобранных записей
  5. 5
    Выберите действие удаления и выполните операцию
  6. 6
    Проверьте результат универсальным отчётом по регистру

Очистка регистров универсальными обработками

На диске ИТС и в составе типовых поставок есть обработка «Удаление данных информационной базы», а также распространённая обработка «Очистка регистров», которая позволяет полностью очистить выбранный регистр одной кнопкой. Такие обработки открываются через Файл → Открыть и работают как в тонком, так и в толстом клиенте.

Универсальные обработки удобны для полной очистки: они вызывают метод очистки набора записей без отбора, что выполняется быстро на уровне СУБД. Но именно поэтому они опасны — никакого отбора по умолчанию нет, и одна ошибка в выборе регистра удалит все его данные.

Практическая рекомендация: запускайте такие обработки в монопольном режиме, чтобы параллельные сеансы не записали новые данные в процессе очистки. После завершения проверьте, что регистр действительно пуст, — постройте по нему универсальный отчёт или выполните запрос в консоли запросов.

Программная очистка регистра через набор записей

Самый гибкий способ — собственный код. Для регистра сведений, не подчинённого регистратору, создаётся набор записей, при необходимости на него накладывается отбор, и вызывается запись пустого набора:

НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Период.Установить(Дата(2020, 1, 1));

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

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

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

Если нужна полная очистка без отбора, достаточно создать пустой набор и записать его с параметром Замещать = Истина — платформа выполнит быстрое удаление всех записей таблицы. Для регистров, подчинённых регистратору, отбор обязателен: набор записей всегда фильтруется по регистратору, поэтому «обнулить» такой регистр целиком через набор записей без перебора регистраторов нельзя.

Для больших объёмов удаляйте порциями: отбирайте записи пачками по несколько тысяч и очищайте в цикле с фиксацией транзакции на каждой итерации. Это снижает нагрузку на журнал транзакций СУБД и не блокирует работу пользователей надолго.

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

Очистка регистров накопления и бухгалтерии через отмену проведения

Корректный способ убрать движения из регистров накопления — отменить проведение документов-регистраторов. Для массовой операции используйте обработку «Групповое изменение реквизитов» (действие «Отменить проведение») или типовую обработку «Проведение документов» из раздела администрирования. Платформа при отмене проведения сама удалит движения по всем регистрам, к которым привязан документ.

Если документы уже удалены, а записи в регистрах остались (такое бывает после прямого удаления объектов без контроля ссылочной целостности), записи становятся «осиротевшими». Их можно удалить программно: выбрать запросом уникальных регистраторов с движениями, у которых нет документа, и для каждого записать пустой набор с отбором по этому регистратору.

Альтернатива полной отмене проведения — свёртка базы. Типовая обработка свёртки удаляет документы прошлых периодов и заменяет их остатками на дату свёртки. Это правильный путь, если цель — уменьшить объём базы, сохранив корректность учёта, а не просто вычистить регистры.

Сравнение способов очистки

Групповое изменение реквизитов

Подходит для регистров сведений и отмены проведения документов; безопасно, но медленно на больших объёмах

Универсальные обработки

Быстрая полная очистка регистра; нет отбора, высокий риск ошибочного удаления

Программный код

Максимальная гибкость и порционное удаление; требует навыков разработки и тестирования на копии

Свёртка базы

Корректное сокращение истории с сохранением остатков; длительная процедура, требует подготовки

Проверка результата и типичные ошибки

После очистки убедитесь, что данные удалены именно те и именно там. Постройте универсальный отчёт по регистру или выполните запрос с группировкой по периоду и измерениям — количество записей должно соответствовать ожиданию. Для регистров накопления дополнительно проверьте остатки: если вы отменяли проведение, остатки по затронутым позициям должны измениться предсказуемо.

Полезно выполнить тестирование и исправление базы (пункт «Реиндексация таблиц» и проверка ссылочной целостности) после массовых удалений — это ускорит дальнейшую работу и выявит битые ссылки, если очистка задела связанные объекты.

Типичные ошибки
01
Очистка без резервной копии — удалённые записи восстановить нечем
02
Удаление движений напрямую без отмены проведения — документы остаются проведёнными, отчётность расходится с данными
03
Полная очистка вместо отбора по периоду — теряются актуальные записи вместе с устаревшими
04
Удаление миллионов записей одной транзакцией — блокировки таблиц и переполнение журнала СУБД
05
Очистка регистров, участвующих в обменах — узлы обмена получают рассинхронизацию и ошибки при следующей выгрузке

FAQ: частые вопросы об очистке регистров

Можно ли очистить регистр накопления полностью, не трогая документы?

Технически — да, программно, перебрав регистраторы и записывая пустые наборы. Но это создаст рассинхронизацию: документы останутся проведёнными, а отчёты покажут нули. Корректный путь — отмена проведения документов или свёртка базы.

Почему после удаления записей размер файла базы не уменьшился?

Удалённые данные остаются внутри файла как свободное место. Для файловой базы выполните тестирование и исправление с реиндексацией или выгрузку/загрузку через dt — это физически сожмёт файл. В клиент-серверном варианте сжатие выполняется средствами СУБД (shrink).

Как очистить регистр сведений только за старый период?

Используйте отбор по полю «Период» — в обработке группового изменения реквизитов или в коде через Отбор.Период.Установить(). Для периодических регистров записи с разными датами независимы, поэтому удаление старых записей не затрагивает актуальные.

Опасно ли очищать регистры сведений, созданные для хранения настроек?

Зависит от регистра. Регистры с пользовательскими настройками отчётов или историей версий очищаются безболезненно, но пользователи потеряют свои настройки. Регистры с учётными параметрами (курсы валют, ставки, графики работы) очищать нельзя — учётные механизмы перестанут работать корректно.

Нужен ли монопольный режим для очистки регистров?

Строго обязателен только для некоторых операций вроде свёртки. Для обычной очистки монопольный режим желателен: он исключает ситуацию, когда пользователь в момент удаления записывает новые данные в тот же регистр, и снижает риск конфликтов блокировок.

Как удалить «осиротевшие» движения, если документ-регистратор уже удалён?

Запросом выберите уникальные значения регистратора из таблицы движений, для которых нет существующего документа. Затем для каждого такого значения создайте набор записей с отбором по регистратору и запишите пустой набор — записи будут удалены.

Итог

Что важно запомнить

Перед очисткой всегда делайте резервную копию и тестируйте операцию на копии базы. Регистры сведений очищайте через групповое изменение реквизитов или набор записей с отбором, движения регистров накопления — через отмену проведения документов или свёртку. После операции проверяйте результат отчётом и выполняйте реиндексацию.