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