Почему возникает ошибка «число ролей превышено» при добавлении расширения в 1С и как ее исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

Выясняем причину: дело не в ролях пользователя, а в «Основных ролях» конфигурации

Первая мысль, которая приходит в голову, — что система ограничивает количество ролей, которые можно назначить одному пользователю. Однако это заблуждение. Корень проблемы лежит глубже, в механизме, заложенном в Библиотеку стандартных подсистем (БСП), на которой построены многие типовые решения от 1С.

В конфигурации есть специальное свойство метаданных — ОсновныеРоли. Система при старте проверяет это свойство, и в нем должно быть строго определенное количество ролей (обычно две или три), включая обязательные АдминистраторСистемы и ПолныеПрава. Это сделано для оптимизации производительности при проверке прав доступа.

Проанализируем фрагмент кода из типовой конфигурации, который и вызывает ошибку:


Если (Метаданные.ОсновныеРоли.Количество <> 2 И Метаданные.ОсновныеРоли.Количество <> 3) 
    Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.АдминистраторСистемы) 
    Или Не Метаданные.ОсновныеРоли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда
    
    ВызватьИсключение НСтр("ru = 'В конфигурации в свойстве ОсновныеРоли не указаны стандартные роли |АдминистраторСистемы и ПолныеПрава или указаны лишние роли.'");
    
КонецЕсли;

Из этого кода видно, что проверка идет не по ролям текущего пользователя, а по общему списку основных ролей всей конфигурации. Система ожидает, что их будет 2 или 3, и среди них обязательно будут АдминистраторСистемы и ПолныеПрава.

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

В итоге при запуске система суммирует основные роли из основной конфигурации (например, АдминистраторСистемы, ПолныеПрава, ИнтерактивныйЗапускВнешнихОтчетовИОбработок) и основную роль из вашего расширения. Общее количество становится равным четырем, что не соответствует условию проверки (<> 2 И <> 3), и система прерывает запуск.

Правильное решение: убираем роль расширения из списка основных

Решение проблемы простое и не требует никаких изменений в основной конфигурации. Нужно лишь отредактировать свойства самого расширения. Разберем по шагам, как это сделать.

  1. Откройте вашу базу в режиме «Конфигуратор».
  2. В дереве метаданных найдите ветку «Расширения» и выберите ваше расширение.
  3. Нажмите на нем правой кнопкой мыши и выберите пункт «Свойства», чтобы открыть палитру свойств.
  4. В палитре свойств найдите строку «Основные роли». Нажмите на кнопку с многоточием (...) в этой строке, чтобы открыть окно редактирования списка.
  5. В открывшемся окне вы увидите автоматически созданную роль вашего расширения. Выделите ее и удалите из этого списка с помощью соответствующей кнопки.
  6. Нажмите «ОК», сохраните конфигурацию расширения (кнопка с дискетой в окне расширения) и обновите конфигурацию базы данных (F7).

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

Как грамотно управлять правами в расширении: используем профили доступа

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

Правильный и рекомендованный фирмой «1С» подход — использовать механизм Профилей групп доступа.

Современная концепция управления правами в 1С строится на следующих принципах:

Применительно к вашей задаче с расширением, правильный алгоритм действий должен быть таким:

  1. В своем расширении создайте новую роль, например, ДоступКФункционалуРасширения.
  2. Дайте этой роли права на все новые объекты, которые добавляет ваше расширение (отчеты, обработки, документы и т.д.).
  3. Убедитесь, что эта роль не указана в свойстве «Основные роли» вашего расширения.
  4. Запустите систему в режиме «1С:Предприятие» под администратором.
  5. Перейдите в раздел «НСИ и администрирование» -> «Настройки пользователей и прав» -> «Профили групп доступа».
  6. Создайте новый профиль, например, с таким же названием «Доступ к функционалу расширения».
  7. В созданном профиле на вкладке «Разрешенные действия (роли)» найдите и отметьте галочкой вашу новую роль из расширения.
  8. Теперь назначьте этот новый профиль нужным пользователям через справочник «Группы доступа».

Такой подход не только решает исходную проблему с запуском, но и делает систему прав доступа в вашей базе гибкой, управляемой и безопасной, что полностью соответствует стандартам разработки для платформы 1С.

← На главную