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

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

Как очистить записи регистра сведений в 1С

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

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

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

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

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

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

Второй момент — периодичность регистра. Периодический регистр хранит значения с привязкой к дате, поэтому часто требуется удалить не всё, а только старые периоды. Третий момент — участие регистра в планах обмена: если регистр входит в состав узла РИБ или обмена с другой системой, удаление записей будет зарегистрировано как изменение и уйдёт в другие базы.

Режим записиНезависимый / подчинён регистратору

Смотрите свойства регистра в конфигураторе — от этого зависит способ удаления

ПериодичностьНепериодический или с периодом

Для периодического регистра обычно чистят старые периоды, а не всё подряд

Планы обменаРегистр входит в состав узлов

Удаление уйдёт в другие базы при следующем обмене — оцените последствия

Объём данныхТысячи или миллионы записей

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

Способ 1. Полная очистка независимого регистра кодом

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

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

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

Здесь набор записей создаётся без отбора и без добавления строк, а метод Записать() заменяет содержимое регистра пустым набором — то есть удаляет всё. Это работает быстрее, чем перебор и удаление записей по одной, потому что выполняется одной операцией на уровне СУБД.

Если регистр очень большой (миллионы записей) и база клиент-серверная, даже одна такая операция может занять заметное время и заблокировать таблицу. В этом случае лучше удалять порциями с отбором, о чём ниже, или выполнять очистку в нерабочее время.

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

Способ 2. Частичная очистка по отбору

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

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

НаборЗаписей.Отбор.Валюта.Установить(НужнаяВалюта);

НаборЗаписей.Записать(); // удалены записи только по этой валюте

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

Пример удаления записей старше заданной даты через запрос и менеджеры записей:

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ Рег.Период, Рег.Валюта

|ИЗ РегистрСведений.КурсыВалют КАК Рег

|ГДЕ Рег.Период < &Граница";

Запрос.УстановитьПараметр("Граница", ДобавитьМесяц(ТекущаяДата(), -12));

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

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

Менеджер.Период = Выборка.Период;

Менеджер.Валюта = Выборка.Валюта;

Менеджер.Удалить();

КонецЦикла;

Удаление по одной записи медленнее, зато не блокирует всю таблицу и позволяет контролировать процесс. При больших объёмах добавьте выборку порциями (конструкция ПЕРВЫЕ в запросе) и паузы между итерациями.

Порядок безопасной очистки по отбору
  1. 1
    Сделайте резервную копию базы
  2. 2
    Запросом посчитайте, сколько записей попадает под условие
  3. 3
    Выполните удаление через набор записей с отбором или цикл по менеджерам записей
  4. 4
    Повторным запросом убедитесь, что остались только нужные записи
  5. 5
    Проверьте отчёты и обмены, которые используют этот регистр

Способ 3. Очистка регистра, подчинённого регистратору

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

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

НаборЗаписей = РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);

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

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

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

Если нет доступа к конфигуратору и навыков написания кода, часть задач решается штатными средствами. В пользовательском режиме откройте список регистра сведений (обычно через «Все функции» → «Регистры сведений»), установите отбор, выделите нужные строки и удалите их клавишей Delete. Способ подходит для небольшого количества записей — сотен, но не миллионов.

Для администраторов без знания языка удобны типовые и сторонние универсальные обработки: «Консоль кода», «Инструменты разработчика», «Универсальный подбор и обработка объектов». Они позволяют выполнить произвольный код или удалить объекты по отбору через форму. Такие обработки запускаются через «Файл → Открыть» и требуют прав администратора.

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

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

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

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

Цикл по менеджерам записей

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

Ручное удаление из списка

Без кода, но только для небольшого числа записей и при разрешённом интерактивном удалении

Удаление регистраторов

Единственный корректный путь для регистров, подчинённых регистратору; требует контроля логики учёта

Очистка служебных регистров: история хранения, версии, очереди

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

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

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

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

Как проверить результат очистки

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

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

Контрольные точки

Как проверить результат

Количество записей в регистре
Норма

Равно нулю или соответствует оставшемуся отбору

Тревожный признак

Записи остались — отбор не сработал или регистр подчинён регистратору

Работа отчётов по регистру
Норма

Отчёты открываются без ошибок

Тревожный признак

Ошибки или пустые данные там, где они нужны — удалили лишнее

Планы обмена
Норма

Изменения зарегистрированы осознанно и отправятся в узлы

Тревожный признак

Массовые удаления уйдут в другие базы неожиданно для их администраторов

Размер файла базы
Норма

Уменьшился после сжатия таблиц

Тревожный признак

Не изменился — нужно тестирование и исправление со сжатием

Часто задаваемые вопросы

Можно ли восстановить записи регистра сведений после удаления?

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

Почему пустой набор записей не удалил данные в подчинённом регистре?

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

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

Для периодического регистра выберите записи запросом с условием Период < &Граница и удаляйте каждую через менеджер записи, заполнив ключевые поля (период и измерения). Отбор набора записей по периоду работает ограниченно, поэтому вариант с запросом надёжнее.

Уменьшится ли размер базы сразу после очистки регистра?

Нет. Удалённые строки помечаются как свободное место внутри файла или таблицы СУБД. В файловой базе выполните «Тестирование и исправление» с включённым сжатием таблиц, в клиент-серверной — штатные операции сжатия средствами MS SQL, PostgreSQL или другой используемой СУБД.

Можно ли очистить регистр сведений без прав администратора?

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

Что будет с обменом данными после очистки регистра?

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

Итог

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

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