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

В этой статье разберем, когда действительно нужно чистить регистры, а когда проблема кроется в другом (например, в фрагментированных индексах или неоптимизированных запросах). Покажем 3 рабочих способа очистки: ручной через конфигуратор, программный с помощью встроенных обработок и прямой через SQL-запросы. Также предупредим о критических ошибках, которые могут сделать базу неработоспособной, если действовать наугад.

Материал ориентирован на администраторов 1С, разработчиков и опытных пользователей, которые имеют доступ к конфигуратору и права на изменение данных. Если вы никогда не работали с регистрами напрямую — лучше поручите очистку специалисту.

Почему регистры 1С «засоряются» и когда их нужно чистить

Основная причина разрастания регистров — это накопление устаревших или избыточных записей. Например:

  • 📅 Исторические данные: движения документов за закрытые периоды (например, 2010–2015 годы), которые больше не нужны для анализа, но физически остаются в базе.
  • 🗑️ Тестовые или ошибочные записи: движения, созданные при отладке конфигурации, массовом удалении документов без корректного удаления движений.
  • 🔄 Дублирующиеся движения: возникают при повторном проведении документов или сбоях транзакций.
  • 📊 Служебные регистры: например, регистр ВерсииОбъектов или ПолнотекстовыйПоиск, которые могут разрастаться без контроля.

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

  • 🛠️ Фрагментацию индексов (через Тестирование и исправление в конфигураторе).
  • 🖥️ Настройки SQL-сервера: возможно, не хватает оперативной памяти или неправильно настроены планы выполнения запросов.
  • 📈 Объем временных таблиц (tempdb в MS SQL), который может переполняться при сложных отчетах.
📊 Что чаще всего замедляет вашу базу 1С?
Разросшиеся регистры
Неоптимизированные запросы
Фрагментация индексов
Нехватка ресурсов сервера
Не знаю

Очистка регистров оправдана, если:

  • База занимает непропорционально много места на диске (например, 50 ГБ при 10 000 документов).
  • Отчеты, которые раньше формировались за минуту, теперь висят по 10–15 минут.
  • При обновлении конфигурации возникают ошибки типа Недостаточно памяти для выполнения операции.
  • В логах SQL-сервера появляются предупреждения о timeout expired при работе с регистрами.
💡

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

Подготовка к очистке: бэкап, права и диагностика

Первый шаг — создать резервную копию базы. В 1С:Предприятие 8.3 это можно сделать:

  • 💾 Через конфигуратор: Администрирование → Выгрузить информационную базу.
  • 🗄️ Через SQL-сервер: если используется Microsoft SQL Server или PostgreSQL, сделайте бэкап через их собственные инструменты (например, SQL Server Management Studio).

Далее проверьте:

  • 🔑 Права доступа: у вашей учетной записи должны быть права Администратор или Полные права в конфигураторе.
  • 🛠️ Режим работы базы: очистку можно выполнять только в монопольном режиме (без подключенных пользователей).
  • 📋 Список регистров, которые планируете чистить. Узнать их можно через Конфигуратор → Объекты конфигурации → Регистры.

Сделать бэкап базы|Проверить права доступа|Убедиться в монопольном режиме|Составить список целевых регистров|Предварительно оценить объем данных-->

Для диагностики объема регистров используйте запрос в конфигураторе:

ВЫБРАТЬ

Метаданные().Имя КАК Регистр,

КОЛИЧЕСТВО(*) КАК КоличествоЗаписей

ИЗ

РегистрНакопления.ИмяРегистра КАК РегистрНакопления

ГДЕ

Период МЕЖДУ &НачалоПериода И &КонецПериода

Замените ИмяРегистра на актуальное название (например, ТоварыНаСкладах) и укажите период. Если запрос возвращает миллионы записей — это сигнал к очистке.

⚠️ Внимание: Если база работает на PostgreSQL, некоторые системные регистры (например, _AccumRgTn) могут иметь специфическую структуру. Их очистка требует отдельного подхода — не используйте универсальные скрипты.

Способ 1: Ручная очистка через конфигуратор (для небольших баз)

Этот метод подходит для баз объемом до 5–10 ГБ, где регистры не сильно фрагментированы. Плюс — не требует знания SQL. Минус — может занять много времени при большом объеме данных.

Алгоритм действий:

  1. Откройте конфигуратор в режиме 1С:Предприятие (не путать с режимом отладки!).
  2. Перейдите в Все функции → Стандартные → Поиск и замена данных.
  3. В поле Тип объекта выберите Регистр накопления (или другой тип регистра, который нужно очистить).
  4. Укажите имя регистра (например, ВзаиморасчетыСКонтрагентами).
  5. В разделе Отбор задайте период, за который нужно удалить записи (например, Дата < '20200101').
  6. Нажмите Выполнить и дождитесь окончания операции.

Для регистров сведений (например, ЦеныНоменклатуры) процесс аналогичный, но в отборе можно использовать дополнительные поля, например, Номенклатура или ТипЦены.

Что делать, если конфигуратор «завис» при очистке?

Если процесс очистки длится более 2–3 часов, не прерывайте его принудительно. Попробуйте:

1. Дождаться завершения (иногда требуется до 6–8 часов для больших баз).

2. Если базу нельзя блокировать надолго — разбейте очистку на части по годам или кварталам.

3. В крайнем случае перезапустите сервер 1С и повторите операцию с меньшим периодом данных.

После очистки обязательно выполните:

Тестирование и исправление информационной базы (с галочками "Проверять логическую целостность" и "Проверять ссылочную целостность")
⚠️ Внимание: Если в базе используются подчиненные регистры (например, регистр бухгалтерии, связанный с регистром накопления), их очистку нужно проводить одновременно. Иначе возможны расхождения в итогах.

Способ 2: Программная очистка с помощью обработок

Для крупных баз (от 10 ГБ) ручная очистка неэффективна. В этом случае используют специальные обработки, которые можно найти на портале 1С:ИТС или в открытых источниках (например, на Infostart). Популярные решения:

  • 📊 «Универсальная очистка регистров» — позволяет удалять записи по дате, виду регистра и дополнительным отборам.
  • 🗑️ «Чистка истории» — специализирована на удалении устаревших движений документов.
  • 🔄 «Оптимизатор базы 1С» — комплексный инструмент, который помимо очистки регистров исправляет индексы и сжимает таблицы.

Пример кода для создания простой обработки очистки регистра накопления:

Процедура ОчиститьРегистр(ИмяРегистра, ДатаГраница)

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

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

"ВЫБРАТЬ

| РегистрНакопления.&ИмяРегистра.Ссылка КАК Ссылка

|ИЗ

| РегистрНакопления.&ИмяРегистра КАК РегистрНакопления

|ГДЕ

| РегистрНакопления.&ИмяРегистра.Период < &ДатаГраница";

Запрос.УстановитьПараметр("ИмяРегистра", ИмяРегистра);

Запрос.УстановитьПараметр("ДатаГраница", ДатаГраница);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

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

Движение = Документы.СоздатьДвижение(ИмяРегистра);

Движение.Ссылка = Выборка.Ссылка;

Движение.Удалить();

КонецЦикла;

КонецПроцедуры

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

Тип регистра Метод очистки Пример кода
Регистр накопления Движение.Удалить()
Движение = Документы.СоздатьДвижение("ТоварыНаСкладах");

Движение.Удалить();

Регистр сведений Очистить()
Регистр = РегистрыСведений.ЦеныНоменклатуры;

Регистр.Очистить(ДатаГраница);

Регистр бухгалтерии УстановитьАктивность()
Движение.Активность = Ложь;

Готовые обработки обычно имеют графический интерфейс, где можно:

  • 📅 Выбрать период очистки (например, «до 01.01.2020»).
  • 📋 Указать конкретные регистры или типы документов.
  • 🔄 Включить режим тестирования (показывает, что будет удалено, но не удаляет реально).
💡

Используйте обработки из проверенных источников (1С:ИТС, Infostart, официальные партнеры). Самописные скрипты могут содержать ошибки, ведущие к потере данных.

Способ 3: Прямая очистка через SQL-запросы (для опытных)

Это самый быстрый способ, но и самый рискованный. Он подходит администраторам, которые разбираются в структуре базы данных и умеют работать с SQL Server Management Studio или pgAdmin (для PostgreSQL).

Основные таблицы регистров в SQL:

  • 📊 _AccumRg<ИмяРегистра> — регистры накопления.
  • 📈 _AccumRgTn<ИмяРегистра> — регистры накопления с оборотным итогом.
  • 📋 _InfoRg<ИмяРегистра> — регистры сведений.
  • 💰 _AccRg<ИмяРегистра> — регистры бухгалтерии.

Пример запроса для очистки регистра накопления ТоварыНаСкладах до 2020 года:

DELETE FROM _AccumRgТоварыНаСкладах

WHERE Period < '2020-01-01'

-- Для PostgreSQL:

DELETE FROM "_accrg_tovarynaskladah"

WHERE "period" < '2020-01-01'

Для регистров сведений (например, ЦеныНоменклатуры):

DELETE FROM _InfoRgЦеныНоменклатуры

WHERE Period < '2020-01-01'

После удаления обязательно выполните:

-- Для MS SQL:

DBCC CHECKIDENT ('_AccumRgТоварыНаСкладах', RESEED, 0)

DBCC SHRINKFILE (N'ИмяБазыData' , 1000) -- Сжатие файла базы

-- Для PostgreSQL:

VACUUM FULL ANALYZE;

⚠️ Внимание: Прямое удаление через SQL не обновляет итоги регистров. После очистки нужно перепровести все документы за текущий период, чтобы итоги совпали с движениями. Для этого используйте обработку Перепроведение документов.

Если вы работаете с PostgreSQL, учитывайте, что:

  • Имена таблиц регистров пишутся в нижнем регистре (например, _accrg_tovarynaskladah).
  • Поле периода называется period, а не Period.
  • После массового удаления нужно запустить VACUUM FULL, иначе место на диске не освободится.
Как найти имя таблицы регистра в SQL?

В конфигураторе откройте регистр в режиме редактирования. В свойствах посмотрите параметр ИмяТаблицыДвижений (для регистров накопления) или ИмяТаблицы (для регистров сведений). Имя будет в формате _AccumRgИмя или _InfoRgИмя.

Что делать после очистки: проверка и оптимизация

Очистка регистров — это только половина дела. После нее необходимо:

  1. Проверить целостность базы:
    Тестирование и исправление → Проверять логическую и ссылочную целостность

    Если найдутся ошибки — исправьте их вручную или с помощью обработки Поиск и исправление ссылок.

  2. Обновить итоги регистров:
    Все функции → Стандартные → Пересчет итогов

    Выберите очищенные регистры и запустите пересчет.

  3. Перепровести документы:
    Все функции → Стандартные → Перепроведение документов

    Укажите период, за который могли измениться движения (например, текущий год).

  4. Оптимизировать производительность:
    Все функции → Стандартные → Оптимизация информационной базы

    Эта процедура сожмет таблицы и перестроит индексы.

Также рекомендуется:

  • 📊 Сформировать тестовые отчеты (например, Оборотно-сальдовую ведомость) и сравнить их с данными до очистки.
  • 🔄 Проверить скорость работы базы: если она не улучшилась, проблема может быть в другом (например, в аппаратных ресурсах сервера).
  • 📋 Обновить статистику SQL-сервера:
    -- Для MS SQL:
    

    EXEC sp_updatestats

    -- Для PostgreSQL:

    ANALYZE;

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

Типичные ошибки и как их избежать

Очистка регистров — процедура с высоким риском ошибок. Вот самые распространенные проблемы и способы их предотвращения:

Ошибка Причина Как избежать
Потеря данных текущего периода Неправильно указан отбор по дате (например, Период <= ТекущаяДата() вместо Период < '2020-01-01'). Всегда проверяйте условие отбора в тестовом режиме (с выводом количества записей).
Расхождение итогов Удалены движения, но не пересчитаны итоги регистра. После очистки обязательно запустите Пересчет итогов.
Зависание базы при очистке Слишком большой объем данных удаляется за один раз. Разбейте очистку на части (по годам или кварталам).
Ошибки ссылочной целостности Удалены записи, на которые ссылаются документы или другие регистры. Перед очисткой проверьте зависимости через Анализ использования в конфигураторе.
Не освобождается место на диске После удаления не выполнено сжатие таблиц (для SQL) или VACUUM (для PostgreSQL). Используйте DBCC SHRINKFILE (SQL) или VACUUM FULL (PostgreSQL).

Еще одна типичная ошибка — очистка системных регистров (например, ВерсииОбъектов или ПолнотекстовыйПоиск). Это может привести к:

  • 🔍 Потере истории изменений документов.
  • 🔎 Неработоспособности полнотекстового поиска.
  • 🔄 Ошибкам при обновлении конфигурации.

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

⚠️ Внимание: В последних версиях 1С:Предприятие 8.3.20+ появились механизмы автоматической архивации данных (например, для регистра ВерсииОбъектов). Перед очисткой проверьте настройки архивации в Администрирование → Поддержка и обслуживание → Архивация данных.

FAQ: Ответы на частые вопросы

Можно ли очистить регистры без конфигуратора, прямо из пользовательского режима?

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

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

Сколько времени занимает очистка регистров для базы размером 50 ГБ?

Время зависит от:

  • 🖥️ Производительности сервера (CPU, RAM, тип дисков).
  • 📊 Объема удаляемых данных (например, очистка за 1 год или за 10 лет).
  • 🔄 Способа очистки (SQL-запросы работают быстрее, чем обработки в ).

Примерные оценки:

  • Ручная очистка через конфигуратор: от 2 до 8 часов.
  • SQL-запросы: от 30 минут до 2 часов.
  • Обработки из 1С:ИТС: от 1 до 4 часов.

Для ускорения процесса:

  • Разбейте очистку на части (например, по годам).
  • Выполняйте операцию в нерабочее время.
  • Отключите антивирус и другие фоновые задачи на сервере.
Что будет, если очистить регистр, на который ссылаются документы?

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

  • 🔗 Нарушена ссылочная целостность при открытии документов.
  • 📉 Несовпадение итогов в отчетах.
  • 🚫 Невозможность провести или перепровести документы.

Чтобы избежать этого:

  1. Перед очисткой проверьте зависимости через Анализ использования (в конфигураторе, правая кнопка на регистре → Анализ использования).
  2. Если найдутся документы, ссылающиеся на удаляемые записи, сначала архивируйте или удалите эти документы.
  3. После очистки запустите Тестирование и исправление с галочкой Исправлять найденные ошибки.
Как очистить регистр бухгалтерии, не нарушив баланс?

Регистры бухгалтерии (Хозрасчетный, Налоговый) требуют особой осторожности. Их очистка может привести к:

  • 💰 Нарушению баланса (дебет ≠ кредит).
  • 📑 Ошибкам в регламентированных отчетах (баланс, НДС).
  • 🔄 Проблемам при закрытии месяца.

Рекомендации:

  1. Очищайте только полностью закрытые периоды (например, до 2020 года, если бухгалтерская отчетность за этот год уже сдана и не будет пересматриваться).
  2. Используйте специализированные обработки, которые сохраняют взаимосвязь проводок (например, Архивация данных бухгалтерии из 1С:ИТС).
  3. После очистки обязательно:
    • Перепроведите все документы текущего года.
    • Сформируйте Оборотно-сальдовую ведомость и сравните с данными до очистки.
    • Проверьте закрытие месяца за текущий период.

    Если сомневаетесь — лучше не очищайте регистры бухгалтерии самостоятельно, а обратитесь к специалисту по 1С:Бухгалтерии.

Можно ли отменить очистку регистров, если что-то пошло не так?

Если очистка уже выполнена, отменить ее нельзя — удаленные данные восстановить можно только из бэкапа. Поэтому:

  • 💾 Всегда делайте резервную копию перед очисткой.
  • 🔄 Проверяйте результаты на тестовой копии базы.
  • 📋 Используйте режим Тестирование в обработках (он показывает, что будет удалено, но не удаляет реально).
  • Если после очистки обнаружились критичные ошибки:

    1. Восстановите базу из бэкапа.
    2. Повторите очистку с другими параметрами (например, для более раннего периода).
    3. Если бэкапа нет — обратитесь в службу поддержки или к партнерам-франчайзи.