Удаление помеченных объектов: как очистить базу 1С от удалённых документов

· 9 мин

Содержание

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

Операция устроена одинаково в Бухгалтерии, ЗУП и Управлении торговлей — различается лишь название корневого раздела администрирования (таблица с путями ниже). Пути и экраны приведены для интерфейса «Такси» на платформе 8.3.

Почему помеченные документы не исчезают из базы сразу

Удаление в 1С двухэтапное, и это сделано намеренно. Первый этап — пометка на удаление: вы выделяете документ в списке и жмёте клавишу Delete или команду Пометить на удаление / Снять пометку. Значок объекта перечёркивается красным крестиком, но сама запись остаётся в базе.

Второй этап — собственно очистка, когда программа физически убирает помеченные данные. Между этапами может пройти день или год: пометку в любой момент можно снять и вернуть документ к жизни.

Зачем такая осторожность:

  • 🔗 На документ могут ссылаться другие объекты — проводки, движения регистров, другие документы. Если стереть его мгновенно, эти ссылки «повиснут» и база начнёт показывать ошибки вида Объект не найден.
  • 📉 Помеченные документы продолжают занимать место и попадают в служебные выборки. Остатки и отчёты они не искажают (движения снимаются при пометке, если документ был проведён и его распровели), но физический размер базы не уменьшают.
  • ♻️ Пока объект только помечен, операцию легко отменить. После физической очистки вернуть его можно лишь из резервной копии.

Поэтому «очистить удалённые документы» и «пометить на удаление» — разные действия. Первое выполняет обработка Удаление помеченных объектов, о которой речь дальше.

Помеченные документы по-прежнему видны в списках — с перечёркнутым значком. В настройке списка (Ещё → Настроить список) их отображение можно отключить, чтобы перечёркнутые строки не мешали в работе. На содержимое отчётов это не влияет: там помеченные непроведённые документы и так не участвуют.

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

Что сделать до очистки: копия базы и режим работы

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

Для файловой базы копия — это выгрузка в .dt (Конфигуратор → Администрирование → Выгрузить информационную базу) или просто копия каталога с файлом 1Cv8.1CD, когда никто не работает . Для клиент-серверной — бэкап средствами СУБД (SQL Server, PostgreSQL).

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

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

Перед запуском очистки проверьте
Выполнено: 0 / 4

Штатное удаление помеченных объектов через «Администрирование»

Это основной и безопасный способ — он работает в режиме 1С:Предприятие, без Конфигуратора, и всегда проверяет ссылки.

Путь к обработке зависит от конфигурации:

КонфигурацияПуть к обработке
Бухгалтерия 3.0, ЗУП 3.1Администрирование → Обслуживание → Удаление помеченных объектов
УТ 11, КА 2, ERPНСИ и администрирование → Администрирование → Обслуживание → Удаление помеченных объектов

Дальше порядок одинаковый:

  1. Откройте обработку Удаление помеченных объектов.
  2. Выберите режим. Автоматический — программа сама найдёт и удалит все помеченные объекты. Выборочный — вы вручную отметите галочками, что именно удалять; удобно, когда помечено много разнородных документов, а убрать нужно только часть.
  3. Нажмите кнопку поиска/удаления. Программа соберёт список помеченных объектов и проверит контроль ссылочной целостности — то есть выяснит, не ссылается ли на эти объекты кто-то ещё.
  4. Объекты без мешающих ссылок будут удалены. По остальным программа покажет, кто именно их держит (об этом — следующий раздел).
  5. По завершении обработка выведет отчёт: сколько объектов удалено и сколько осталось.

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

Отдельная частая ситуация — проведённый документ. Напрямую пометить его на удаление платформа обычно не даёт: сначала она предложит отменить проведение. Логика та же — пока документ проведён, его движения лежат в регистрах и на них есть ссылки. Поэтому порядок такой: отменяете проведение, помечаете на удаление, затем очищаете. Если распровести документ нельзя (закрыт период, нет прав), сначала решите эту проблему, а не удаляйте данные в обход.

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

После очистки физический размер файловой базы сразу не уменьшится — освободившееся место остаётся «внутри» файла и переиспользуется под новые данные. Чтобы реально сжать файл, выполните Конфигуратор → Администрирование → Тестирование и исправление с включённой реструктуризацией таблиц. Для серверной базы место на диске управляется средствами СУБД.

Когда объект не удаляется: контроль ссылок

Если программа отказалась удалять часть объектов — это не сбой, а защита. Значит, на помеченный документ ссылается другой объект, который на удаление не помечен. Удалить «нужный» документ, оставив битую ссылку, платформа не даст.

В отчёте обработка показывает дерево: что вы хотели удалить и какие объекты этому мешают. Отсюда можно сразу перейти в мешающий объект двойным кликом.

Варианты действий:

  • Открыть мешающий документ и убрать в нём ссылку на удаляемый объект (например, выбрать другого контрагента или номенклатуру).
  • Пометить мешающий объект на удаление тоже — тогда при повторном запуске удалятся оба.
  • Оставить всё как есть: раз на документ ещё ссылаются, возможно, удалять его рано.
Диагностика: выберите симптом

Удаление через внешнюю обработку и код

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

Ключевой момент — способ удаления в коде:

  • Глобальный метод УдалитьОбъекты() выполняет удаление с контролем ссылочной целостности, как штатная обработка. Это безопасный путь: он вернёт список объектов, которые удалить нельзя, и не оставит битых ссылок.
  • Метод Объект.Удалить() удаляет без контроля ссылок, напрямую. Применять его на рабочей базе опасно: он оставляет «висящие» ссылки в других документах. Он уместен только в разовых регламентных сценариях, когда вы точно знаете, что на объект никто не ссылается.

Любую внешнюю обработку запускайте сначала на копии базы. Проверяйте, что после прогона отчёт по ссылочной целостности (Тестирование и исправление) чист.

Готовые обработки для массового удаления есть в составе типовых конфигураций и в отраслевых сборках. Если своей разработки нет — не изобретайте код на проде, возьмите штатную обработку из раздела Администрирование и удаляйте частями.

Почему базу 1С нельзя чистить напрямую через SQL

Соблазн понятен: открыть SQL Server Management Studio и одним DELETE снести ненужные строки из таблицы документов. Так делать нельзя — это разрушает базу.

Причины:

  • 🧩 Один документ в 1С — это не одна строка. Это запись в таблице документа, строки табличных частей, движения в регистрах, записи в таблицах итогов и индексах. Прямой DELETE по одной таблице оставит всё остальное висеть рассогласованно.
  • 🧠 Платформа не знает о правках в обход неё. Кэш, итоги регистров, нумерация — всё это ведёт сама 1С. После внешнего вмешательства цифры в отчётах перестанут сходиться.
  • 🚫 Такая база считается «поломанной руками»: фирма 1С подобные изменения не поддерживает, а восстановление сведётся к откату из копии.

Правильный путь уменьшить базу — сначала штатно удалить помеченные объекты, а затем вернуть освободившееся место средствами платформы (Тестирование и исправление с реструктуризацией) или СУБД (обслуживание индексов, а место на диске — штатными средствами сервера БД). Руками в SQL-таблицы 1С лезть не нужно.

Отдельно про «секрет» уменьшения базы через SQL-запрос очистки таблиц: таких безопасных запросов не существует. Любая попытка удалить данные документа помимо платформы оставит рассинхрон между таблицами объекта, его движениями и итогами. Если кто-то предлагает «быстрый SQL-скрипт для чистки 1С» — это прямой путь к восстановлению из копии.

Как поставить очистку на расписание

Если помеченные объекты накапливаются постоянно (например, от обменов или массовых загрузок), очистку удобно автоматизировать. В конфигурациях на БСП для этого есть регламентное задание.

Включается оно там же, в настройках обработки Удаление помеченных объектов — нужно задать расписание (например, раз в неделю ночью) и режим. Тогда система сама будет убирать помеченное без участия человека.

Несколько ограничений, о которых стоит помнить:

  • Автоматическое задание удаляет всё помеченное по расписанию. Если вы иногда помечаете документы «на подумать», поставьте выборочный режим или увеличьте интервал.
  • Расписание задавайте на нерабочее время — ночные часы, когда база свободна.
  • Для файловой базы регламентные задания выполняются, только когда запущен сеанс (или фоновый процесс); в клиент-серверной — силами сервера 1С постоянно.

Частые ошибки при очистке удалённых документов

Разберём то, что не вошло в шаги выше, — промахи, которые дорого обходятся.

  • Чистят без копии. Самая частая и самая обидная ошибка. Удаление необратимо, в отличие от пометки.
  • Снимают пометку, а потом удивляются остаткам. Если распровести и пометить документ, его движения уходят из регистров. Сняли пометку, но забыли провести обратно — остатки «не сходятся». Это не про очистку, но путают постоянно.
  • Удаляют в обход контроля ссылок ради скорости. Прямой Удалить() или SQL быстрее, но оставляет битые ссылки, которые потом всплывают месяцами.
  • Запускают массовую очистку в разгар рабочего дня. Блокировки тормозят всю базу. Делайте это в окно без пользователей.
  • Путают пометку на удаление с архивированием. Удаление — это удаление. Если данные могут понадобиться для истории или проверок, не помечайте их, а выгрузите или перенесите, но не стирайте.

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

Можно ли вернуть документ после очистки помеченных объектов?
Нет. После физического удаления объект восстанавливается только из резервной копии базы. До очистки, пока стоит лишь пометка, достаточно снять её.
Чем пометка на удаление отличается от очистки?
Пометка — обратимый флажок, документ остаётся в базе. Очистка (Удаление помеченных объектов) физически стирает помеченные данные с проверкой ссылок.
Почему после удаления база не стала меньше?
Освободившееся место остаётся внутри файла базы и переиспользуется. Чтобы сжать файл, выполните Тестирование и исправление с реструктуризацией таблиц; для серверной базы место управляется средствами СУБД.
Нужен ли монопольный режим для удаления помеченных объектов?
В современных конфигурациях — не обязательно, обработка умеет работать с пользователями. Но для разовой чистки больших объёмов надёжнее закрыть вход другим, чтобы не упираться в блокировки.
Можно ли удалить только часть помеченных документов?
Да. Выберите выборочный режим в обработке Удаление помеченных объектов и отметьте галочками нужные объекты — остальные останутся помеченными.