Администрирование · 11 мин
Как очистить регистр накопления в 1С
Как очистить регистр накопления в 1С: штатные средства, обработка программным кодом, восстановление итогов. Пошаговые инструкции, риски и проверка результата.
Регистр накопления в 1С — это таблица, где учётная система хранит обороты и остатки: товары на складах, взаиморасчёты, денежные средства, себестоимость. Со временем возникает необходимость его очистить: после тестирования обмена в базе остались мусорные движения, при свёртке нужно обнулить данные за старые периоды, либо регистр заполнен ошибочными записями после неудачной загрузки. Очистка регистра — операция необратимая, поэтому порядок действий зависит от того, есть ли у регистра документы-регистраторы и нужно ли сохранить сами документы.
Главное различие, которое определяет способ очистки: регистр может быть подчинён регистратору (записи создаются только документами) или быть независимым. Для подчинённого регистра удалить записи напрямую штатными средствами нельзя — нужно либо отменять проведение документов, либо очищать набор записей программно. Независимый регистр очищается проще — через набор записей без привязки к документам.
Ниже разобраны рабочие способы: от штатной отмены проведения до программной очистки через встроенный язык, а также восстановление итогов, типичные ошибки и проверка результата. Все действия выполняются в тестовой копии базы до применения на рабочей.
Когда очистка регистра оправдана, а когда нет
Очистка регистра оправдана в нескольких типовых ситуациях. Первая — тестовая база или копия, где после отладки обменов и загрузок нужно убрать мусорные движения, не трогая справочники. Вторая — свёртка базы, когда старые обороты заменяются документами ввода начальных остатков, а исходные движения должны быть удалены. Третья — ошибочная массовая загрузка, после которой проще очистить регистр и загрузить данные заново, чем исправлять тысячи записей.
Не стоит очищать регистр, если проблема локальна: несколько неверных документов корректнее перепровести или отменить по отдельности. Также очистка не решает проблему расхождения остатков между регистрами — если «Товары на складах» не сходится с «Себестоимостью», удаление записей в одном регистре только усугубит рассинхронизацию. В таких случаях сначала ищут причину расхождения отчётами и анализом движений.
Подготовка: копия базы и анализ регистра
Перед любыми действиями снимите резервную копию. Для файловой базы достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей, для клиент-серверной — сделать выгрузку через конфигуратор («Администрирование» → «Выгрузить информационную базу») или средствами СУБД. Выгрузка в dt предпочтительнее, так как её проще развернуть в отдельной копии для экспериментов.
Далее определите свойства регистра. Откройте конфигуратор, найдите регистр в ветке «Регистры накопления» и проверьте: вид регистра (остатки или обороты), режим записи (подчинение регистратору), список документов-регистраторов на закладке «Регистраторы». От этого зависит выбор способа. Также полезно построить универсальный отчёт или отчёт по регистру, чтобы зафиксировать текущее количество записей и итоги — это понадобится для сравнения после очистки.
Список регистраторов смотрите в конфигураторе на закладке регистра
Очищается пустым набором записей без отбора
Планируйте операцию в нерабочее время, при SQL-сервере проверьте место под журнал
Способ 1. Отмена проведения документов-регистраторов
Самый безопасный штатный способ для регистра, подчинённого регистратору, — отменить проведение документов, которые формируют записи. При отмене проведения платформа автоматически удаляет движения документа по всем регистрам, включая нужный. Это гарантирует согласованность: не останется «висячих» записей и расхождений между документами и регистрами.
Для небольшого числа документов используйте журнал документов: отберите нужные, выделите и выполните «Отменить проведение». Для массовой обработки удобна стандартная обработка «Групповое изменение реквизитов» (доступна в большинстве типовых конфигураций через «Администрирование» → «Обслуживание») — в ней можно отобрать документы по виду и периоду и выполнить отмену проведения пакетно.
Минус способа очевиден: отмена проведения затрагивает все регистры документа, а не только целевой. Если нужно очистить один регистр, сохранив движения по остальным, этот метод не подходит — переходите к программной очистке набора записей.
Способ 2. Программная очистка набора записей
Для точечной очистки одного регистра без затрагивания других используется встроенный язык. Идея проста: для каждого регистратора создаётся набор записей с отбором по этому регистратору, и набор записывается без добавления строк — то есть пустым. Платформа при этом удаляет существующие движения документа по данному регистру.
Такой код выполняется через внешнюю обработку, консоль кода или временную обработку в режиме предприятия (при наличии прав). Пример для подчинённого регистра:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Движения.Регистратор КАК Регистратор
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК Движения";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
НаборЗаписей.Записать(Истина);
КонецЦикла;
Параметр «Истина» в методе Записать() означает замещение существующих записей — именно он удаляет старые движения. Для независимого регистра код ещё короче: набор записей создаётся без отбора и записывается пустым, что удаляет все записи регистра целиком.
НаборЗаписей = РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Записать(Истина); // полная очистка независимого регистраДля частичной очистки — например, только за закрытые периоды — добавьте отбор по периоду в запрос выборки регистраторов или программно фильтруйте записи. Учтите: на больших объёмах цикл по регистраторам выполняется долго, поэтому имеет смысл выводить прогресс и выполнять обработку в монопольном режиме или в период минимальной нагрузки.
- 1Сделайте резервную копию и разверните тестовую базу
- 2Определите тип регистра и список регистраторов в конфигураторе
- 3Выполните код очистки на тестовой копии
- 4Проверьте отчётами отсутствие записей и корректность смежных данных
- 5Повторите на рабочей базе в нерабочее время
Способ 3. Очистка при свёртке и удалении документов
Если регистр очищается в рамках свёртки базы, логика другая: сначала вводятся документы начальных остатков на дату свёртки, затем старые документы помечаются на удаление или отменяется их проведение. В типовых конфигурациях есть штатные обработки свёртки (например, в Бухгалтерии предприятия), которые автоматизируют часть этой работы, но результат всегда нужно контролировать вручную по ключевым регистрам.
Важный нюанс: пометка документа на удаление не удаляет его движения сразу — записи исчезают при отмене проведения или при удалении помеченных объектов с контролем ссылочной целостности. Если удалить документ минуя отмену проведения (что возможно при монопольном удалении через обработки), движения обычно удаляются вместе с ним, но прямая программная очистка регистра надёжнее и предсказуемее.
Восстановление и пересчёт итогов после очистки
После очистки регистра остатков итоги могут храниться в служебных таблицах и пересчитываются платформой автоматически при записи наборов, но при массовых операциях и после сбоев полезно выполнить пересчёт итогов вручную. В конфигураторе: «Администрирование» → «Тестирование и исправление» с включённой проверкой логической и ссылочной целостности, либо программно через метод РегистрыНакопления.ИмяРегистра.ПересчитатьИтоги().
Если регистр очищался частично (по старые периоды), проверьте, что итоги на границе очищенного диапазона сходятся с документами ввода остатков. Расхождение на дату свёртки — типичный признак того, что очищены лишние записи или ввод остатков сформирован не по всем измерениям.
Как проверить результат
Записей нет, обороты нулевые
Остались записи отдельных регистраторов
Совпадают с документами ввода остатков
Расхождения по измерениям или ресурсам
Взаиморасчёты, склад и себестоимость согласованы
Один регистр очищен, связанный — нет
Типичные ошибки и ограничения
Самая частая ошибка — очистка регистра без анализа связей. Регистры в типовых конфигурациях работают связками: очистив «Товары на складах» и оставив «Товары в рознице» или регистры себестоимости, вы получите отчёты, которые не сходятся между собой, и ошибки при закрытии месяца. Перед очисткой составьте список связанных регистров по общим регистраторам.
Вторая ошибка — выполнение очистки при работающих пользователях. Запись пустых наборов блокирует таблицы, а параллельное проведение документов может вернуть записи обратно или вызвать конфликт блокировок. Третья ошибка — забыть про регламентные задания и обмены: синхронизация с другой базой после очистки может повторно загрузить удалённые движения, поэтому обмены на время операции отключают.
Что важно запомнить
Способ очистки выбирается по типу регистра: подчинённый — через регистраторы, независимый — пустым набором записей. Всегда работайте сначала на копии, отключайте обмены и пользователей, а результат проверяйте отчётами и согласованностью смежных регистров.
Частые вопросы
Можно ли очистить регистр накопления без программирования?
Да, если регистр подчинён регистратору — отмените проведение всех формирующих его документов через журнал или обработку группового изменения реквизитов. Полностью удалить записи одного регистра штатными кнопками интерфейса нельзя, для этого нужен код или готовая обработка очистки регистров.
Удалятся ли движения, если просто пометить документ на удаление?
Нет. Пометка на удаление не трогает записи регистров. Движения удаляются при отмене проведения документа либо при физическом удалении помеченных объектов через штатную обработку удаления помеченных.
Что произойдёт, если перепровести документы после очистки регистра?
Движения будут созданы заново по текущим данным документов, и регистр снова заполнится. Если очистка делалась для свёртки, перепроведение старых документов нужно запретить — например, установкой даты запрета редактирования.
Как очистить регистр только за старый период, сохранив свежие данные?
В выборке регистраторов добавьте условие по периоду (например, раньше даты свёртки) и очищайте наборы записей только для этих документов. После этого сверьте итоги на граничную дату с документами ввода начальных остатков.
Опасна ли очистка регистра для обменов с другими базами?
Да. При следующей синхронизации удалённые движения могут быть загружены обратно из базы-корреспондента, а в планах обмена зарегистрированные изменения документов приведут к повторной выгрузке. На время очистки обмены останавливают, а после — контролируют первую синхронизацию.
Нужно ли пересчитывать итоги после очистки?
При штатной записи наборов платформа обновляет итоги автоматически, но после массовых операций и сбоев полезно выполнить пересчёт итогов программно или через тестирование и исправление в конфигураторе — это исключит ошибки в отчётах по остаткам.