Удаление помеченных объектов: как очистить базу 1С от удалённых документов
Содержание
Пометка на удаление в 1С не стирает документ — он остаётся в таблицах базы, занимает место на диске и продолжает жить в ссылках других объектов. Чтобы физически очистить удалённые документы, запускают отдельную операцию: Администрирование → Обслуживание → Удаление помеченных объектов. Она проверяет, кто ссылается на объект, и удаляет данные только тогда, когда это не нарушит целостность базы.
Операция устроена одинаково в Бухгалтерии, ЗУП и Управлении торговлей — различается лишь название корневого раздела администрирования (таблица с путями ниже). Пути и экраны приведены для интерфейса «Такси» на платформе 8.3.
Почему помеченные документы не исчезают из базы сразу
Удаление в 1С двухэтапное, и это сделано намеренно. Первый этап — пометка на удаление: вы выделяете документ в списке и жмёте клавишу Delete или команду Пометить на удаление / Снять пометку. Значок объекта перечёркивается красным крестиком, но сама запись остаётся в базе.
Второй этап — собственно очистка, когда программа физически убирает помеченные данные. Между этапами может пройти день или год: пометку в любой момент можно снять и вернуть документ к жизни.
Зачем такая осторожность:
- 🔗 На документ могут ссылаться другие объекты — проводки, движения регистров, другие документы. Если стереть его мгновенно, эти ссылки «повиснут» и база начнёт показывать ошибки вида
Объект не найден. - 📉 Помеченные документы продолжают занимать место и попадают в служебные выборки. Остатки и отчёты они не искажают (движения снимаются при пометке, если документ был проведён и его распровели), но физический размер базы не уменьшают.
- ♻️ Пока объект только помечен, операцию легко отменить. После физической очистки вернуть его можно лишь из резервной копии.
Поэтому «очистить удалённые документы» и «пометить на удаление» — разные действия. Первое выполняет обработка Удаление помеченных объектов, о которой речь дальше.
Помеченные документы по-прежнему видны в списках — с перечёркнутым значком. В настройке списка (Ещё → Настроить список) их отображение можно отключить, чтобы перечёркнутые строки не мешали в работе. На содержимое отчётов это не влияет: там помеченные непроведённые документы и так не участвуют.
Пометить на удаление можно не только документы, но и элементы справочников — контрагентов, номенклатуру, договоры. С ними та же логика: справочник, на который ссылаются документы, обработка удалить не даст, пока ссылки живы.
Что сделать до очистки: копия базы и режим работы
Перед удалением помеченных объектов обязательно сделайте резервную копию базы . Откат отменённой пометки — вопрос одного клика, а вот восстановить физически стёртый документ без копии невозможно.
Для файловой базы копия — это выгрузка в .dt (Конфигуратор → Администрирование → Выгрузить информационную базу) или просто копия каталога с файлом 1Cv8.1CD, когда никто не работает
. Для клиент-серверной — бэкап средствами СУБД (SQL Server, PostgreSQL).
Удаление помеченных объектов на большой базе нагружает систему и ставит блокировки на удаляемые объекты. Массовую очистку лучше запускать, когда в базе не работают пользователи, иначе чужие документы могут «встать» в очередь на блокировке.
В современных конфигурациях на БСП обработка умеет работать и в многопользовательском режиме, но для разовой чистки десятков тысяч объектов надёжнее закрыть вход другим: Администрирование → Обслуживание → Блокировка работы пользователей либо остановка сеансов на время работ.
Штатное удаление помеченных объектов через «Администрирование»
Это основной и безопасный способ — он работает в режиме 1С:Предприятие, без Конфигуратора, и всегда проверяет ссылки.
Путь к обработке зависит от конфигурации:
| Конфигурация | Путь к обработке |
|---|---|
| Бухгалтерия 3.0, ЗУП 3.1 | Администрирование → Обслуживание → Удаление помеченных объектов |
| УТ 11, КА 2, ERP | НСИ и администрирование → Администрирование → Обслуживание → Удаление помеченных объектов |
Дальше порядок одинаковый:
- Откройте обработку
Удаление помеченных объектов. - Выберите режим. Автоматический — программа сама найдёт и удалит все помеченные объекты. Выборочный — вы вручную отметите галочками, что именно удалять; удобно, когда помечено много разнородных документов, а убрать нужно только часть.
- Нажмите кнопку поиска/удаления. Программа соберёт список помеченных объектов и проверит контроль ссылочной целостности — то есть выяснит, не ссылается ли на эти объекты кто-то ещё.
- Объекты без мешающих ссылок будут удалены. По остальным программа покажет, кто именно их держит (об этом — следующий раздел).
- По завершении обработка выведет отчёт: сколько объектов удалено и сколько осталось.
В выборочном режиме сначала запустите поиск без удаления, чтобы увидеть полный список помеченного. Так вы не сотрёте то, что пометили случайно.
Отдельная частая ситуация — проведённый документ. Напрямую пометить его на удаление платформа обычно не даёт: сначала она предложит отменить проведение. Логика та же — пока документ проведён, его движения лежат в регистрах и на них есть ссылки. Поэтому порядок такой: отменяете проведение, помечаете на удаление, затем очищаете. Если распровести документ нельзя (закрыт период, нет прав), сначала решите эту проблему, а не удаляйте данные в обход.
Запускать очистку должен пользователь с правами администратора или с ролью, где разрешено интерактивное удаление. Под обычной учётной записью кнопки удаления может не быть вовсе.
После очистки физический размер файловой базы сразу не уменьшится — освободившееся место остаётся «внутри» файла и переиспользуется под новые данные. Чтобы реально сжать файл, выполните Конфигуратор → Администрирование → Тестирование и исправление с включённой реструктуризацией таблиц. Для серверной базы место на диске управляется средствами СУБД.
Когда объект не удаляется: контроль ссылок
Если программа отказалась удалять часть объектов — это не сбой, а защита. Значит, на помеченный документ ссылается другой объект, который на удаление не помечен. Удалить «нужный» документ, оставив битую ссылку, платформа не даст.
В отчёте обработка показывает дерево: что вы хотели удалить и какие объекты этому мешают. Отсюда можно сразу перейти в мешающий объект двойным кликом.
Варианты действий:
- Открыть мешающий документ и убрать в нём ссылку на удаляемый объект (например, выбрать другого контрагента или номенклатуру).
- Пометить мешающий объект на удаление тоже — тогда при повторном запуске удалятся оба.
- Оставить всё как есть: раз на документ ещё ссылаются, возможно, удалять его рано.
Удалить()). Восстановите базу из копии и повторите штатной обработкой.Удаление через внешнюю обработку и код
Штатная обработка покрывает почти все случаи. Но на очень больших базах, где помечены сотни тысяч объектов, она работает медленно и может упираться в блокировки. Тогда используют внешнюю обработку или код — с тем же контролем ссылок.
Ключевой момент — способ удаления в коде:
- Глобальный метод
УдалитьОбъекты()выполняет удаление с контролем ссылочной целостности, как штатная обработка. Это безопасный путь: он вернёт список объектов, которые удалить нельзя, и не оставит битых ссылок. - Метод
Объект.Удалить()удаляет без контроля ссылок, напрямую. Применять его на рабочей базе опасно: он оставляет «висящие» ссылки в других документах. Он уместен только в разовых регламентных сценариях, когда вы точно знаете, что на объект никто не ссылается.
Любую внешнюю обработку запускайте сначала на копии базы. Проверяйте, что после прогона отчёт по ссылочной целостности (Тестирование и исправление) чист.
Готовые обработки для массового удаления есть в составе типовых конфигураций и в отраслевых сборках. Если своей разработки нет — не изобретайте код на проде, возьмите штатную обработку из раздела Администрирование и удаляйте частями.
Почему базу 1С нельзя чистить напрямую через SQL
Соблазн понятен: открыть SQL Server Management Studio и одним DELETE снести ненужные строки из таблицы документов. Так делать нельзя — это разрушает базу.
Причины:
- 🧩 Один документ в 1С — это не одна строка. Это запись в таблице документа, строки табличных частей, движения в регистрах, записи в таблицах итогов и индексах. Прямой
DELETEпо одной таблице оставит всё остальное висеть рассогласованно. - 🧠 Платформа не знает о правках в обход неё. Кэш, итоги регистров, нумерация — всё это ведёт сама 1С. После внешнего вмешательства цифры в отчётах перестанут сходиться.
- 🚫 Такая база считается «поломанной руками»: фирма 1С подобные изменения не поддерживает, а восстановление сведётся к откату из копии.
Правильный путь уменьшить базу — сначала штатно удалить помеченные объекты, а затем вернуть освободившееся место средствами платформы (Тестирование и исправление с реструктуризацией) или СУБД (обслуживание индексов, а место на диске — штатными средствами сервера БД). Руками в SQL-таблицы 1С лезть не нужно.
Отдельно про «секрет» уменьшения базы через SQL-запрос очистки таблиц: таких безопасных запросов не существует. Любая попытка удалить данные документа помимо платформы оставит рассинхрон между таблицами объекта, его движениями и итогами. Если кто-то предлагает «быстрый SQL-скрипт для чистки 1С» — это прямой путь к восстановлению из копии.
Как поставить очистку на расписание
Если помеченные объекты накапливаются постоянно (например, от обменов или массовых загрузок), очистку удобно автоматизировать. В конфигурациях на БСП для этого есть регламентное задание.
Включается оно там же, в настройках обработки Удаление помеченных объектов — нужно задать расписание (например, раз в неделю ночью) и режим. Тогда система сама будет убирать помеченное без участия человека.
Несколько ограничений, о которых стоит помнить:
- Автоматическое задание удаляет всё помеченное по расписанию. Если вы иногда помечаете документы «на подумать», поставьте выборочный режим или увеличьте интервал.
- Расписание задавайте на нерабочее время — ночные часы, когда база свободна.
- Для файловой базы регламентные задания выполняются, только когда запущен сеанс (или фоновый процесс); в клиент-серверной — силами сервера 1С постоянно.
Частые ошибки при очистке удалённых документов
Разберём то, что не вошло в шаги выше, — промахи, которые дорого обходятся.
- Чистят без копии. Самая частая и самая обидная ошибка. Удаление необратимо, в отличие от пометки.
- Снимают пометку, а потом удивляются остаткам. Если распровести и пометить документ, его движения уходят из регистров. Сняли пометку, но забыли провести обратно — остатки «не сходятся». Это не про очистку, но путают постоянно.
- Удаляют в обход контроля ссылок ради скорости. Прямой
Удалить()или SQL быстрее, но оставляет битые ссылки, которые потом всплывают месяцами. - Запускают массовую очистку в разгар рабочего дня. Блокировки тормозят всю базу. Делайте это в окно без пользователей.
- Путают пометку на удаление с архивированием. Удаление — это удаление. Если данные могут понадобиться для истории или проверок, не помечайте их, а выгрузите или перенесите, но не стирайте.
Частые вопросы
Можно ли вернуть документ после очистки помеченных объектов?
Чем пометка на удаление отличается от очистки?
Удаление помеченных объектов) физически стирает помеченные данные с проверкой ссылок.Почему после удаления база не стала меньше?
Тестирование и исправление с реструктуризацией таблиц; для серверной базы место управляется средствами СУБД.Нужен ли монопольный режим для удаления помеченных объектов?
Можно ли удалить только часть помеченных документов?
Удаление помеченных объектов и отметьте галочками нужные объекты — остальные останутся помеченными.