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