Удаление записей регистров сведений и накопления в 1С 8.3 без поломки учёта
Содержание
Очистить регистр
в 1С можно тремя путями: убрать документы-регистраторы (отменить проведение или удалить помеченные), удалить записи
вручную через Все функции — это работает только для независимых регистров сведений, — или записать пустой набор записей обработкой на встроенном языке. Прямой TRUNCATE в SQL — крайняя мера для клиент-серверной базы, после него обязателен пересчёт итогов.
Главное правило: регистр нельзя «пометить на удаление», как справочник. Записи регистра накопления всегда принадлежат документу. Пока документ проведён, его движения вернутся при первом же перепроведении. Поэтому чистят не регистр сам по себе, а то, что его наполняет.
Как устроены регистры 1С и почему их не чистят кнопкой «Удалить»
В типовой конфигурации данные лежат в регистрах четырёх видов. От вида зависит, можно ли трогать запись напрямую.
| Вид регистра | Кто пишет записи | Можно удалить запись вручную |
|---|---|---|
| Регистр сведений, независимый | Пользователь или обработка | Да, из формы списка |
| Регистр сведений, подчинённый регистратору | Документ при проведении | Только вместе с движениями документа |
| Регистр накопления (остатки, обороты) | Документ при проведении | Только вместе с движениями документа |
| Регистр бухгалтерии, регистр расчёта | Документ при проведении | Только вместе с движениями документа |
У регистров накопления и бухгалтерии есть ещё таблицы итогов. Платформа хранит в них готовые остатки по периодам, чтобы отчёты строились быстро. Если удалить движения в обход платформы, итоги останутся старыми. Отчёт покажет остаток, которого уже нет в движениях.
Ещё одна деталь — ссылки. Записи регистров содержат ссылки на номенклатуру, контрагентов, склады. Пока такая запись жива, элемент справочника не удалится через «Удаление помеченных объектов»: программа покажет, что на него есть ссылки.
Когда регистр действительно нужно чистить:
- 🧹 тестовые данные после обучения или внедрения;
- 📉 база разрослась, и старые периоды больше не нужны;
- 🔁 сбойная загрузка или обмен задвоили записи;
- 🧪 нужно подготовить копию базы без истории для разработчика.
Любой способ ниже необратим. Сделайте выгрузку базы в .dt или резервную копию СУБД перед очисткой и проверьте, что копия разворачивается.
Удаление движений через документы и обработку «Удаление помеченных объектов»
Это самый безопасный путь для регистров накопления и бухгалтерии. Вы не трогаете регистр — вы убираете документы, а движения уходят вместе с ними.
Шаг 1. Отбор документов
- Откройте журнал нужных документов, например реализации или поступления.
- Установите отбор по периоду: всё, что раньше нужной даты.
- Выделите строки (
Ctrl+Aдля всего списка).
Шаг 2. Отмена проведения или пометка
Если документы ещё нужны как история, но без движений, — выберите в меню Ещё команду отмены проведения. Документ останется, записи в регистрах исчезнут.
Если документы не нужны совсем, — установите пометку удаления (Del или команда в меню Ещё). Пометка сама по себе ничего не удаляет и движения у документа снимает: помеченный документ не может быть проведён.
Шаг 3. Окончательное удаление
В БП 3.0, ЗУП 3.1 и УТ 11 обработка находится по пути Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. В любой конфигурации её можно открыть и через Все функции → Стандартные.
- Запустите обработку, выберите удаление всех помеченных объектов или выборочное.
- Дождитесь проверки ссылок. Объекты, на которые ссылаются другие данные, останутся в списке «не удалены» с указанием, кто ссылается.
- Разберите этот список и повторите запуск.
На большой базе удаление помеченных идёт часами. Запускайте его вечером, когда пользователи вышли: в многопользовательском режиме обработка может пропускать объекты, которые сейчас кто-то редактирует, и проверка ссылок идёт дольше.
Когда документов слишком много
Для бухгалтерии в БП 3.0 есть штатная свёртка информационной базы: она заменяет старые документы вводом остатков на дату свёртки. Это правильный путь, если цель — уменьшить базу и сохранить остатки. Ищите её в том же разделе Администрирование → Обслуживание. Перед запуском прочитайте описание в самой форме: свёртка меняет учёт и требует отдельной проверки.
Ручная очистка регистра сведений в режиме Предприятия
Независимый регистр сведений — курсы валют, цены номенклатуры в ряде конфигураций, настройки — можно чистить прямо из списка.
- Включите команду
Все функции: меню☰ → Сервис → Параметры, флажокОтображать команду «Все функции». - Откройте
Все функции → Регистры сведенийи нужный регистр. - Установите отбор (период, измерение) и выделите записи.
- Нажмите
Delи подтвердите удаление.
Записи пропадут сразу, без пометки. Ограничения:
- 🔒 нужны права на изменение регистра — обычно это роль полных прав;
- 🚫 подчинённый регистратору регистр так не почистить: команда удаления будет недоступна;
- 🐢 на десятках тысяч записей форма начнёт подвисать, лучше обработка.
Ручная корректировка движений документа
В БП 3.0 у проведённого документа есть кнопка просмотра движений (Дт/Кт). В её форме включается флажок ручной корректировки — после этого движения можно править и удалять строки. Подходит, чтобы убрать одну-две ошибочные записи. Помните: при следующем обычном перепроведении документ перезапишет движения заново.
Обработка для очистки регистров: код на встроенном языке
Когда записей много или регистр подчинён регистратору, удобнее внешняя обработка. Код выполняется на сервере, права — полные.
Очистка независимого регистра сведений
Пустой набор записей с режимом замещения стирает всё, что попадает под отбор. Без отбора — весь регистр.
&НаСервере
Процедура ОчиститьРегистрСведенийНаСервере()
Набор = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
// Отбор по измерению: стереть только записи одного элемента
// Набор.Отбор.Номенклатура.Установить(СсылкаНаНоменклатуру);
Набор.Записать(Истина);
КонецПроцедуры
ИмяРегистра замените на имя из конфигурации. Посмотреть его можно в конфигураторе или в адресной строке формы списка — после РегистрСведений..
Очистка регистра накопления по регистраторам
У подчинённого регистра запись набора без отбора по регистратору невозможна. Поэтому сначала собираем регистраторы, потом очищаем набор каждого.
&НаСервере
Процедура ОчиститьДвиженияНаСервере(ДатаГраницы)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Т.Регистратор КАК Регистратор
|ИЗ
| РегистрНакопления.ИмяРегистра КАК Т
|ГДЕ
| Т.Период < &ДатаГраницы";
Запрос.УстановитьПараметр("ДатаГраницы", ДатаГраницы);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Записать(Истина);
КонецЦикла;
КонецПроцедуры
После такой очистки документ формально остаётся проведённым, но движений по этому регистру у него нет. Перепроведение вернёт записи. Если документ двигает несколько регистров, вы получите рассинхрон: в одном регистре движения есть, в другом нет. Для учётных регистров надёжнее отменять проведение самих документов.
Если в конфигурации на запись набора повешены подписки и проверки, они тоже отработают. На больших объёмах это заметно замедляет процесс. Разработчики иногда ставят Набор.ОбменДанными.Загрузка = Истина перед записью — это отключает обработчики ПередЗаписью и ПриЗаписи в модуле набора. Делайте так, только если понимаете, какие проверки вы пропускаете.
А консоль запросов?
Язык запросов 1С умеет только читать данные: в нём нет DELETE или UPDATE. Консоль запросов поможет найти записи и регистраторы, но удалять придётся кодом — через «консоль кода» или внешнюю обработку
, как в примерах выше.
Прямая очистка таблиц регистров через SQL
Способ для клиент-серверной базы на MS SQL Server или PostgreSQL, когда записей миллионы и обработка не справляется за разумное время. Для файловой базы его нет.
Фирма 1С не поддерживает изменение данных в СУБД в обход платформы. Все последствия — на вас. Используйте этот путь на копии или в технологическое окно.
Шаг 1. Узнайте имена таблиц
Таблицы в СУБД называются по номерам: _AccumRg1234, _InfoRg567 и подобные. Сопоставление даёт функция платформы:
Объекты = Новый Массив;
Объекты.Добавить(Метаданные.РегистрыНакопления.ИмяРегистра);
Структура = ПолучитьСтруктуруХраненияБазыДанных(Объекты, Истина);
Для Каждого Строка Из Структура Цикл
Сообщить(Строка.ИмяТаблицыХранения + " — " + Строка.Назначение);
КонецЦикла;
У одного регистра накопления будет несколько таблиц: основная (движения), итоги, иногда агрегаты и таблица регистрации изменений для обмена. Очищать нужно согласованно — движения и итоги.
Шаг 2. Очистите таблицы
-- MS SQL Server, имена из шага 1
TRUNCATE TABLE dbo._AccumRg1234; -- движения
TRUNCATE TABLE dbo._AccumRgT1245; -- итоги
В PostgreSQL имена таблиц хранятся в нижнем регистре: _accumrg1234.
Шаг 3. Пересчитайте итоги
Сразу после SQL выполните пересчёт итогов (раздел ниже). Иначе отчёты по остаткам покажут суммы из старой таблицы итогов.
Перед операцией в СУБД завершите все сеансы пользователей с этой базой и установите блокировку начала сеансов в консоли кластера или в Администрирование → Обслуживание. Работающие сеансы оборвутся, несохранённые документы пропадут — предупредите людей заранее.
Конфигуратор или режим Предприятия: где что делается
Частая путаница: в конфигураторе данные регистров не редактируются. Там нет формы списка записей и нет кнопки «очистить регистр». Конфигуратор нужен для другого — служебной проверки базы после чистки.
| Задача | Режим Предприятия | Конфигуратор |
|---|---|---|
| Удалить записи независимого регистра сведений | Да, Все функции | Нет |
| Снять движения документов | Да, отмена проведения | Нет |
| Удалить помеченные объекты | Да, обработка | Нет |
| Запустить свою обработку очистки | Да, Файл → Открыть | Нет (только отладка) |
| Пересчитать итоги | Да, через управление итогами | Да, «Тестирование и исправление» |
| Проверить ссылочную и логическую целостность | Нет | Да, «Тестирование и исправление» |
Выгрузить и загрузить базу .dt | Нет | Да |
Сравнение способов очистки по риску:
| Способ | Когда подходит | Риск |
|---|---|---|
| Отмена проведения / удаление документов | Учётные регистры, разумные объёмы | Низкий, но долго |
| Ручное удаление в списке | Независимый регистр сведений, сотни записей | Низкий |
| Обработка с кодом | Тысячи записей, точный отбор | Средний: рассинхрон с документами |
SQL TRUNCATE | Миллионы записей, копия базы | Высокий: итоги, обмены, поддержка |
Восстановление целостности данных после очистки
Чистка редко проходит идеально. После неё база проверяется в три приёма.
1. Пересчёт итогов
В режиме Предприятия: Администрирование → Обслуживание, обработка управления итогами и агрегатами. В ней можно пересчитать итоги
по всем регистрам или по выбранным.
В конфигураторе: Администрирование → Тестирование и исправление, флажок пересчёта итогов. Этот режим требует монопольного доступа к базе — все пользователи должны выйти.
2. Тестирование и исправление
В том же окне конфигуратора включите проверку логической и ссылочной целостности. Для ссылок на удалённые объекты выберите вариант «не изменять» при первом прогоне — программа только покажет проблемы. Создание объектов-заглушек или очистка ссылок — уже на втором прогоне, после анализа.
3. Проверка учёта
- 📊 Сформируйте оборотно-сальдовую ведомость и ведомости по складам на дату очистки. Сравните с отчётом, снятым до чистки.
- 🔍 В БП 3.0 запустите экспресс-проверку ведения учёта из раздела отчётов.
- 🔁 Если чистили движения кодом, а документы остались, — выполните групповое перепроведение за период (или наоборот, отмените проведение этих документов).