Объект помечен, а из базы не уходит: разбираем все препятствия к удалению в 1С 8.3
Содержание
Объекты в 1С чаще всего не удаляются потому, что на них ссылаются другие данные: документ, проводка, запись регистра, реквизит справочника. Пока такая ссылка жива, обработка удаления помеченных объектов оставляет объект в базе и показывает, где он используется. Второе по частоте — объект просто не помечен или его держит другой сеанс.
Частое заблуждение: «поставил красный крестик — значит, удалил». Нет. Пометка на удаление только готовит объект к удалению. Физически запись уходит из базы, когда администратор запускает обработку удаления помеченных объектов, и только если она прошла все проверки. Всё сказанное ниже относится к платформе 1С 8.3 и типовым конфигурациям на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11.
Как устроено удаление в 1С и где запускать очистку
В типовых конфигурациях удаление идёт в два этапа:
- 🏷️ Пометка. Пользователь выделяет строку и нажимает
Delили команду «Пометить на удаление». Объект остаётся в списках, но перечёркнут. - 🧹 Очистка. Администратор запускает обработку, которая проверяет ссылки и удаляет то, что можно удалить без нарушения целостности.
Непосредственное удаление (сразу, без пометки) в типовых конфигурациях обычно не выдают даже администратору. Это защита: такое удаление может оставить «битые» ссылки.
Где запустить очистку:
| Конфигурация | Путь |
|---|---|
| Бухгалтерия 3.0 | Администрирование → Обслуживание, группа «Корректировка данных» → «Удаление помеченных объектов» |
| ЗУП 3.1 | Администрирование → Обслуживание, группа «Корректировка данных» → «Удаление помеченных объектов» |
| УТ 11 | НСИ и администрирование → Обслуживание, группа «Корректировка данных» → «Удаление помеченных объектов» |
| Любая | Все функции → Обработки → Удаление помеченных объектов |
Команда «Все функции» появляется после включения флажка в Сервис и настройки → Параметры.
В обработке есть два режима: удалить все помеченные или выбрать вручную. Выборочный режим удобнее для диагностики: видно, что именно не удалилось и почему.
После прогона обработка показывает список «не удалено» с местами использования. Начинайте разбор с него, а не с поиска по форумам: в нём обычно уже написан ответ.
Ссылки на объект: главная причина, почему он не удаляется
1С не даст удалить объект, если на него ссылается хотя бы одна неудаляемая запись. Примеры:
- 📄 контрагент указан в проведённой реализации или платёжке;
- 📦 номенклатура есть в строках документа или в остатках регистра;
- 👤 сотрудник указан в кадровом документе или начислении;
- 🗂️ элемент справочника записан в реквизите другого элемента (например, договор указан основным в карточке контрагента);
- 📊 запись регистра сведений хранит ссылку в измерении или ресурсе.
Как разобрать такой случай:
- В результатах обработки откройте не удалённый объект. Справа или ниже будет список мест использования.
- Решите для каждой ссылки: она тоже лишняя или нужна.
- Если ссылающийся объект тоже лишний — пометьте его на удаление. Объекты, помеченные вместе, обработка удаляет одним проходом, даже если они ссылаются друг на друга.
- Если ссылка нужна — замените в ней объект на правильный или снимите пометку с удаляемого.
- Запустите удаление повторно.
Типичный пример — дубль контрагента. Удалять его в лоб бесполезно: на нём висят документы. Правильный путь — заменить ссылки на основного контрагента обработкой поиска и удаления дублей (в БП 3.0 она есть в группе «Корректировка данных» того же раздела Обслуживание) и только потом удалить дубль.
Найти все ссылки на один объект можно и без запуска удаления. Стандартная команда — Все функции → Стандартные → Поиск ссылок на объекты. Программисту хватит платформенной функции НайтиПоСсылкам в серверной процедуре:
Ссылки = Новый Массив;
Ссылки.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка"));
Найдено = НайтиПоСсылкам(Ссылки);
Для Каждого СтрокаТаблицы Из Найдено Цикл
Сообщить(Строка(СтрокаТаблицы.Данные) + " — " + СтрокаТаблицы.Метаданные.ПолноеИмя());
КонецЦикла;
Метод Удалить() у объекта в коде удаляет запись без проверки ссылок. Не удаляйте так объекты в рабочей базе: останутся «битые» ссылки вида <Объект не найден>, и их придётся чинить тестированием базы.
Блокировки: объект держит другой пользователь или фоновое задание
Если ссылок нет, а объект всё равно не удалился, проверьте блокировки. Обработка не может удалить запись, которую в этот момент редактирует или записывает другой сеанс.
Кто обычно держит объект:
- 👥 коллега открыл карточку или документ и не закрыл форму;
- 🔄 идёт обмен данными: синхронизация с другой базой, загрузка банка, выгрузка на сайт;
- ⏱️ работает регламентное задание: закрытие месяца в фоне, обновление курсов, полнотекстовый индекс;
- 🧩 висит «зависший» сеанс после аварийного выхода.
Что делать:
- Посмотрите активных пользователей:
Администрирование → Обслуживание → Активные пользователи(в УТ 11 — черезНСИ и администрирование). - Попросите тех, кто работает с нужными объектами, закрыть формы.
- Дождитесь окончания обмена или регламентного задания. Их список и состояние видны в обработке «Регламентные и фоновые задания» в разделе
Обслуживание. - Запустите удаление в нерабочее время, когда в базе нет других сеансов.
Обработка удаления может предложить установить монопольный режим. Это не обязательно, но так проходит чище: никто не изменит данные во время удаления.
Монопольный режим и принудительное завершение сеансов обрывают работу пользователей, несохранённые данные пропадут. Предупредите людей заранее и делайте это вне рабочего дня.
В клиент-серверной базе при одновременной записи бывает ошибка Конфликт блокировок при выполнении транзакции. Она не говорит о поломке. Повторите удаление, когда нагрузка спадёт.
Права доступа: пометить можно, а удалить — нет
Пометка и удаление — разные права. Обычный бухгалтер или кладовщик может пометить объект, но запускать очистку базы ему, как правило, не дают. Это нормально: удаление касается всей базы сразу.
| Действие | Кто обычно может |
|---|---|
| Пометить на удаление | Пользователь с правом на изменение этого объекта |
| Снять пометку | Тот же пользователь |
| Запустить удаление помеченных | Администратор, пользователь с полными правами |
| Удалить непосредственно, без пометки | В типовых конфигурациях обычно никто |
Признаки проблемы с правами:
- 🚫 команда «Удаление помеченных объектов» не видна в разделе;
- 🚫 при попытке пометки появляется
Недостаточно правс указанием операции; - 🚫 пометка ставится, но с части объектов снимается при записи из-за ограничения доступа на уровне записей (например, по организации).
Права назначают в Администрирование → Настройки пользователей и прав. Не выдавайте полные права только ради удаления. Проще, чтобы очистку раз в месяц запускал администратор.
Проведённые документы, дата запрета и данные учёта
Документы удаляются сложнее справочников: за ними тянутся движения в регистрах и проводки.
Как ведёт себя проведённый документ:
- При установке пометки проведение отменяется, движения удаляются.
- Если отменить проведение нельзя, пометка не встанет — придёт сообщение с причиной.
- После пометки документ становится кандидатом на удаление, как обычный объект.
Почему документ не удаётся пометить или удалить:
- 🔒 Дата запрета изменения. Если период закрыт, документ нельзя ни изменить, ни пометить. Настройка в БП 3.0 —
Администрирование → Проведение документов, ссылка на даты запрета изменения. Менять дату запрета ради удаления лучше не стоит: вы правите закрытый период, по которому сдана отчётность. - 🔗 На документ ссылаются другие документы. Например, реализация указана основанием счёта-фактуры или в документе оплаты. Сначала разберитесь с подчинёнными документами.
- 📒 Регламентные операции. Если документ попал в закрытый месяц, его удаление сломает расчёты закрытия. После удаления период придётся перезакрыть.
- 🧾 Отправленные документы ЭДО и отчётность. Документы, отправленные контрагенту или в контролирующий орган, удалять не нужно: юридически они уже существуют.
Перед удалением документа за прошлый период откройте структуру подчинённости (команда в форме документа). Она покажет связанные документы одним деревом.
Предопределённые элементы и служебные данные
Есть объекты, которые нельзя удалить по замыслу разработчиков:
- ⚙️ Предопределённые элементы — например, счета плана счетов, виды расчёта, системные элементы справочников. Программа не даёт их пометить или удаляет пометку.
- 👤 Пользователь, под которым вы вошли. Себя самого из текущего сеанса удалить не получится.
Такие объекты не нужно удалять. Если элемент мешает, сделайте его неиспользуемым — как, описано в разделе про архивирование ниже.
Сбои в базе и проблемы индексов
Иногда объект нельзя удалить из-за повреждения данных. Признаки:
- ❗ обработка удаления падает с ошибкой платформы, а не с вежливым «используется в…»;
- ❗ в местах использования видны
<Объект не найден>и пустые ссылки; - ❗ одна и та же запись появляется в списке дважды или не открывается;
- ❗ ошибка вида
Ошибка при выполнении операции с информационной базой.
Порядок действий:
- Сделайте резервную копию: выгрузку в
.dtчерез Конфигуратор или копию каталога файловой базы. Для SQL-базы — средствами СУБД. - Откройте Конфигуратор →
Администрирование → Тестирование и исправление. - Включите «Реиндексация таблиц информационной базы», «Проверка логической целостности», «Проверка ссылочной целостности».
- Для битых ссылок выберите «Не изменять» на первом проходе: так вы увидите масштаб, ничего не меняя.
- Если всё понятно — повторите с режимом «Создавать объекты» или «Очищать ссылки» и пересчётом итогов.
- Снова запустите удаление помеченных объектов.
Тестирование и исправление требует монопольного доступа: все пользователи должны выйти из базы. Режим «Очищать ссылки» необратим: в документах останутся пустые поля. Без резервной копии не запускайте.
Для файловой базы есть ещё утилита chdbfl.exe в каталоге bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD. Запускать её можно только при закрытой базе.
Если ошибка повторяется после тестирования, попробуйте очистить кэш
клиента: запуск с параметром /ClearCache или удаление каталогов кэша пользователя. Это безопасно для данных, но выполняйте при закрытом клиенте.
Если удалять не нужно: архив вместо удаления
Удаление — не единственный способ убрать объект с глаз. Часто оно даже вредно: история учёта теряется, отчёты за прошлые годы меняются.
Альтернативы:
| Способ | Когда подходит | Риски |
|---|---|---|
| Оставить пометку без удаления | Элемент не нужен, но на него ссылаются старые документы | Перечёркнутые строки в списках, скрываются отбором |
| Группа «Архив» или «Не используются» в справочнике | Старые контрагенты, номенклатура | Нужно не забыть, что группа не участвует в работе |
| Флажок «Не использовать» или «Недействителен», если он есть в справочнике | Договоры, склады, некоторые виды номенклатуры | Не во всех справочниках есть такой реквизит |
| Свёртка базы | Огромная история, база тормозит | Долго, нужна проверка остатков, делает специалист |
| Новая база с переносом остатков | Переход на новый учёт с начала года | Старая база остаётся архивом для справок |
Скрыть помеченные объекты из списка просто: в настройках отбора списка (меню Ещё) добавьте условие по полю «Пометка удаления» со значением «Нет». Данные останутся в базе, но мешать не будут.
В распределённой базе и при синхронизации данных пометку ставьте в главном узле. Объект, удалённый в подчинённой базе, может вернуться при следующем обмене.