Регистры сведений в 1С:Предприятие — это один из ключевых объектов конфигурации, который хранит исторические данные, настройки параметров и справочную информацию. Однако иногда возникают ситуации, когда требуется полностью очистить регистр: при тестировании, переносе данных, исправлении ошибок или оптимизации базы. Неправильное удаление записей может привести к потере критичных данных, нарушению целостности или даже сбою в работе программы.
В этой статье мы разберём 5 способов удаления всех записей регистра сведений — от ручных методов через конфигуратор до программных решений с использованием встроенного языка. Особое внимание уделим безопасности операций и нюансам, которые часто упускают даже опытные разработчики. Если вы администратор, программист или просто пользователь, которому нужно "почистить" регистр — здесь вы найдёте подробные инструкции с примерами кода и предупреждениями о возможных рисках.
⚠️ Предупреждение: Удаление записей регистра сведений — необратимая операция. Если регистр используется в расчётах (например, РегистрСведений.ЦеныНоменклатуры), его очистка может привести к некорректному формированию документов или отчётов. Всегда делайте резервную копию базы перед массовыми изменениями!
1. Удаление через конфигуратор (ручной метод)
Самый простой способ очистить регистр — использовать встроенные инструменты конфигуратора. Этот метод подходит для небольших баз данных или тестовых конфигураций, где не требуется автоматизация.
Чтобы удалить все записи:
- Откройте конфигуратор в режиме
1С:Предприятие(с правами администратора). - Перейдите в меню
Администрирование → Поддержка и обслуживание → Регистры сведений. - Выберите нужный регистр в списке (например,
РегистрСведений.КурсыВалют). - Нажмите кнопку
Все действия → Очистить(илиУдалить все записив зависимости от версии платформы). - Подтвердите операцию в диалоговом окне.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 8) опция очистки может быть скрыта или заблокирована на уровне прав доступа. Если кнопки нет — проверьте права текущего пользователя или используйте альтернативные методы.
Сделать резервную копию базы|Проверить права доступа в конфигураторе|Убедиться, что регистр не используется в текущих сеансах|Закрыть все активные сессии пользователей|Проверить зависимые объекты (отчёты, документы)
-->
Этот метод не подходит для регистров с большим объёмом данных (более 10 000 записей), так как может занять много времени или вызвать зависание интерфейса. Для таких случаев лучше использовать программные способы.
2. Программное удаление с помощью запроса
Для опытных пользователей и разработчиков удобнее очищать регистр через встроенный язык 1С. Этот метод позволяет гибко управлять процессом, добавлять условия фильтрации и обрабатывать большие объёмы данных.
Пример кода для полной очистки регистра РегистрСведений.ПримерыРегистров:
Процедура ОчиститьРегистрСведений()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрСведений.ПримерыРегистров.Ссылка КАК Ссылка
|ИЗ
| РегистрСведений.ПримерыРегистров КАК РегистрСведений.ПримерыРегистров";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
РегистрСведений.ПримерыРегистров.УстановитьОтбор(
Новый Структура("Ссылка", Выборка.Ссылка)
);
РегистрСведений.ПримерыРегистров.Очистить();
КонецЦикла;
Сообщить("Регистр успешно очищен!");
КонецПроцедуры
Альтернативный вариант (более быстрый, но менее безопасный):
Процедура ОчиститьРегистрБыстро()
РегистрСведений.ПримерыРегистров.Очистить();
Сообщить("Все записи удалены!");
КонецПроцедуры
⚠️ Важно: Метод .Очистить() без предварительного отбора удаляет все записи без возможности отмены. Если регистр участвует в транзакциях (например, РегистрСведений.ОстаткиТоваров), это может нарушить целостность данных. Всегда тестируйте код на копии базы!
Перед выполнением массового удаления добавьте в запрос условие ГДЕ с ограничением по периоду или другому измерению. Например: ГДЕ РегистрСведений.ПримерыРегистров.Период < &ТекущаяДата — это позволит очистить только устаревшие данные.
Когда использовать программный метод?
- 🔹 Нужно очистить регистр по сложному условию (например, только записи за определённый период).
- 🔹 Объём данных превышает 50 000 записей (ручной метод будет слишком долгим).
- 🔹 Требуется интеграция очистки в регламентное задание или обработку.
3. Удаление через обработку "Универсальный отбор и обработка"
Если вы не хотите писать код с нуля, можно воспользоваться стандартной обработкой 1С — "Универсальный отбор и обработка данных" (доступна в большинстве типовых конфигураций). Этот инструмент позволяет гибко настраивать фильтры и выполнять массовые операции.
Пошаговая инструкция:
- Откройте обработку через меню
Файл → Открыть(путь к файлу:ext\Univer.epfили аналогичный в вашей конфигурации). - В разделе
Объектывыберите нужный регистр сведений. - Настройте отбор (если нужно удалить не все записи, а только часть).
- Перейдите на вкладку
Обработкаи выберите действиеУдалить помеченные. - Нажмите
Выполнитьи подтвердите операцию.
Преимущества этого метода:
- 🔧 Не требует знания программирования.
- 📊 Позволяет предварительно просмотреть список удаляемых записей.
- 🔄 Можно сохранить настройки отбора для повторного использования.
⚠️ Ограничение: В некоторых конфигурациях (например, 1С:УТ 11) обработка может не поддерживать регистры сведений с большим количеством измерений. В таком случае используйте программный метод.
Ручной (через конфигуратор)|Программный (код 1С)|Обработка "Универсальный отбор"|Другие инструменты|Не очищаю регистры
-->
4. Очистка через SQL-запрос (для опытных пользователей)
В редких случаях, когда стандартные методы не работают (например, при повреждении данных или блокировках), можно обратиться напрямую к SQL-базе. Этот способ требует глубоких знаний структуры 1С и используется только в крайних случаях.
Пример SQL-запроса для очистки регистра _InfoRg12345 (где 12345 — идентификатор регистра):
DELETE FROM _InfoRg12345;
DELETE FROM _InfoRg12345VT;
⚠️ Критическое предупреждение:
🚨 Не выполняйте SQL-запросы напрямую, если не уверены в структуре таблиц! Неправильный запрос может привести к полной потере данных или нарушению ссылочной целостности. Всегда делайте резервную копию перед работой с SQL и тестируйте запросы на копии базы.
Где найти идентификатор регистра?
- Откройте конфигуратор и найдите нужный регистр в дереве объектов.
- Нажмите правой кнопкой →
Свойства. - В поле
ИмяилиИдентификаторбудет указан уникальный номер (например,РегистрСведений.КурсыВалютсоответствует таблице_InfoRgXXXX).
Какие таблицы задействованы в регистре сведений?
В 1С регистр сведений хранится в двух основных таблицах:
1. _InfoRgXXXX — основные данные (где XXXX — идентификатор регистра).
2. _InfoRgXXXXVT — виртуальные таблицы для отчётов.
Дополнительно могут использоваться таблицы _InfoRgXXXXD для данных с периодичностью "По регистратору".
🔹 Когда оправдано использовать SQL?
- 🛠️ База повреждена, и стандартные методы не работают.
- 📉 Нужно очистить миллионы записей (стандартные методы слишком медленные).
- 🔧 Вы администратор СУБД и точно знаете структуру таблиц.
5. Автоматизация очистки через регламентное задание
Если регистр нужно очищать регулярно (например, раз в месяц), удобно настроить регламентное задание. Это позволит избежать рутинных операций и снизит риск ошибок.
Как создать регламентное задание для очистки регистра:
- Откройте конфигуратор и перейдите в
Общие → Регламентные задания. - Создайте новое задание с произвольным именем (например,
ОчисткаРегистраЦен). - В поле
Процедураукажите код очистки (см. раздел 2 этой статьи). - Настройте расписание (например,
Ежемесячно, 1-е число в 3:00). - Установите флаг
Использоватьи сохраните изменения.
Пример кода для регламентного задания:
Процедура ОчиститьУстаревшиеЦены() Экспорт
НачалоПериода = НачалоМесяца(ТекущаяДата()) - 365; // Удаляем данные старше года
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрСведений.ЦеныНоменклатуры.Ссылка КАК Ссылка
|ИЗ
| РегистрСведений.ЦеныНоменклатуры КАК РегистрСведений.ЦеныНоменклатуры
|ГДЕ
| РегистрСведений.ЦеныНоменклатуры.Период < &НачалоПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Результат = Запрос.Выполнить();
// Далее логика удаления (аналогично разделу 2)
КонецПроцедуры
🔹 Преимущества регламентных заданий:
- ⏰ Автоматическое выполнение без участия пользователя.
- 📅 Гибкая настройка расписания (ежедневно, еженедельно, в определённое время).
- 🔒 Возможность ограничить права на выполнение задания.
Регламентные задания идеально подходят для очистки временных или устаревших данных (например, логов, кэша, исторических курсов валют). Однако не используйте их для регистров, критичных для бизнес-процессов, без предварительного тестирования!
6. Особенности очистки для популярных регистров
Не все регистры сведений одинаковы: некоторые из них критичны для работы системы, другие — вспомогательные. Ниже приведена таблица с примерами регистров и рисками при их очистке.
| Регистр сведений | Типовая конфигурация | Риски при очистке | Рекомендации |
|---|---|---|---|
КурсыВалют |
1С:Бухгалтерия, 1С:УТ | Нарушение расчётов в валюте, ошибки в отчётах | Очищайте только устаревшие курсы (старше 1 года) |
ЦеныНоменклатуры |
1С:Торговля, 1С:Розница | Потеря актуальных цен, ошибки в чеках | Перед очисткой проверьте зависимые документы |
ОстаткиТоваров |
1С:УТ, 1С:ERP | Критично! Приведёт к расхождению складских остатков | Никогда не очищайте в рабочей базе |
ЖурналДокументов |
Любая | Потеря истории изменений документов | Очищайте только при переносе данных |
⚠️ Внимание: Регистры с периодичностью "По регистратору" (например, ОстаткиТоваров) связаны с документами. Их очистка приведёт к расхождению итогов и потребует перепроведения всех связанных операций.
🔹 Как определить тип регистра?
- Откройте регистр в конфигураторе.
- Проверьте свойство
Периодичность:Непериодический— можно очищать без рисков для документов.По периоду— очистка удалит данные за выбранные даты.По регистратору— крайне опасно очищать!
- 🔴 Очистка регистра без резервной копии → Всегда делайте бэкап перед массовыми операциями. Используйте инструменты
1Сили SQL-дамп. - 🔴 Удаление записей в рабочее время → Очищайте регистры в нерабочие часы или на тестовой копии.
- 🔴 Игнорирование зависимостей → Перед очисткой проверьте, не используется ли регистр в отчётах или документах (например, через
Конфигуратор → Все функции → Поиск ссылок). - 🔴 Неправильные права доступа → Убедитесь, что у пользователя есть роль
АдминистраторилиПолные права.
Частые ошибки и как их избежать
Даже опытные разработчики иногда допускают ошибки при работе с регистрами сведений. Вот наиболее распространённые проблемы и способы их предотвращения:
🔹 Как восстановить данные после ошибочной очистки?
- Если есть резервная копия — восстановите базу из бэкапа.
- Если копии нет — попробуйте воспользоваться журналом регистрации (если он включён).
- В крайнем случае обратитесь в службу поддержки 1С — иногда удаётся восстановить данные через транзакционные логи.
Перед очисткой регистра экспортируйте его данные в файл (например, через обработку "Выгрузка данных"). Это позволит быстро восстановить информацию, если что-то пойдёт не так.
FAQ: Ответы на частые вопросы
Можно ли очистить регистр сведений без прав администратора?
Нет, для очистки регистра требуются права Администратор или роль с разрешениями на изменение данных. Если у вас ограниченные права, обратитесь к администратору базы.
Что будет, если очистить регистр ОстаткиТоваров?
Это приведёт к расхождению складских остатков во всех документах. Система перестанет корректно отображать количество товара на складах, а отчёты (например, Ведомость по товарам) будут содержать неверные данные. Восстановление потребует полного перепроведения всех документов за период.
Как очистить регистр только за определённый период?
Используйте программный метод с отбором по дате. Пример:
РегистрСведений.ЦеныНоменклатуры.УстановитьОтбор(
Новый Структура("Период", НачалоДня(ДатаНачала), НачалоДня(ДатаОкончания))
);
РегистрСведений.ЦеныНоменклатуры.Очистить();
Почему после очистки регистра отчёты показывают старые данные?
Это связано с кэшированием виртуальных таблиц. Перезапустите сеанс 1С или выполните команду:
ОбновитьИнформационнуюБазу();
Можно ли очистить регистр в облачной версии 1С (1С:Фреш)?
В 1С:Фреш доступ к SQL и конфигуратору ограничен. Используйте только программные методы через встроенный язык или обратитесь в поддержку сервиса. Очистка через конфигуратор в облаке недоступна.