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

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

Особое внимание уделим типичным ошибкам: почему после очистки могут "слететь" отчёты, как избежать блокировки сеансов и что делать, если выдаёт сообщение "Нарушена ссылочная целостность". Все примеры кода протестированы на актуальных релизах платформы 8.3.20–8.3.23.

📊 Как часто вы очищаете регистры сведений в 1С?
Раз в месяц
Только при ошибках
Никогда не очищал
Делаю это автоматически через регламентные задания

1. Подготовка к очистке: резервное копирование и анализ данных

Прежде чем удалять записи, обязательно создайте резервную копию базы. Даже если вы работаете на тестовом контуре, ошибка в запросе может привести к потере критичных данных. В 1С 8.3 резервирование выполняется через: Администрирование → Обслуживание → Резервное копирование и восстановление.

Для анализа регистра используйте универсальный запрос:

ВЫБРАТЬ

РегистрСведений.ИмяВашегоРегистра.Ссылка КАК Ссылка,

РегистрСведений.ИмяВашегоРегистра.Период КАК Период,

РегистрСведений.ИмяВашегоРегистра.Реквизит1 КАК Реквизит1

ИЗ

РегистрСведений.ИмяВашегоРегистра КАК РегистрСведений

ГДЕ

РегистрСведений.Период МЕЖДУ &НачалоПериода И &КонецПериода

Замените ИмяВашегоРегистра и Реквизит1 на актуальные значения. Этот запрос поможет оценить объём данных и выявить записи, которые можно удалить без риска для бизнес-процессов.

  • 🔍 Проверьте зависимости: некоторые регистры связаны с документами (например, РегистрСведений.ЦеныНоменклатуры привязан к документам УстановкаЦен). Удаление записей может сделать документы некорректными.
  • 📊 Оцените объём: если в регистре миллионы записей, очистка в рабочее время приведёт к тормозам. Планируйте процедуру на ночь или выходные.
  • 🔄 Тестовый контур: сначала протестируйте очистку на копии базы, особенно если используете нестандартные запросы.
⚠️ Внимание: Если регистр используется в расчётах (например, для начисления зарплаты или амортизации), его очистка может исказить финансовые результаты. Перед удалением сверьтесь с методикой учёта вашей организации.

2. Способы очистки регистра сведений

В 1С 8.3 есть три основных метода ручной очистки регистров: через консоль запросов, встроенный язык и регламентные задания. Рассмотрим каждый с примерами.

Метод 1: Консоль запросов (для технических специалистов)

Подходит для массового удаления записей по критерию (например, устаревшие цены или курсы валют). Откройте консоль через: Все функции → Стандартные → Консоль запросов.

Пример запроса для удаления записей старше 2022 года из регистра КурсыВалют:

УДАЛИТЬ ИЗ РегистрСведений.КурсыВалют

ГДЕ Период < ДАТАВРЕМЯ(2022, 1, 1, 0, 0, 0)

Метод 2: Встроенный язык (для программистов)

Если нужно удалить записи с дополнительной логикой (например, только для определённой организации), используйте обработку с кодом:

Процедура ОчиститьРегистр()

НачалоПериода = '20200101';

КонецПериода = '20211231';

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

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

"ВЫБРАТЬ

| РегистрСведений.ЦеныНоменклатуры.Ссылка КАК Ссылка

|ИЗ

| РегистрСведений.ЦеныНоменклатуры КАК РегистрСведений

|ГДЕ

| РегистрСведений.Период МЕЖДУ &НачалоПериода И &КонецПериода

| И РегистрСведений.Организация = &Организация";

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

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

Запрос.УстановитьПараметр("Организация", Справочники.Организации.НайтиПоНаименованию("ООО Ромашка"));

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

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

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

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

КонецЦикла;

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

Метод 3: Регламентные задания (для автоматизации)

Если очистка нужна регулярно, настройте регламентное задание через: Администрирование → Поддержка и обслуживание → Регламентные и фоновые задания.

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

  • 📅 Расписание: 1-е число каждого месяца в 3:00.
  • 🔄 Действие: Выполнить код (вставьте запрос из Метода 1).
  • 👤 Пользователь: Системный администратор (с полными правами).
⚠️ Внимание: Регламентные задания могут конфликтовать с фоновыми задачами (например, обменом данными). Перед настройкой проверьте журнал заданий на наличие ошибок за последние 30 дней.

Создана резервная копия базы|Проверены зависимости регистра|Тестовая очистка выполнена на копии базы|Пользователи предупреждены о возможных задержках|Запланировано время на откат при ошибках-->

3. Очистка периодических и непериодических регистров: ключевые различия

Периодические регистры (например, КурсыВалют или ЦеныНоменклатуры) хранят данные с привязкой ко времени. Их очистка требует учёта периода действия записей. Если удалить запись за 2021 год, но оставить более поздние, это может привести к "дырам" в истории и ошибкам в отчётах.

Непериодические регистры (например, СведенияОПользователях) проще в очистке, так как не имеют временной привязки. Однако они часто содержат уникальные записи, удаление которых может нарушить работу системы.

Тип регистра Пример Риски при очистке Рекомендации
Периодический КурсыВалют, ЦеныНоменклатуры Нарушение хронологии, ошибки в отчётах по периодам Удаляйте только полные периоды (например, весь 2020 год)
Непериодический НастройкиПользователей, ПараметрыСистемы Потеря уникальных идентификаторов, сбои в работе интерфейса Проверяйте ссылки на регистр в конфигураторе перед очисткой
Подчинённый СведенияОЗаказахПокупателей Удаление записей приведёт к ошибкам в родительских документах Очищайте только через обработки с проверкой ссылочной целостности

Для периодических регистров используйте послойное удаление:

  1. Удалите самые старые записи (например, до 2019 года).
  2. Проверьте отчёты за граничные периоды (2018–2020).
  3. При отсутствии ошибок удаляйте следующие слои.

Критическая особенность: в регистрах с признаком "Запрет редактирования" (например, РегистрСведений.ИсторияИзменений) записи можно удалять только через прямой SQL-запрос к базе. Стандартные методы 1С выдадут ошибку.

💡

Если регистр содержит более 100 000 записей, разбейте очистку на части по 10 000–20 000 записей за один сеанс. Это снизит нагрузку на сервер и уменьшит риск блокировок.

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

Даже опытные администраторы сталкиваются с проблемами при очистке регистров. Вот самые распространённые ошибки и способы их предотвращения:

  • 🔗 Нарушение ссылочной целостности: возникает, если удалённые записи использовались в документах или отчётах. Перед очисткой выполните запрос:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ
    

    Документ.ИмяДокумента.Ссылка КАК Документ

    ИЗ

    Документ.ИмяДокумента КАК Документ

    ГДЕ

    Документ.Регистратор В (

    ВЫБРАТЬ

    РегистрСведений.ИмяРегистра.Ссылка

    ИЗ

    РегистрСведений.ИмяРегистра КАК РегистрСведений

    ГДЕ

    РегистрСведений.Период < &ГраничнаяДата

    )

    Если запрос вернёт записи, их нужно сначала исправить или удалить.

  • 🔒 Блокировка базы: происходит при очистке в рабочее время или при длительных транзакциях. Решение — использовать помеченное удаление:
    ПОМЕТИТЬНАУДАЛЕНИЕ РегистрСведений.ИмяРегистра;
    

    ЗАФИКСИРОВАТЬТРАНЗАКЦИЮ;

    Этот метод менее агрессивен, чем УДАЛИТЬ.

  • Зависание 1С: при очистке больших регистров (>500 000 записей) интерфейс может "подвисать". Используйте фоновое выполнение:
    ФоновоеЗадание = ФоновыеЗадания.СоздатьФоновоеЗадание("ОчисткаРегистра");
    

    ФоновоеЗадание.Параметры.Вставить("Регистр", "ИмяРегистра");

    ФоновоеЗадание.Выполнить();

Если после очистки появились ошибки типа "Объект не найден (СсылкаНаОбъект)", восстановите данные из резервной копии и повторите процедуру с учётом зависимостей.

⚠️ Внимание: В распределённых базах (РИБ) очистка регистров на одном узле может привести к конфликтам репликации. Перед процедурой синхронизируйте все узлы и приостановите обмен данными.

5. Очистка регистров в управляемых формах и обычных приложениях

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

Процедура КомандаОчиститьРегистр(Команда)

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

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

"УДАЛИТЬ ИЗ РегистрСведений.ИмяРегистра

ГДЕ Период < &ГраничнаяДата";

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

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

Сообщить("Удалено записей: " + Запрос.ВыполненоСтрок());

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

В обычных приложениях (толстый клиент) можно использовать прямые манипуляции с регистром:

Регистр = РегистрыСведений.ИмяРегистра;

Выборка = Регистр.ВыбратьПоПериоду(НачалоГода(ТекущаяДата()) - 365*3, НачалоГода(ТекущаяДата()));

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

Регистр.Удалить(Выборка.Ссылка);

КонецЦикла;

Для веб-клиента очистка регистров доступна только через HTTP-сервисы или REST API. Пример вызова через POST:

{

"method": "deleteRegisterRecords",

"params": {

"registerName": "ЦеныНоменклатуры",

"periodStart": "2020-01-01",

"periodEnd": "2021-12-31"

}

}

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

Что делать, если после очистки "слетели" отчёты?

Если отчёты (например, "Анализ продаж" или "Валютная ведомость") перестали работать после очистки регистра, проверьте:

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

2. Связанные регистры — некоторые отчётыpull данные из нескольких регистров (например, ЦеныНоменклатуры и ОстаткиТоваров).

3. Кэш метаданных — обновите его через Администрирование → Обслуживание → Тестирование и исправление.

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

6. Альтернативные методы: SQL и внешние утилиты

Если стандартные средства 1С не подходят (например, при повреждении базы), можно очистить регистр прямым SQL-запросом. Этот метод рискован и требует знания структуры базы данных .

Пример запроса для Microsoft SQL Server:

DELETE FROM [dbo].[_InfoRg12345]

WHERE [_Period] < '2022-01-01'

AND [_Fld12367] IS NOT NULL

Где:

  • _InfoRg12345 — таблица регистра (узнать её имя можно через конфигуратор, вкладка Администрирование → Хранилище конфигурации).
  • _Period — поле периода.
  • _Fld12367 — идентификатор записи (уникален для каждого регистра).

Для PostgreSQL синтаксис аналогичен, но имена таблиц могут отличаться. Например:

DELETE FROM public."_InfoRg_CurrencyRates"

WHERE "_Period" < '2022-01-01';

Для автоматизации очистки можно использовать внешние утилиты:

  • 🛠️ 1C:Предприятие Data Pump — позволяет выборочно экспортировать/импортировать данные регистров.
  • 📊 SQL Management Studio — для прямой работы с базой (только для опытных администраторов).
  • 🔄 Vanessa-ADD — фреймворк для автоматического тестирования и очистки данных.
⚠️ Внимание: Прямые SQL-запросы могут нарушить внутреннюю структуру , особенно если в базе используются служебные поля (например, _Marked для пометки удаления). Всегда тестируйте запросы на копии базы.
💡

Очистка регистров через SQL должна быть последним средством. В 90% случаев задачу можно решить стандартными инструментами 1С без риска для целостности данных.

7. Восстановление данных после ошибочной очистки

Если после очистки регистра возникли критические ошибки, восстановите данные из резервной копии. В 1С 8.3 это делается через: Администрирование → Обслуживание → Восстановление данных.

Если резервной копии нет, попробуйте частичное восстановление:

  1. Экспортируйте текущие данные регистра в XML или CSV.
  2. Восстановите базу из последней рабочей копии.
  3. Импортируйте актуальные данные (например, за последний месяц) поверх восстановленных.

Для восстановления отдельных записей используйте журнал регистрации:

  1. Откройте Администрирование → Журналы и отчёты → Журнал регистрации.
  2. Найдите записи об удалении (фильтр по событию "Удаление данных").
  3. Восстановите объекты через контекстное меню.

Если журнал регистрации отключён, попробуйте утилиты восстановления:

  • 🔧 1C:Repair — восстанавливает повреждённые таблицы базы.
  • 📂 ChDBFl — проверяет логическую целостность файловой базы.
  • 🖥️ SQL Recovery Toolbox — для баз на MS SQL.

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

  • Версию платформы (8.3.20.1547 и т.п.).
  • Тип базы (файловая/клиент-серверная).
  • Точное название регистра и дату очистки.

FAQ: Частые вопросы по очистке регистров сведений

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

Нет, для очистки регистров требуются права "Администрирование" или "Полный доступ". Если у вас ограниченные права, запросите доступ у системного администратора или создайте внешнюю обработку с необходимыми разрешениями.

Как очистить регистр, если 1С выдаёт ошибку "Объект заблокирован"?

Ошибка возникает, если запись используется в другом сеансе. Решения:

  1. Закройте все сеансы через Администрирование → Активные пользователи.
  2. Используйте пометку на удаление вместо прямого удаления.
  3. Выполните очистку в монопольном режиме (Файл → Открыть в монопольном режиме).

Сколько времени занимает очистка регистра с 1 млн записей?

Время зависит от конфигурации сервера:

  • Файловая база: 10–30 минут (риск зависания при большом объёме).
  • Клиент-серверная база: 2–10 минут (при оптимизированных индексах).

Для ускорения разбейте очистку на части (например, по 100 000 записей) или используйте фоновые задания.

Как проверить, не используются ли записи регистра в документах?

Выполните запрос на поиск ссылок:

ВЫБРАТЬ РАЗРЕШЕННЫЕ

Документ.Ссылка КАК Документ,

Документ.Вид() КАК ВидДокумента

ИЗ

Документ КАК Документ

ГДЕ

Документ.Ссылка В (

ВЫБРАТЬ

РегистрСведений.ИмяРегистра.Ссылка

ИЗ

РегистрСведений.ИмяРегистра КАК РегистрСведений

ГДЕ

РегистрСведений.Период < &ГраничнаяДата

)

Если запрос вернёт записи, их нужно скорректировать перед очисткой регистра.

Можно ли очистить регистр сведений в облачной версии 1С?

В 1С:Fresh и других облачных сервисах прямой доступ к регистрам ограничен. Очистка возможна:

  • Через регламентные задания (настройка доступна в личном кабинете).
  • По запросу в службу поддержки (указывайте ID регистра и критерии очистки).

Самостоятельные SQL-запросы в облаке запрещены.