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