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