В процессе настройки прав доступа в 1С часто возникает задача: предоставить пользователю максимально широкие полномочия, но при этом жестко ограничить его возможность безвозвратно удалять данные или даже просто устанавливать пометку на удаление. В типовых конфигурациях, таких как Управление торговлей 11.2, это может стать вызовом из-за архитектуры ролей. Давайте разберем, как решить эту задачу эффективно, сохранив конфигурацию на поддержке и обеспечив стабильность системы.
Прежде чем приступать к настройке, проанализируем, как платформа 1С обрабатывает права. Важно помнить о принципе суммирования прав: если пользователю назначено несколько ролей, и хотя бы в одной из них разрешено действие ИнтерактивнаяПометкаНаУдаление, пользователь сможет это делать. Система всегда дает приоритет разрешению перед запретом.
Поэтому наша задача сводится к тому, чтобы либо найти и исключить роли, дающие право на удаление, либо внедрить программный механизм, который будет блокировать действие независимо от назначенных ролей.
Рассмотрим вариант использования стандартного механизма «Профили групп доступа». Это наиболее «чистый» способ с точки зрения администратора, так как он не требует написания кода.
Выясним алгоритм действий:
УдалениеИнтерактивное удалениеИнтерактивная пометка на удалениеИнтерактивное снятие пометки на удалениеИнтерактивное удаление помеченныхУТ 11 права на пометку удаления часто зашиты в базовые роли или роли вида ДобавлениеИзменениеДокументов.... Если мы снимем такую роль, пользователь потеряет возможность создавать документы.Если типовой профиль не позволяет разделить право на "Изменение" и "Пометку удаления", перейдем к более гибким методам.
Проанализируем современный подход — использование механизма расширений. Это позволяет добавить проверку при записи объекта, не снимая основную конфигурацию с поддержки. Мы можем создать подписку на событие ПередЗаписью для всех необходимых справочников и документов.
Рассмотрим пример кода, который можно разместить в модуле расширения. Представим, что мы создали подписку на событие для документа РеализацияТоваровУслуг:
Процедура ЗапретПометкиУдаления_ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
// Проверяем, не является ли запись программной (например, обмен данными)
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
// Выясним, изменился ли признак пометки на удаление
// Сравниваем текущее состояние объекта с данными в базе
Если Источник.ПометкаУдаления И НЕ Источник.Ссылка.ПометкаУдаления Тогда
// Проверяем, есть ли у текущего пользователя роль-исключение
Если НЕ РольДоступна("ПолныеПрава") И НЕ РольДоступна("РазрешитьУдалениеОбъектов") Тогда
Сообщить("У вас недостаточно прав для установки пометки на удаление!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Этот метод хорош тем, что он работает поверх всех назначенных ролей. Даже если типовая роль разрешает удаление, программный код в расширении заблокирует транзакцию записи.
Разберем ситуацию, когда нам нужно использовать механизм RLS. Хотя обычно он применяется для фильтрации данных по организациям или складам, в нем можно прописать условия на изменение данных.
В шаблоне ограничений для роли можно указать условие вида:
ГДЕ ПометкаУдаления = ЛОЖЬ
Однако будьте осторожны: использование RLS для подобных целей может существенно снизить производительность системы, особенно при проведении массовых документов или формировании отчетов. Проанализируем нагрузку на сервер перед внедрением этого метода на больших базах данных.
Если ваша задача — запретить удаление объектов в закрытых периодах, воспользуйтесь стандартным механизмом Дата запрета изменения данных.
Для этого выполним следующие шаги:
После установки даты любые действия по изменению, включая установку пометки на удаление для объектов "старше" указанной даты, будут заблокированы системой автоматически.
Подведем итоги нашего анализа. Для решения задачи в 1С:УТ 11.2 оптимальным будет комбинированный подход:
Важный нюанс: никогда не используйте Интерактивное удаление (физическое удаление объекта из базы минуя корзину). Это право должно быть закрыто абсолютно для всех пользователей, кроме администратора, так как оно нарушает ссылочную целостность базы данных.
Рассмотренные методы позволяют гибко настроить систему под требования бизнеса, не нарушая логику типового решения и сохраняя возможность легкого обновления программы в будущем.