Удаление записей регистров сведений и накопления в 1С 8.3 без поломки учёта

· 9 мин

Содержание

Очистить регистр в 1С можно тремя путями: убрать документы-регистраторы (отменить проведение или удалить помеченные), удалить записи вручную через Все функции — это работает только для независимых регистров сведений, — или записать пустой набор записей обработкой на встроенном языке. Прямой TRUNCATE в SQL — крайняя мера для клиент-серверной базы, после него обязателен пересчёт итогов.

Главное правило: регистр нельзя «пометить на удаление», как справочник. Записи регистра накопления всегда принадлежат документу. Пока документ проведён, его движения вернутся при первом же перепроведении. Поэтому чистят не регистр сам по себе, а то, что его наполняет.

Как устроены регистры 1С и почему их не чистят кнопкой «Удалить»

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

Вид регистраКто пишет записиМожно удалить запись вручную
Регистр сведений, независимыйПользователь или обработкаДа, из формы списка
Регистр сведений, подчинённый регистраторуДокумент при проведенииТолько вместе с движениями документа
Регистр накопления (остатки, обороты)Документ при проведенииТолько вместе с движениями документа
Регистр бухгалтерии, регистр расчётаДокумент при проведенииТолько вместе с движениями документа

У регистров накопления и бухгалтерии есть ещё таблицы итогов. Платформа хранит в них готовые остатки по периодам, чтобы отчёты строились быстро. Если удалить движения в обход платформы, итоги останутся старыми. Отчёт покажет остаток, которого уже нет в движениях.

Ещё одна деталь — ссылки. Записи регистров содержат ссылки на номенклатуру, контрагентов, склады. Пока такая запись жива, элемент справочника не удалится через «Удаление помеченных объектов»: программа покажет, что на него есть ссылки.

Когда регистр действительно нужно чистить:

  • 🧹 тестовые данные после обучения или внедрения;
  • 📉 база разрослась, и старые периоды больше не нужны;
  • 🔁 сбойная загрузка или обмен задвоили записи;
  • 🧪 нужно подготовить копию базы без истории для разработчика.

Любой способ ниже необратим. Сделайте выгрузку базы в .dt или резервную копию СУБД перед очисткой и проверьте, что копия разворачивается.

Удаление движений через документы и обработку «Удаление помеченных объектов»

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

Шаг 1. Отбор документов

  1. Откройте журнал нужных документов, например реализации или поступления.
  2. Установите отбор по периоду: всё, что раньше нужной даты.
  3. Выделите строки (Ctrl+A для всего списка).

Шаг 2. Отмена проведения или пометка

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

Если документы не нужны совсем, — установите пометку удаления (Del или команда в меню Ещё). Пометка сама по себе ничего не удаляет и движения у документа снимает: помеченный документ не может быть проведён.

Шаг 3. Окончательное удаление

В БП 3.0, ЗУП 3.1 и УТ 11 обработка находится по пути Администрирование → Обслуживание → Корректировка данных → Удаление помеченных объектов. В любой конфигурации её можно открыть и через Все функции → Стандартные.

  1. Запустите обработку, выберите удаление всех помеченных объектов или выборочное.
  2. Дождитесь проверки ссылок. Объекты, на которые ссылаются другие данные, останутся в списке «не удалены» с указанием, кто ссылается.
  3. Разберите этот список и повторите запуск.

На большой базе удаление помеченных идёт часами. Запускайте его вечером, когда пользователи вышли: в многопользовательском режиме обработка может пропускать объекты, которые сейчас кто-то редактирует, и проверка ссылок идёт дольше.

Когда документов слишком много

Для бухгалтерии в БП 3.0 есть штатная свёртка информационной базы: она заменяет старые документы вводом остатков на дату свёртки. Это правильный путь, если цель — уменьшить базу и сохранить остатки. Ищите её в том же разделе Администрирование → Обслуживание. Перед запуском прочитайте описание в самой форме: свёртка меняет учёт и требует отдельной проверки.

Ручная очистка регистра сведений в режиме Предприятия

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

  1. Включите команду Все функции: меню ☰ → Сервис → Параметры, флажок Отображать команду «Все функции».
  2. Откройте Все функции → Регистры сведений и нужный регистр.
  3. Установите отбор (период, измерение) и выделите записи.
  4. Нажмите 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 запустите экспресс-проверку ведения учёта из раздела отчётов.
  • 🔁 Если чистили движения кодом, а документы остались, — выполните групповое перепроведение за период (или наоборот, отмените проведение этих документов).
Проверка базы после очистки регистров
Выполнено: 0 / 5

Частые вопросы

Можно ли очистить регистр, не удаляя документы?
Да, обработкой с кодом по регистраторам. Но документы останутся проведёнными без движений, и перепроведение вернёт записи.
Почему после очистки отчёт по остаткам показывает старые цифры?
Не пересчитаны итоги. Запустите пересчёт итогов через управление итогами или в «Тестировании и исправлении».
Уменьшится ли размер базы сразу после удаления?
В файловой базе — нет: место освободит сжатие таблиц в «Тестировании и исправлении». В SQL-базе файл данных тоже не уменьшится сам, это делает администратор СУБД.
Можно ли очистить регистр в базе 1С:Фреш или в облаке?
Прямой доступ к СУБД и конфигуратору там закрыт. Доступны только отмена проведения, удаление помеченных и обработки, разрешённые сервисом.
Повлияет ли очистка на обмен с другими базами?
Может. Удалённые записи и документы попадут в регистрацию изменений и уйдут в обмен. Перед очисткой отключите синхронизацию или уточните её правила.