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