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

В этой статье мы разберём 5 способов удаления всех записей регистра сведений — от ручных методов через конфигуратор до программных решений с использованием встроенного языка. Особое внимание уделим безопасности операций и нюансам, которые часто упускают даже опытные разработчики. Если вы администратор, программист или просто пользователь, которому нужно "почистить" регистр — здесь вы найдёте подробные инструкции с примерами кода и предупреждениями о возможных рисках.

⚠️ Предупреждение: Удаление записей регистра сведений — необратимая операция. Если регистр используется в расчётах (например, РегистрСведений.ЦеныНоменклатуры), его очистка может привести к некорректному формированию документов или отчётов. Всегда делайте резервную копию базы перед массовыми изменениями!

1. Удаление через конфигуратор (ручной метод)

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

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

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

⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 8) опция очистки может быть скрыта или заблокирована на уровне прав доступа. Если кнопки нет — проверьте права текущего пользователя или используйте альтернативные методы.

Сделать резервную копию базы|Проверить права доступа в конфигураторе|Убедиться, что регистр не используется в текущих сеансах|Закрыть все активные сессии пользователей|Проверить зависимые объекты (отчёты, документы)

-->

Этот метод не подходит для регистров с большим объёмом данных (более 10 000 записей), так как может занять много времени или вызвать зависание интерфейса. Для таких случаев лучше использовать программные способы.

2. Программное удаление с помощью запроса

Для опытных пользователей и разработчиков удобнее очищать регистр через встроенный язык 1С. Этот метод позволяет гибко управлять процессом, добавлять условия фильтрации и обрабатывать большие объёмы данных.

Пример кода для полной очистки регистра РегистрСведений.ПримерыРегистров:

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

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

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

"ВЫБРАТЬ

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

|ИЗ

| РегистрСведений.ПримерыРегистров КАК РегистрСведений.ПримерыРегистров";

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

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

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

РегистрСведений.ПримерыРегистров.УстановитьОтбор(

Новый Структура("Ссылка", Выборка.Ссылка)

);

РегистрСведений.ПримерыРегистров.Очистить();

КонецЦикла;

Сообщить("Регистр успешно очищен!");

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

Альтернативный вариант (более быстрый, но менее безопасный):

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

РегистрСведений.ПримерыРегистров.Очистить();

Сообщить("Все записи удалены!");

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

⚠️ Важно: Метод .Очистить() без предварительного отбора удаляет все записи без возможности отмены. Если регистр участвует в транзакциях (например, РегистрСведений.ОстаткиТоваров), это может нарушить целостность данных. Всегда тестируйте код на копии базы!

💡

Перед выполнением массового удаления добавьте в запрос условие ГДЕ с ограничением по периоду или другому измерению. Например: ГДЕ РегистрСведений.ПримерыРегистров.Период < &ТекущаяДата — это позволит очистить только устаревшие данные.

Когда использовать программный метод?

  • 🔹 Нужно очистить регистр по сложному условию (например, только записи за определённый период).
  • 🔹 Объём данных превышает 50 000 записей (ручной метод будет слишком долгим).
  • 🔹 Требуется интеграция очистки в регламентное задание или обработку.

3. Удаление через обработку "Универсальный отбор и обработка"

Если вы не хотите писать код с нуля, можно воспользоваться стандартной обработкой "Универсальный отбор и обработка данных" (доступна в большинстве типовых конфигураций). Этот инструмент позволяет гибко настраивать фильтры и выполнять массовые операции.

Пошаговая инструкция:

  1. Откройте обработку через меню Файл → Открыть (путь к файлу: ext\Univer.epf или аналогичный в вашей конфигурации).
  2. В разделе Объекты выберите нужный регистр сведений.
  3. Настройте отбор (если нужно удалить не все записи, а только часть).
  4. Перейдите на вкладку Обработка и выберите действие Удалить помеченные.
  5. Нажмите Выполнить и подтвердите операцию.

Преимущества этого метода:

  • 🔧 Не требует знания программирования.
  • 📊 Позволяет предварительно просмотреть список удаляемых записей.
  • 🔄 Можно сохранить настройки отбора для повторного использования.

⚠️ Ограничение: В некоторых конфигурациях (например, 1С:УТ 11) обработка может не поддерживать регистры сведений с большим количеством измерений. В таком случае используйте программный метод.

Ручной (через конфигуратор)|Программный (код 1С)|Обработка "Универсальный отбор"|Другие инструменты|Не очищаю регистры

-->

4. Очистка через SQL-запрос (для опытных пользователей)

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

Пример SQL-запроса для очистки регистра _InfoRg12345 (где 12345 — идентификатор регистра):

DELETE FROM _InfoRg12345;

DELETE FROM _InfoRg12345VT;

⚠️ Критическое предупреждение:

🚨 Не выполняйте SQL-запросы напрямую, если не уверены в структуре таблиц! Неправильный запрос может привести к полной потере данных или нарушению ссылочной целостности. Всегда делайте резервную копию перед работой с SQL и тестируйте запросы на копии базы.

Где найти идентификатор регистра?

  1. Откройте конфигуратор и найдите нужный регистр в дереве объектов.
  2. Нажмите правой кнопкой → Свойства.
  3. В поле Имя или Идентификатор будет указан уникальный номер (например, РегистрСведений.КурсыВалют соответствует таблице _InfoRgXXXX).
Какие таблицы задействованы в регистре сведений?

В 1С регистр сведений хранится в двух основных таблицах:

1. _InfoRgXXXX — основные данные (где XXXX — идентификатор регистра).

2. _InfoRgXXXXVT — виртуальные таблицы для отчётов.

Дополнительно могут использоваться таблицы _InfoRgXXXXD для данных с периодичностью "По регистратору".

🔹 Когда оправдано использовать SQL?

  • 🛠️ База повреждена, и стандартные методы не работают.
  • 📉 Нужно очистить миллионы записей (стандартные методы слишком медленные).
  • 🔧 Вы администратор СУБД и точно знаете структуру таблиц.

5. Автоматизация очистки через регламентное задание

Если регистр нужно очищать регулярно (например, раз в месяц), удобно настроить регламентное задание. Это позволит избежать рутинных операций и снизит риск ошибок.

Как создать регламентное задание для очистки регистра:

  1. Откройте конфигуратор и перейдите в Общие → Регламентные задания.
  2. Создайте новое задание с произвольным именем (например, ОчисткаРегистраЦен).
  3. В поле Процедура укажите код очистки (см. раздел 2 этой статьи).
  4. Настройте расписание (например, Ежемесячно, 1-е число в 3:00).
  5. Установите флаг Использовать и сохраните изменения.

Пример кода для регламентного задания:

Процедура ОчиститьУстаревшиеЦены() Экспорт

НачалоПериода = НачалоМесяца(ТекущаяДата()) - 365; // Удаляем данные старше года

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

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

"ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

| РегистрСведений.ЦеныНоменклатуры.Период < &НачалоПериода";

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

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

// Далее логика удаления (аналогично разделу 2)

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

🔹 Преимущества регламентных заданий:

  • ⏰ Автоматическое выполнение без участия пользователя.
  • 📅 Гибкая настройка расписания (ежедневно, еженедельно, в определённое время).
  • 🔒 Возможность ограничить права на выполнение задания.
💡

Регламентные задания идеально подходят для очистки временных или устаревших данных (например, логов, кэша, исторических курсов валют). Однако не используйте их для регистров, критичных для бизнес-процессов, без предварительного тестирования!

6. Особенности очистки для популярных регистров

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

Регистр сведений Типовая конфигурация Риски при очистке Рекомендации
КурсыВалют 1С:Бухгалтерия, 1С:УТ Нарушение расчётов в валюте, ошибки в отчётах Очищайте только устаревшие курсы (старше 1 года)
ЦеныНоменклатуры 1С:Торговля, 1С:Розница Потеря актуальных цен, ошибки в чеках Перед очисткой проверьте зависимые документы
ОстаткиТоваров 1С:УТ, 1С:ERP Критично! Приведёт к расхождению складских остатков Никогда не очищайте в рабочей базе
ЖурналДокументов Любая Потеря истории изменений документов Очищайте только при переносе данных

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

🔹 Как определить тип регистра?

  1. Откройте регистр в конфигураторе.
  2. Проверьте свойство Периодичность:
    • Непериодический — можно очищать без рисков для документов.
    • По периоду — очистка удалит данные за выбранные даты.
    • По регистраторукрайне опасно очищать!
  3. Частые ошибки и как их избежать

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

    • 🔴 Очистка регистра без резервной копии → Всегда делайте бэкап перед массовыми операциями. Используйте инструменты или SQL-дамп.
    • 🔴 Удаление записей в рабочее время → Очищайте регистры в нерабочие часы или на тестовой копии.
    • 🔴 Игнорирование зависимостей → Перед очисткой проверьте, не используется ли регистр в отчётах или документах (например, через Конфигуратор → Все функции → Поиск ссылок).
    • 🔴 Неправильные права доступа → Убедитесь, что у пользователя есть роль Администратор или Полные права.

🔹 Как восстановить данные после ошибочной очистки?

  1. Если есть резервная копия — восстановите базу из бэкапа.
  2. Если копии нет — попробуйте воспользоваться журналом регистрации (если он включён).
  3. В крайнем случае обратитесь в службу поддержки — иногда удаётся восстановить данные через транзакционные логи.
💡

Перед очисткой регистра экспортируйте его данные в файл (например, через обработку "Выгрузка данных"). Это позволит быстро восстановить информацию, если что-то пойдёт не так.

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

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

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

Что будет, если очистить регистр ОстаткиТоваров?

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

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

Используйте программный метод с отбором по дате. Пример:

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

Новый Структура("Период", НачалоДня(ДатаНачала), НачалоДня(ДатаОкончания))

);

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

Почему после очистки регистра отчёты показывают старые данные?

Это связано с кэшированием виртуальных таблиц. Перезапустите сеанс или выполните команду:

ОбновитьИнформационнуюБазу();
Можно ли очистить регистр в облачной версии 1С (1С:Фреш)?

В 1С:Фреш доступ к SQL и конфигуратору ограничен. Используйте только программные методы через встроенный язык или обратитесь в поддержку сервиса. Очистка через конфигуратор в облаке недоступна.