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