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