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