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

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

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

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

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

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

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

Как определить тип регистра перед очисткой

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

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

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

Независимый режим записиМожно очищать напрямую

Доступны все способы: интерфейс, обработка, код

Подчинён регистраторуПрямая очистка запрещена

Удаляйте или отменяйте проведение документов-регистраторов

Периодический регистрВозможна частичная очистка

Определите границу периода, старше которой данные не нужны

Регистр в плане обменаРиск рассинхронизации

Проверьте состав плана обмена перед удалением

Очистка через пользовательский интерфейс

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

Если команды «Очистить» нет, доступна ручная выборочная очистка: выделите записи (Ctrl+A выделяет все загруженные строки) и нажмите Delete или кнопку удаления. Этот способ подходит для небольших регистров — при сотнях тысяч записей интерфейс будет работать медленно, а удаление порциями займёт много времени.

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

Очистка через интерфейс
  1. 1
    Сделайте резервную копию базы
  2. 2
    Откройте список регистра через «Все функции → Регистры сведений»
  3. 3
    Проверьте режим записи регистра в конфигураторе
  4. 4
    В меню «Ещё» выберите «Очистить» или выделите записи и удалите их
  5. 5
    Дождитесь завершения операции и проверьте, что список пуст

Очистка кодом на встроенном языке

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

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

НаборЗаписей.Записать(); // удаляет все записи регистра

Для частичной очистки установите отбор по измерениям или периоду. Например, удаление записей по конкретному элементу измерения:

НаборЗаписей = РегистрыСведений.ОтветственныеЛица.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Организация.Установить(СсылкаНаОрганизацию);

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

Для удаления старых периодов в большом периодическом регистре эффективнее цикл с выборкой: запросом получите записи старше граничной даты, затем удаляйте их порциями через набор записей с отбором по периоду и ключевым измерениям. Прямой запрос «ВЫБРАТЬ ... УДАЛИТЬ» в 1С не существует — удаление всегда идёт через объектную модель (набор записей) или метод Удалить() у менеджера записи.

bsl
Запрос = Новый Запрос("ВЫБРАТЬ РАЗЛИЧНЫЕ Период ИЗ РегистрСведений.КурсыВалют ГДЕ Период < &Граница");
Запрос.УстановитьПараметр("Граница", ДобавитьМесяц(ТекущаяДата(), -12));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
    Набор.Отбор.Период.Установить(Выборка.Период);
    Набор.Записать();
КонецЦикла;

Очистка типовыми обработками

Во многих конфигурациях на базе Библиотеки стандартных подсистем есть инструмент «Групповое изменение реквизитов» (раздел «Администрирование → Обслуживание»), который умеет работать с регистрами сведений: через него можно массово удалить записи по произвольному отбору без написания кода. Откройте обработку, выберите регистр сведений как тип объекта, задайте отбор и выполните действие удаления.

Для файловых баз и серверных баз под управлением СУБД существуют также внешние универсальные обработки очистки регистров с диска ИТС. Они удобны, когда нужно очистить сразу несколько регистров по расписанию. Используйте только обработки из доверенных источников: любая внешняя обработка выполняется с вашими правами и может изменить любые данные базы.

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

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

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

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

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

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

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

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

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

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

Список пуст либо содержит только записи вне отбора

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

Записи остались — операция прервана или отбор задан неверно

Работа обменов данными
Норма

Синхронизация проходит без ошибок

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

Ошибки регистрации — нужна повторная регистрация объектов

Отчёты, использующие регистр
Норма

Отчёты формируются с ожидаемыми данными

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

Пустые или искажённые показатели — удалено лишнее

Права и блокировки
Норма

Операция завершилась без сообщений о блокировках

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

Конфликт блокировок — повторите в монопольном режиме

Типичные ошибки при очистке

Чаще всего проблемы возникают не из-за самой операции, а из-за невнимательности к контексту: очищают не тот регистр, забывают про отбор или работают без копии. Отдельная группа ошибок — попытка удалить миллионы записей одной транзакцией: на больших регистрах это приводит к длительным блокировкам и переполнению журнала транзакций на серверной СУБД. Удаляйте порциями по 10–50 тысяч записей в цикле.

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

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

Независимый регистр сведений очищается через «Ещё → Очистить», обработку группового изменения или запись пустого набора записей; подчинённый регистратору — только через документы. Перед очисткой сделайте резервную копию, большие объёмы удаляйте порциями, после — проверьте количество записей и работу обменов.

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

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

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

Как очистить регистр сведений в файловой базе через конфигуратор?

Штатной кнопки очистки в конфигураторе нет. Запустите базу в режиме предприятия через «Сервис → 1С:Предприятие» и используйте интерфейс, обработку или консоль кода. Альтернатива — отладка с выполнением произвольного кода очистки.

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

Не сразу. В файловых базах физическое уменьшение происходит после тестирования и исправления с включённым сжатием таблиц. На серверных СУБД потребуется сжатие средствами СУБД (shrink), которое выполняет администратор баз данных.

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

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

Что делать, если при очистке возникает ошибка блокировки?

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

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

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