Регистры в 1С:Предприятие — это системные объекты, которые хранят данные о движениях документов, остатках, накоплениях и другой аналитической информации. Со временем они могут разрастаться до гигантских размеров, замедляя работу базы, увеличивая время формирования отчетов и даже вызывая ошибки при обновлении. Но очистка регистров — это не рутинная процедура, а ответственная операция, которая требует понимания структуры базы и возможных последствий.
В этой статье разберем, когда действительно нужно чистить регистры, а когда проблема кроется в другом (например, в фрагментированных индексах или неоптимизированных запросах). Покажем 3 рабочих способа очистки: ручной через конфигуратор, программный с помощью встроенных обработок и прямой через SQL-запросы. Также предупредим о критических ошибках, которые могут сделать базу неработоспособной, если действовать наугад.
Материал ориентирован на администраторов 1С, разработчиков и опытных пользователей, которые имеют доступ к конфигуратору и права на изменение данных. Если вы никогда не работали с регистрами напрямую — лучше поручите очистку специалисту.
Почему регистры 1С «засоряются» и когда их нужно чистить
Основная причина разрастания регистров — это накопление устаревших или избыточных записей. Например:
- 📅 Исторические данные: движения документов за закрытые периоды (например, 2010–2015 годы), которые больше не нужны для анализа, но физически остаются в базе.
- 🗑️ Тестовые или ошибочные записи: движения, созданные при отладке конфигурации, массовом удалении документов без корректного удаления движений.
- 🔄 Дублирующиеся движения: возникают при повторном проведении документов или сбоях транзакций.
- 📊 Служебные регистры: например, регистр
ВерсииОбъектовилиПолнотекстовыйПоиск, которые могут разрастаться без контроля.
Но не всегда медленная работа базы связана именно с регистрами. Перед очисткой проверьте:
- 🛠️ Фрагментацию индексов (через
Тестирование и исправлениев конфигураторе). - 🖥️ Настройки SQL-сервера: возможно, не хватает оперативной памяти или неправильно настроены планы выполнения запросов.
- 📈 Объем временных таблиц (
tempdbв MS SQL), который может переполняться при сложных отчетах.
Очистка регистров оправдана, если:
- База занимает непропорционально много места на диске (например, 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С:Предприятие(не путать с режимом отладки!). - Перейдите в
Все функции → Стандартные → Поиск и замена данных. - В поле
Тип объектавыберитеРегистр накопления(или другой тип регистра, который нужно очистить). - Укажите имя регистра (например,
ВзаиморасчетыСКонтрагентами). - В разделе
Отборзадайте период, за который нужно удалить записи (например,Дата < '20200101'). - Нажмите
Выполнитьи дождитесь окончания операции.
Для регистров сведений (например, ЦеныНоменклатуры) процесс аналогичный, но в отборе можно использовать дополнительные поля, например, Номенклатура или ТипЦены.
Что делать, если конфигуратор «завис» при очистке?
Если процесс очистки длится более 2–3 часов, не прерывайте его принудительно. Попробуйте:
1. Дождаться завершения (иногда требуется до 6–8 часов для больших баз).
2. Если базу нельзя блокировать надолго — разбейте очистку на части по годам или кварталам.
3. В крайнем случае перезапустите сервер 1С и повторите операцию с меньшим периодом данных.
После очистки обязательно выполните:
Тестирование и исправление информационной базы (с галочками "Проверять логическую целостность" и "Проверять ссылочную целостность")
⚠️ Внимание: Если в базе используются подчиненные регистры (например, регистр бухгалтерии, связанный с регистром накопления), их очистку нужно проводить одновременно. Иначе возможны расхождения в итогах.
Способ 2: Программная очистка с помощью обработок
Для крупных баз (от 10 ГБ) ручная очистка неэффективна. В этом случае используют специальные обработки, которые можно найти на портале 1С:ИТС или в открытых источниках (например, на Infostart). Популярные решения:
- 📊 «Универсальная очистка регистров» — позволяет удалять записи по дате, виду регистра и дополнительным отборам.
- 🗑️ «Чистка истории» — специализирована на удалении устаревших движений документов.
- 🔄 «Оптимизатор базы 1С» — комплексный инструмент, который помимо очистки регистров исправляет индексы и сжимает таблицы.
Пример кода для создания простой обработки очистки регистра накопления:
Процедура ОчиститьРегистр(ИмяРегистра, ДатаГраница)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрНакопления.&ИмяРегистра.Ссылка КАК Ссылка
|ИЗ
| РегистрНакопления.&ИмяРегистра КАК РегистрНакопления
|ГДЕ
| РегистрНакопления.&ИмяРегистра.Период < &ДатаГраница";
Запрос.УстановитьПараметр("ИмяРегистра", ИмяРегистра);
Запрос.УстановитьПараметр("ДатаГраница", ДатаГраница);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Движение = Документы.СоздатьДвижение(ИмяРегистра);
Движение.Ссылка = Выборка.Ссылка;
Движение.Удалить();
КонецЦикла;
КонецПроцедуры
Этот код удаляет все движения регистра до указанной даты. Для регистров сведений логика будет другой — там нужно использовать метод УстановитьЗначениеРесурса() или Очистить().
| Тип регистра | Метод очистки | Пример кода |
|---|---|---|
| Регистр накопления | Движение.Удалить() |
|
| Регистр сведений | Очистить() |
|
| Регистр бухгалтерии | УстановитьАктивность() |
|
Готовые обработки обычно имеют графический интерфейс, где можно:
- 📅 Выбрать период очистки (например, «до 01.01.2020»).
- 📋 Указать конкретные регистры или типы документов.
- 🔄 Включить режим тестирования (показывает, что будет удалено, но не удаляет реально).
Используйте обработки из проверенных источников (1С:ИТС, Infostart, официальные партнеры). Самописные скрипты могут содержать ошибки, ведущие к потере данных.
Способ 3: Прямая очистка через SQL-запросы (для опытных)
Это самый быстрый способ, но и самый рискованный. Он подходит администраторам, которые разбираются в структуре базы данных 1С и умеют работать с 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Имя.
Что делать после очистки: проверка и оптимизация
Очистка регистров — это только половина дела. После нее необходимо:
- Проверить целостность базы:
Тестирование и исправление → Проверять логическую и ссылочную целостностьЕсли найдутся ошибки — исправьте их вручную или с помощью обработки
Поиск и исправление ссылок. - Обновить итоги регистров:
Все функции → Стандартные → Пересчет итоговВыберите очищенные регистры и запустите пересчет.
- Перепровести документы:
Все функции → Стандартные → Перепроведение документовУкажите период, за который могли измениться движения (например, текущий год).
- Оптимизировать производительность:
Все функции → Стандартные → Оптимизация информационной базыЭта процедура сожмет таблицы и перестроит индексы.
Также рекомендуется:
- 📊 Сформировать тестовые отчеты (например,
Оборотно-сальдовую ведомость) и сравнить их с данными до очистки. - 🔄 Проверить скорость работы базы: если она не улучшилась, проблема может быть в другом (например, в аппаратных ресурсах сервера).
- 📋 Обновить статистику SQL-сервера:
-- Для MS SQL:EXEC sp_updatestats
-- Для PostgreSQL:
ANALYZE;
Если после очистки появились ошибки типа Несовпадение итогов или Нарушена ссылочная целостность, воспользуйтесь обработкой Поиск и исправление ошибок в данных (доступна на 1С:ИТС).
Типичные ошибки и как их избежать
Очистка регистров — процедура с высоким риском ошибок. Вот самые распространенные проблемы и способы их предотвращения:
| Ошибка | Причина | Как избежать |
|---|---|---|
| Потеря данных текущего периода | Неправильно указан отбор по дате (например, Период <= ТекущаяДата() вместо Период < '2020-01-01'). |
Всегда проверяйте условие отбора в тестовом режиме (с выводом количества записей). |
| Расхождение итогов | Удалены движения, но не пересчитаны итоги регистра. | После очистки обязательно запустите Пересчет итогов. |
| Зависание базы при очистке | Слишком большой объем данных удаляется за один раз. | Разбейте очистку на части (по годам или кварталам). |
| Ошибки ссылочной целостности | Удалены записи, на которые ссылаются документы или другие регистры. | Перед очисткой проверьте зависимости через Анализ использования в конфигураторе. |
| Не освобождается место на диске | После удаления не выполнено сжатие таблиц (для SQL) или VACUUM (для PostgreSQL). |
Используйте DBCC SHRINKFILE (SQL) или VACUUM FULL (PostgreSQL). |
Еще одна типичная ошибка — очистка системных регистров (например, ВерсииОбъектов или ПолнотекстовыйПоиск). Это может привести к:
- 🔍 Потере истории изменений документов.
- 🔎 Неработоспособности полнотекстового поиска.
- 🔄 Ошибкам при обновлении конфигурации.
Если вы случайно очистили системный регистр, восстановите его из бэкапа или обратитесь в поддержку 1С.
⚠️ Внимание: В последних версиях 1С:Предприятие 8.3.20+ появились механизмы автоматической архивации данных (например, для регистраВерсииОбъектов). Перед очисткой проверьте настройки архивации вАдминистрирование → Поддержка и обслуживание → Архивация данных.
FAQ: Ответы на частые вопросы
Можно ли очистить регистры без конфигуратора, прямо из пользовательского режима?
Нет, для очистки регистров обязательно нужен доступ в конфигуратор с правами администратора. В пользовательском режиме можно только просматривать данные регистров, но не изменять их напрямую.
Исключение — если в вашей конфигурации есть специальные обработки (например, для архивации данных), которые можно запустить из интерфейса 1С:Предприятие. Но и в этом случае реальная очистка будет выполняться на уровне конфигуратора.
Сколько времени занимает очистка регистров для базы размером 50 ГБ?
Время зависит от:
- 🖥️ Производительности сервера (CPU, RAM, тип дисков).
- 📊 Объема удаляемых данных (например, очистка за 1 год или за 10 лет).
- 🔄 Способа очистки (SQL-запросы работают быстрее, чем обработки в 1С).
Примерные оценки:
- Ручная очистка через конфигуратор: от 2 до 8 часов.
- SQL-запросы: от 30 минут до 2 часов.
- Обработки из 1С:ИТС: от 1 до 4 часов.
Для ускорения процесса:
- Разбейте очистку на части (например, по годам).
- Выполняйте операцию в нерабочее время.
- Отключите антивирус и другие фоновые задачи на сервере.
Что будет, если очистить регистр, на который ссылаются документы?
Если удалить записи регистра, на которые есть ссылки из документов, возникнут ошибки:
- 🔗
Нарушена ссылочная целостностьпри открытии документов. - 📉
Несовпадение итоговв отчетах. - 🚫 Невозможность провести или перепровести документы.
Чтобы избежать этого:
- Перед очисткой проверьте зависимости через
Анализ использования(в конфигураторе, правая кнопка на регистре →Анализ использования). - Если найдутся документы, ссылающиеся на удаляемые записи, сначала архивируйте или удалите эти документы.
- После очистки запустите
Тестирование и исправлениес галочкойИсправлять найденные ошибки.
Как очистить регистр бухгалтерии, не нарушив баланс?
Регистры бухгалтерии (Хозрасчетный, Налоговый) требуют особой осторожности. Их очистка может привести к:
- 💰 Нарушению баланса (дебет ≠ кредит).
- 📑 Ошибкам в регламентированных отчетах (баланс, НДС).
- 🔄 Проблемам при закрытии месяца.
Рекомендации:
- Очищайте только полностью закрытые периоды (например, до 2020 года, если бухгалтерская отчетность за этот год уже сдана и не будет пересматриваться).
- Используйте специализированные обработки, которые сохраняют взаимосвязь проводок (например,
Архивация данных бухгалтериииз 1С:ИТС). - После очистки обязательно:
- Перепроведите все документы текущего года.
- Сформируйте
Оборотно-сальдовую ведомостьи сравните с данными до очистки. - Проверьте закрытие месяца за текущий период.
Если сомневаетесь — лучше не очищайте регистры бухгалтерии самостоятельно, а обратитесь к специалисту по 1С:Бухгалтерии.
Можно ли отменить очистку регистров, если что-то пошло не так?
Если очистка уже выполнена, отменить ее нельзя — удаленные данные восстановить можно только из бэкапа. Поэтому:
- 💾 Всегда делайте резервную копию перед очисткой.
- 🔄 Проверяйте результаты на тестовой копии базы.
- 📋 Используйте режим
Тестированиев обработках (он показывает, что будет удалено, но не удаляет реально). - Восстановите базу из бэкапа.
- Повторите очистку с другими параметрами (например, для более раннего периода).
- Если бэкапа нет — обратитесь в службу поддержки 1С или к партнерам-франчайзи.
Если после очистки обнаружились критичные ошибки: