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