Как очистить базу 1С от помеченных на удаление документов и справочников

· 9 мин

Содержание

Пометка на удаление — это ещё не удаление. Объект остаётся в базе, продолжает занимать место и попадает в отбор отчётов, пока его физически не вычистит специальная обработка. Убирают помеченные объекты через Администрирование → Обслуживание → Удаление помеченных объектов, и часто на этом шаге всплывает главная засада: программа отказывается удалять документ, потому что на него ссылаются другие.

Разберём весь путь: как работает сама пометка, как запустить штатную обработку, что делать, когда удаление блокируется ссылками, и как вести себя в клиент-серверной базе, где за спиной работают другие пользователи.

Чем пометка отличается от физического удаления

Когда вы нажимаете Удалить (или Del) на строке списка, 1С не стирает запись. Она ставит флаг «помечен на удаление» — объект отображается с перечёркнутым значком. Сделано это намеренно: на документ или элемент справочника могут ссылаться десятки других записей, и мгновенное удаление порвало бы эти связи.

Пока объект только помечен, он:

  • 📂 хранится в базе и занимает место;
  • 🔗 сохраняет все ссылки на себя и из себя;
  • 🔁 легко снимается с пометки — через ту же команду Пометить на удаление / Снять пометку.

Физически объект исчезает только после запуска обработки «Удаление помеченных объектов». До этого момента любое ошибочное действие обратимо.

Найти помеченные записи в конкретном списке помогает отбор. В списке документов или справочника настраивается фильтр по реквизиту «Пометка удаления» через команду настройки списка в командной панели — так вы увидите только перечёркнутые позиции и оцените, что накопилось. А чтобы собрать всё помеченное по базе целиком, проще открыть саму обработку удаления: она сканирует базу и показывает полный перечень кандидатов на удаление.

Запуск штатной обработки удаления

Это основной и безопасный способ. Обработка встроена в платформу, сама проверяет ссылки и ничего не рвёт.

Путь в типовых конфигурациях на «Такси» (БП 3.0, ЗУП 3.1, УТ 11):

Администрирование → Обслуживание → Удаление помеченных объектов

Если пункта на месте нет, обработку можно открыть через главное меню: Главное меню → Все функции → Стандартные → Удаление помеченных объектов. Команду Все функции предварительно включают в Главное меню → Сервис → Параметры → Отображать команду "Все функции".

Внутри обработки два режима:

  1. Автоматическое удаление всех помеченных. Программа сама соберёт все объекты с пометкой, проверит ссылки и удалит те, что можно удалить.
  2. Выборочное удаление. Вы отмечаете галочками конкретные позиции из списка. Удобно, когда чистить нужно не всё подряд, а, например, только черновики за старый период.

Порядок действий:

  1. Откройте обработку.
  2. Выберите режим и нажмите кнопку запуска удаления.
  3. Дождитесь завершения проверки ссылочной целостности — на больших базах это занимает время.
  4. Посмотрите результат: что удалено, а что осталось и почему.

Перед массовой чисткой за несколько лет сделайте резервную копию базы. Отменить физическое удаление нельзя — только восстановить из бэкапа.

Что показывает результат обработки

После завершения обработка выводит итог в двух частях. Разберите обе, прежде чем закрывать окно:

  • Удалено. Список объектов, которые ушли из базы. Здесь ничего делать не нужно.
  • Не удалось удалить. Список объектов с пометкой и причиной — на каждый раскрывается дерево ссылающихся записей. Это ваш план дальнейшей работы.

Если список «не удалось удалить» пуст, база очищена полностью. Если нет — переходите к разбору ссылок.

Почему удаление блокируется и что с этим делать

Самая частая ситуация: обработка отработала, но часть объектов осталась. В отчёте будет сказано, что их удаление невозможно, и показан список записей, которые на них ссылаются.

Логика простая: нельзя удалить то, на что кто-то ещё ссылается, иначе в ссылающемся документе появится «битая» ссылка (<Объект не найден>). Например, вы пометили контрагента, но на него ссылается непроведённый договор или давний документ реализации.

Типичные случаи, когда удаление не проходит:

  • Справочник держит документ. Контрагент, номенклатура, физлицо или склад используется в документах, которые не помечены на удаление.
  • Элемент ссылается сам на себя через иерархию. У группы справочника есть вложенные элементы — сначала разбираются они.
  • Объект стоит в настройках или в регистре сведений. Например, вид номенклатуры задан в счёте учёта или в настройке подразделения.
  • Документ участвует в движениях по регистрам. Проведённый документ сначала распроводят, потом помечают, иначе остаются записи в регистрах.

Что делать с такими объектами:

  • 🔍 Разберите ссылки. В отчёте обработки по каждому «неудаляемому» объекту раскрывается дерево — кто именно на него ссылается. По двойному щелчку ссылающийся объект открывается.
  • ✏️ Почистите или перенастройте ссылку. В ссылающемся документе замените значение на корректное (другого контрагента, другую номенклатуру) либо тоже пометьте его на удаление, если он не нужен.
  • 🔁 Запустите обработку повторно. После того как «держащие» ссылки сняты, объект удалится со следующей попытки.

Если на объект ссылается актуальный, нужный вам документ — удалять исходный объект нельзя. Снимите с него пометку: значит, он ещё используется.

Отдельный инструмент для поиска связей — типовой отчёт Все функции → Стандартные → Поиск ссылок на объект. Он показывает полную картину по конкретной записи, не запуская удаление.

Массовая пометка перед удалением

Когда нужно пометить разом много однотипных записей (например, все заказы со статусом «отменён»), поможет штатная обработка Все функции → Стандартные → Групповое изменение реквизитов: она умеет ставить пометку удаления на выделенный список. После этого объекты уйдут в обычную обработку удаления.

Той же обработкой пометку можно и снять массово, если вы передумали. Пока удаление не запущено, групповая пометка полностью обратима — это ещё один повод не торопиться с запуском самой чистки сразу после массовой пометки, а сначала перепроверить отбор.

Внешние обработки и расширения: когда они нужны

Типовой обработки хватает в большинстве случаев. Но бывают сценарии, где удобнее специализированный инструмент.

ИнструментКогда применятьРиск
Штатная обработкаЛюбая плановая чисткаМинимальный
Внешняя обработка поиска и удаления дублейСначала склеить дубли справочников, потом удалить лишниеСредний: проверяйте результат склейки
Расширение конфигурацииНужна своя логика отбора объектов на пометкуСредний: тестируйте на копии

Внешние обработки подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки (функция должна быть включена в настройках). Расширения конфигурации — через Администрирование → Печатные формы, отчёты и обработки → Расширения; они доступны начиная с платформы 8.3.6.

Берите внешние обработки только из проверенных источников. Чужой код с правом записи способен необратимо изменить данные. Перед запуском — копия базы.

Отдельно про «склейку дублей»: если в справочнике две карточки одного контрагента, сначала объедините их штатным механизмом поиска и удаления дублей (он переносит ссылки с дубля на основной элемент), и только потом помеченный дубль удалится без блокировок.

Прямое удаление через SQL — почему так не делают

В выдаче по теме регулярно всплывает идея «удалить записи напрямую в SQL-таблицах, раз 1С не даёт». Отвечаем честно: прямое удаление строк в таблицах СУБД в обход платформы ломает базу и не поддерживается 1С.

Причины:

  • 🧱 Один объект 1С размазан по нескольким таблицам СУБД (сам объект, табличные части, движения регистров, итоги). Удалив строку в одной таблице, вы оставите «хвосты» в остальных.
  • 🔗 Платформа хранит ссылочную целостность по своим правилам. SQL про них не знает и оставит битые ссылки в других документах.
  • 🚫 База после таких правок считается некорректной: при обращении в поддержку её откажутся диагностировать.

Что действительно полезно делать через запрос — это искать, а не удалять. Консоль запросов (внешняя обработка «Консоль запросов») помогает быстро собрать список объектов-кандидатов на пометку: например, все документы определённого вида за закрытый период. Результат вы переносите в групповую пометку, а физически удаляет всё равно штатная обработка.

Единственный корректный способ убрать объект физически — штатная обработка удаления помеченных. Других поддерживаемых путей нет. Если кажется, что обработка «не справляется», причина почти всегда не в её возможностях, а в неразобранных ссылках: именно их и нужно почистить, а не искать обходной путь через СУБД.

Удаление в клиент-серверной базе

В файловой базе всё просто: запустили обработку — она отработала. В клиент-серверном варианте (на сервере 1С и СУБД) есть нюансы, связанные с другими пользователями.

  • ⏱ Время запуска. Массовое удаление за годы нагружает сервер СУБД: идёт проверка ссылок по всей базе. Запускайте его в период низкой активности — вечером или в выходной.
  • 👥 Сеансы пользователей. Современная платформа 8.3 выполняет штатную обработку без монопольного (исключительного) доступа — она ставит собственные блокировки на удаляемые данные. Но пока идёт удаление, пользователи могут ловить ожидания на блокировках по этим объектам.
  • 🧩 Большие объёмы — порциями. Если помеченного накопилось очень много, делайте удаление за несколько заходов (по периодам или видам документов), а не всё сразу — так проще контролировать и меньше нагрузка.

Монопольный доступ нужен не для рядового удаления, а для обновления структуры, загрузки .dt и тестирования базы. Не завершайте чужие сеансы ради чистки без предупреждения — у людей прервётся работа и могут потеряться несохранённые данные.

Если во время удаления пользователи жалуются на «зависания» при сохранении документов, дело обычно в блокировках: обработка держит данные, по которым идёт проверка ссылок. Это не сбой — достаточно дождаться окончания либо запустить чистку позже. Специально увеличивать таймауты блокировок ради удаления не нужно.

Если база обслуживается администратором, крупную чистку логично согласовать с ним и совместить с регламентным обслуживанием СУБД.

Регулярная гигиена базы

Помеченное копится незаметно, а потом удалять его разом страшно: ссылок много, риск ошибки выше. Проще держать базу в порядке понемногу.

Регламент чистки помеченных объектов
Выполнено: 0 / 6

Несколько привычек, которые снижают объём работы:

  • не плодите пометки «на всякий случай» — помечайте только то, что точно лишнее;
  • дубли справочников убирайте склейкой сразу, не копя их годами;
  • закрытые периоды с большим числом черновиков чистите по графику, а не ждите, пока база разрастётся.

Автоматическое удаление по расписанию

В типовых конфигурациях на базе БСП удаление помеченных объектов можно поставить на расписание — тогда обработка будет запускаться фоновым заданием сама, без участия человека. Настраивается в Администрирование → Обслуживание → Удаление помеченных объектов: там задаётся, выполнять ли удаление автоматически и по какому графику.

Такой вариант удобен для файловых и небольших баз. Для крупных клиент-серверных баз лучше оставить запуск ручным и привязать его к регламентному обслуживанию СУБД — так вы контролируете момент нагрузки и успеваете разобрать объекты, которые не удалились из-за ссылок.

Автоудаление снимает рутину, но не разбирает блокировки за вас: объекты со ссылками так и будут оставаться в базе, пока кто-то вручную не почистит связи.

Частые вопросы

Можно ли вернуть объект, если он уже физически удалён?
Нет. После обработки удаления запись исчезает из базы безвозвратно. Вернуть её можно только восстановлением из резервной копии, сделанной до удаления.
Чем снятие пометки отличается от удаления?
Снятие пометки (Снять пометку) возвращает объект в рабочее состояние — он снова активен. Удаление через обработку стирает его физически. Это разные действия: первое обратимо, второе нет.
Почему после удаления база почти не уменьшилась?
Файл базы данных не сжимается автоматически при удалении записей. Освободившееся место остаётся зарезервированным. Реальное уменьшение размера даёт отдельное обслуживание СУБД (для файловой базы — тестирование и исправление с реструктуризацией).
Обязательно ли выгонять всех пользователей перед удалением?
В текущей платформе 8.3 — нет, штатная обработка работает без монопольного доступа. Монопольный режим нужен для обновления структуры, загрузки .dt и тестирования базы, а не для рядовой чистки.
Что делать, если объект не удаляется из-за ссылок из нужных документов?
Значит, он ещё используется, и удалять его нельзя. Снимите с него пометку. Удалять стоит только то, на что не ссылаются актуальные записи.