В процессе работы с программами на платформе 1С:Предприятие 8.3, такими как Управление торговлей 11, часто возникает специфическая задача: необходимо пометить документ на удаление, чтобы он перестал участвовать в учете и движениях, но при этом крайне важно сохранить его в базе данных физически. Причиной может быть сохранение уникального номера документа, историческая ценность данных или требования безопасности. Однако стандартная обработка УдалениеПомеченныхОбъектов работает линейно и может случайно очистить такие «важные» помеченные документы. Рассмотрим подробнее, как защитить наши данные от окончательного удаления.
Это самый надежный и простой в реализации способ, основанный на базовом принципе работы платформы 1С: объект не может быть удален физически, пока на него существует хотя бы одна «живая» ссылка в базе данных. Если стандартная обработка видит, что на документ ссылается другой объект, она пропустит его при удалении.
Разберем по шагам реализацию этого механизма:
_ЗащитаОтУдаления.ОбъектБрони с типом ЛюбаяСсылка (или выберем конкретные типы документов, которые нужно защищать).ОбъектБрони наш документ.Проанализируем ситуацию: когда пользователь запустит удаление помеченных объектов, система выполнит поиск ссылок. Она обнаружит, что наш документ РеализацияТоваровУслуг задействован в справочнике _ЗащитаОтУдаления. Платформа выдаст предупреждение о невозможности удаления и оставит документ в базе, даже если он помечен на удаление.
Если мы хотим автоматизировать процесс и не создавать лишних записей в справочниках вручную, воспользуемся функционалом подписок на события. Это позволит нам программно прерывать процесс удаления, если объект соответствует определенным критериям.
Рассмотрим пример реализации. Нам необходимо создать объект ПодпискаНаСобытие:
ПередУдалением.В обработчике пропишем логику проверки. Например, мы можем проверять наличие определенного дополнительного реквизита или просто запрещать удаление всех документов определенного типа, если у них заполнен какой-то важный признак.
Процедура ЗапретУдаленияПередУдалением(Источник, Отказ) Экспорт
// Проверяем, установлен ли у документа флаг запрета удаления
// Допустим, мы используем ДополнительныеРеквизиты
Если Источник.ДополнительныеРеквизиты.Найти("ЗапретитьФизическоеУдаление", "Свойство") <> Неопределено Тогда
ТекстСообщения = "Документ " + Строка(Источник) + " защищен от физического удаления!";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Отказ = Истина; // Это ключевая строка, которая отменяет удаление
КонецЕсли;
КонецПроцедуры
Выясним причину эффективности этого метода: Отказ = Истина внутри события ПередУдалением полностью блокирует транзакцию удаления на уровне ядра платформы. Стандартная обработка очистки просто выведет сообщение об ошибке и перейдет к следующему объекту.
Аналогично первому методу, мы можем использовать не справочник, а Регистр сведений. Это более «чистый» вариант с точки зрения архитектуры базы данных, так как регистры не создают лишних элементов в списках выбора.
Создадим непериодический регистр сведений БлокировкаУдаленияОбъектов:
Объект (тип Ссылка на документы).ПричинаЗащиты (строка).Пока в этом регистре есть запись с ссылкой на ваш документ, 1С не позволит его удалить. Преимущество этого метода в том, что мы можем легко построить отчет по всем «защищенным» документам или программно добавлять/удалять защиты при выполнении определенных бизнес-условий.
Малоизвестный, но эффективный факт: в типовых конфигурациях (УТ 11, ERP, КА) установленная Дата запрета изменений блокирует не только проведение и редактирование, но и физическое удаление объектов. Если документ находится в периоде, который закрыт для изменений, типовая обработка удаления помеченных объектов не сможет его удалить, так как удаление — это деструктивное изменение состояния информационной базы.
Рассмотрим подробнее: если вам нужно сохранить документы за прошлый год, просто убедитесь, что дата запрета установлена на 31 декабря этого года. Это самый простой способ без программирования обеспечить сохранность архива.
Проанализируем методику работы в Управлении торговлей 11. Часто пользователи помечают документы на удаление просто потому, что сделка сорвалась. Однако «Пометка на удаление» в логике 1С — это команда системе «подготовить объект к уничтожению».
Вместо этого рекомендуется использовать механизм Статусов:
Этот подход является наиболее правильным с точки зрения методологии ведения учета, так как сохраняет всю цепочку действий пользователей и не провоцирует риски случайной очистки базы.
Для решения задачи запрета удаления мы рассмотрели несколько путей. Если вы хотите быстрого результата без кодинга — используйте Метод 1 (Справочник-блокиратор). Если вы разработчик и хотите гибкого контроля — внедряйте Метод 2 (Подписка на события). В любом случае, помните: физическое удаление в 1С необратимо, поэтому создание искусственных ссылок-преград — это «золотой стандарт» защиты критически важных данных.