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