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