К статье
Практический материал

Администрирование · 11 мин

Как очистить регистр накопления в 1С

Как очистить регистр накопления в 1С: штатные средства, обработка программным кодом, восстановление итогов. Пошаговые инструкции, риски и проверка результата.

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

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

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

Когда очистка регистра оправдана, а когда нет

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

Не стоит очищать регистр, если проблема локальна: несколько неверных документов корректнее перепровести или отменить по отдельности. Также очистка не решает проблему расхождения остатков между регистрами — если «Товары на складах» не сходится с «Себестоимостью», удаление записей в одном регистре только усугубит рассинхронизацию. В таких случаях сначала ищут причину расхождения отчётами и анализом движений.

Подготовка: копия базы и анализ регистра

Перед любыми действиями снимите резервную копию. Для файловой базы достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей, для клиент-серверной — сделать выгрузку через конфигуратор («Администрирование» → «Выгрузить информационную базу») или средствами СУБД. Выгрузка в dt предпочтительнее, так как её проще развернуть в отдельной копии для экспериментов.

Далее определите свойства регистра. Откройте конфигуратор, найдите регистр в ветке «Регистры накопления» и проверьте: вид регистра (остатки или обороты), режим записи (подчинение регистратору), список документов-регистраторов на закладке «Регистраторы». От этого зависит выбор способа. Также полезно построить универсальный отчёт или отчёт по регистру, чтобы зафиксировать текущее количество записей и итоги — это понадобится для сравнения после очистки.

Регистр подчинён регистраторуЗаписи создают только документы

Список регистраторов смотрите в конфигураторе на закладке регистра

Независимый регистрЗаписи добавляются программно

Очищается пустым набором записей без отбора

Миллионы записейОчистка займёт время и журнал транзакций

Планируйте операцию в нерабочее время, при SQL-сервере проверьте место под журнал

Способ 1. Отмена проведения документов-регистраторов

Самый безопасный штатный способ для регистра, подчинённого регистратору, — отменить проведение документов, которые формируют записи. При отмене проведения платформа автоматически удаляет движения документа по всем регистрам, включая нужный. Это гарантирует согласованность: не останется «висячих» записей и расхождений между документами и регистрами.

Для небольшого числа документов используйте журнал документов: отберите нужные, выделите и выполните «Отменить проведение». Для массовой обработки удобна стандартная обработка «Групповое изменение реквизитов» (доступна в большинстве типовых конфигураций через «Администрирование» → «Обслуживание») — в ней можно отобрать документы по виду и периоду и выполнить отмену проведения пакетно.

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

Способ 2. Программная очистка набора записей

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

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

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

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

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| Движения.Регистратор КАК Регистратор

|ИЗ

| РегистрНакопления.ТоварыНаСкладах КАК Движения";

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

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

НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);

НаборЗаписей.Записать(Истина);

КонецЦикла;

Параметр «Истина» в методе Записать() означает замещение существующих записей — именно он удаляет старые движения. Для независимого регистра код ещё короче: набор записей создаётся без отбора и записывается пустым, что удаляет все записи регистра целиком.

bsl
НаборЗаписей = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина); // полная очистка независимого регистра

Для частичной очистки — например, только за закрытые периоды — добавьте отбор по периоду в запрос выборки регистраторов или программно фильтруйте записи. Учтите: на больших объёмах цикл по регистраторам выполняется долго, поэтому имеет смысл выводить прогресс и выполнять обработку в монопольном режиме или в период минимальной нагрузки.

Порядок программной очистки
  1. 1
    Сделайте резервную копию и разверните тестовую базу
  2. 2
    Определите тип регистра и список регистраторов в конфигураторе
  3. 3
    Выполните код очистки на тестовой копии
  4. 4
    Проверьте отчётами отсутствие записей и корректность смежных данных
  5. 5
    Повторите на рабочей базе в нерабочее время

Способ 3. Очистка при свёртке и удалении документов

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

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

Восстановление и пересчёт итогов после очистки

После очистки регистра остатков итоги могут храниться в служебных таблицах и пересчитываются платформой автоматически при записи наборов, но при массовых операциях и после сбоев полезно выполнить пересчёт итогов вручную. В конфигураторе: «Администрирование» → «Тестирование и исправление» с включённой проверкой логической и ссылочной целостности, либо программно через метод РегистрыНакопления.ИмяРегистра.ПересчитатьИтоги().

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

Контрольные точки

Как проверить результат

Отчёт по регистру за очищенный период
Норма

Записей нет, обороты нулевые

Тревожный признак

Остались записи отдельных регистраторов

Остатки на дату после очистки
Норма

Совпадают с документами ввода остатков

Тревожный признак

Расхождения по измерениям или ресурсам

Смежные регистры и отчёты
Норма

Взаиморасчёты, склад и себестоимость согласованы

Тревожный признак

Один регистр очищен, связанный — нет

Типичные ошибки и ограничения

Самая частая ошибка — очистка регистра без анализа связей. Регистры в типовых конфигурациях работают связками: очистив «Товары на складах» и оставив «Товары в рознице» или регистры себестоимости, вы получите отчёты, которые не сходятся между собой, и ошибки при закрытии месяца. Перед очисткой составьте список связанных регистров по общим регистраторам.

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

Типичные ошибки
01
Очистка без резервной копии — данные восстановить нечем
02
Очистка одного регистра из связанной группы — отчёты перестают сходиться
03
Выполнение при активных пользователях и обменах — движения возвращаются или возникают блокировки
04
Перепроведение документов после очистки — регистр заполняется заново
Итог

Что важно запомнить

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

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

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

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

Удалятся ли движения, если просто пометить документ на удаление?

Нет. Пометка на удаление не трогает записи регистров. Движения удаляются при отмене проведения документа либо при физическом удалении помеченных объектов через штатную обработку удаления помеченных.

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

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

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

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

Опасна ли очистка регистра для обменов с другими базами?

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

Нужно ли пересчитывать итоги после очистки?

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