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

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

Как очистить регистр сведений в 1С: способы, код и меры предосторожности

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

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

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

Какой у вас регистр и почему это важно

Перед очисткой нужно определить два свойства регистра: режим записи и периодичность. Откройте конфигуратор, найдите регистр в ветке «Регистры сведений» и посмотрите свойство «Режим записи». Если стоит «Независимый» — записи можно удалять напрямую набором записей. Если «Подчинен регистратору» — каждая строка привязана к документу, и удалять ее в обход документа нельзя: это нарушит целостность учета.

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

Полная очистка независимого регистра через код

Самый быстрый способ удалить все записи независимого регистра сведений — записать пустой набор. Код выполняется во внешней обработке, консоли кода или через «Функции для технического специалиста» в режиме предприятия.

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

Параметр «Истина» в методе Записать() включает замещение существующих записей. Поскольку набор пустой и отборы не установлены, платформа удалит все строки регистра одной операцией. На больших таблицах это работает значительно быстрее, чем перебор и удаление записей по одной.

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

Выборочная очистка по условию

Если удалить нужно не всё, а только часть записей, в набор записей добавляются отборы по измерениям или периоду. Например, чтобы очистить курсы только одной валюты, отбор устанавливается по измерению «Валюта».

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

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

Альтернатива коду — типовые и внешние обработки «Групповое изменение реквизитов» или универсальные консоли, которые позволяют отобрать записи регистра запросом и удалить их. Во многих конфигурациях также есть штатные регламентные операции: например, сокращение истории курсов валют через настройки или обработку «Удаление устаревших данных», если она предусмотрено поставщиком конфигурации.

Порядок безопасной выборочной очистки
  1. 1
    Сделайте резервную копию базы или выгрузку в dt
  2. 2
    Определите тип регистра и поля для отбора
  3. 3
    Напишите запрос, который только считает подходящие записи, и проверьте их количество
  4. 4
    Выполните удаление с отбором на тестовой копии
  5. 5
    Повторите на рабочей базе и сверьте количество удаленных строк

Очистка регистра, подчиненного регистратору

Регистр сведений, подчиненный регистратору, нельзя корректно очистить пустым набором записей без указания регистратора — такие записи хранятся как движения документов. Правильные пути: отменить проведение документов-регистраторов, пометить их на удаление и выполнить удаление помеченных объектов, либо перепровести документы после изменения логики формирования движений.

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

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

Для небольших объемов записи можно удалить вручную в режиме предприятия. Откройте регистр через «Все функции» → «Регистры сведений», выделите строки (Ctrl+A для всех видимых) и удалите их стандартной командой. Способ подходит, когда записей десятки или сотни и нужен визуальный контроль каждой удаляемой строки.

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

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

Пустой набор записей

Самый быстрый для полной очистки независимого регистра; требует прав на код и аккуратности с именем регистра

Набор записей с отбором

Подходит для выборочной чистки; нужно правильно задать отборы и проверить количество записей до удаления

Удаление вручную в форме списка

Безопасно и наглядно, но только для малых объемов; не работает для подчиненных регистров

Распроведение и удаление документов

Единственный корректный путь для регистра, подчиненного регистратору; затрагивает все движения документа

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

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

В файловой базе после массового удаления физический размер файла 1Cv8.1CD не уменьшится автоматически — для сжатия нужно выполнить тестирование и исправление с включенным сжатием таблиц. В клиент-серверном варианте место освобождается средствами СУБД по мере ее настроек.

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

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

Итог

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

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

Частые вопросы

Можно ли отменить очистку регистра сведений?

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

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

Платформа помечает место удаленных записей как свободное внутри файла, но не возвращает его операционной системе. Для файловой базы выполните «Тестирование и исправление» с включенным сжатием таблиц информационной базы.

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

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

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

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

Чем очистка регистра в файловой базе отличается от клиент-серверной?

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