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