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