Почему в расширении 1С права работают иначе, и как настроить интерактивное удаление объектов?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с ролями в расширениях конфигурации 1С — это тема, которая часто вызывает вопросы даже у опытных разработчиков. Одной из самых загадочных ситуаций является случай, когда права, установленные в расширении, ведут себя «избирательно»: для одних справочников они работают, а для других — нет, хотя настройки кажутся идентичными. В этой статье мы подробно разберем, как платформа 1С суммирует права, что означают цвета флажков в конфигураторе и почему программный код может быть сильнее настроек ролей.

Принцип аддитивности ролей: почему расширение всегда «добавляет»

Для начала проанализируем базовый принцип работы системы прав в 1С. Важно понимать, что права доступа в платформе всегда работают по принципу аддитивности (суммирования). Это означает, что если пользователю назначена роль из основной конфигурации и роль из расширения (или если роль из основной конфигурации была заимствована в расширение), платформа вычисляет итоговое право по формуле: разрешено все, что разрешено хотя бы в одной из ролей.

Рассмотрим подробнее ситуацию автора темы: в основной конфигурации для роли АдминистраторСистемы право на ИнтерактивноеУдаление выключено. В расширении для этой же заимствованной роли это право включено. В итоге пользователь получает это право. Расширение не замещает настройки роли из основной конфигурации, а дополняет их. Важно запомнить: с помощью расширения невозможно отобрать право, которое уже есть у пользователя в основной конфигурации; можно только добавить новые разрешения.

Разберем по шагам: визуальная индикация флажков в конфигураторе

Одной из главных причин путаницы является визуальное отображение прав в окне редактирования роли внутри расширения. Посмотрим на ситуацию, с которой столкнулся автор: для справочника «Склады» удаление работало, а для «Контрагентов» — нет. Выясним причину, проанализировав три состояния флажков:

  1. Серый флажок (или заполненное серым поле): Это означает, что право наследуется из основной конфигурации «как есть». Если в основной конфигурации право выключено, то и в расширении оно фактически остается выключенным, хотя визуально может казаться, что оно «какое-то не такое».
  2. Явно установленный (черный) флажок: Это означает, что разработчик вручную кликнул по полю и установил право именно в расширении. В этом случае право добавляется к правам основной конфигурации.
  3. Пустое белое поле: Это состояние после клика, которое явно указывает, что расширение не предоставляет данное право. Но, как мы помним из принципа аддитивности, если это право есть в основной роли, оно никуда не исчезнет.

В случае автора темы для «Складов» право было установлено явно (черный флажок), а для «Контрагентов» оно осталось в состоянии наследования (серый флажок). Поскольку в основной конфигурации ИнтерактивноеУдаление было запрещено, то и для «Контрагентов» оно не появилось.

Программные запреты и бизнес-логика

Проанализируем ситуацию дальше: что если флажки стоят правильно, а удалить объект все равно не получается? В типовых конфигурациях (ERP, УТ 11, КА) часто встречается ситуация, когда платформа блокирует интерактивное удаление на уровне программного кода или системных настроек. Разберем основные механизмы блокировки:

1. Подписки на события: В современных конфигурациях на базе БСП (Библиотеки стандартных подсистем) часто используются подписки на событие ПередУдалением. В коде обработчика может стоять жесткая проверка:


Процедура ПередУдалениемОбъекта(Источник, Отказ) Экспорт
    Если ТипЗнч(Источник) = Тип("СправочникОбъект.Контрагенты") Тогда
        // Проверка: разрешено ли в данной базе прямое удаление
        Если Не Константы.РазрешитьНепосредственноеУдалениеОбъектов.Получить() Тогда
            Сообщить("Удаление запрещено программно!");
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

2. Предопределенные элементы: Помните, что ПредопределенныеДанные невозможно удалить интерактивно в любом случае. Если вы пытаетесь удалить элемент, созданный в конфигураторе, кнопка «Удалить» может быть доступна, но система выдаст ошибку при попытке выполнения действия.

3. Функциональные опции: Иногда видимость команд удаления в интерфейсе (на формах списков) зависит от включенных ФункциональныеОпции. Если опция, отвечающая за редактирование справочника, выключена, кнопка может исчезнуть из командной панели, даже если права доступа позволяют это действие.

Как проверить, в чем именно проблема?

Выясним причину отсутствия возможности удаления с помощью простого алгоритма действий. Если вы не понимаете, почему объект не удаляется, выполните следующие шаги:

  1. Откройте список объектов через меню «Все функции» (или «Стандартные функции» -> «Справочники»). Если в этом «чистом» системном списке удаление (Shift+Del) работает, значит, проблема в кастомизированной форме списка или конкретной КоманднаяПанель.
  2. Проверьте права с помощью встроенного отчета «Права доступа» (доступен в некоторых типовых конфигурациях в разделе Администрирование).
  3. Убедитесь, что справочник в расширении заимствован корректно вместе со всеми необходимыми стандартными реквизитами и командами.

Подводя итог, можно сказать: работа с ролями в расширениях требует предельной внимательности к состоянию флажков в конфигураторе. Всегда помните, что расширение — это слой, который накладывается «сверху», и оно может только расширять границы дозволенного для пользователя, но не сужать их относительно основной конфигурации.

← На главную