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