При разработке в среде 1С:Предприятие 8.3 часто возникает необходимость разграничить права доступа для пользователей, не внося изменения в основную конфигурацию. Использование расширений — это стандарт де-факто для решения таких задач, так как оно позволяет сохранить базу на полной поддержке. Однако процесс создания роли в расширении таит в себе множество нюансов: от ошибок компиляции до «невидимых» кнопок в интерфейсе. Чтобы избежать проблем с вызовами процедур, рекомендуется проводить предварительный анализ состава расширений на наличие ошибок. Разберем по шагам, как преодолеть все трудности и настроить права корректно — для этого есть обработка для автоматической настройки прав доступа в 1С.
Рассмотрим первую ситуацию, с которой сталкивается разработчик. Вы создали расширение, добавили в него роль, заимствовали объект (например, справочник Номенклатура) и установили права. При попытке обновить конфигурацию базы данных система выдает критическую ошибку. Проанализируем причину ее возникновения.
В свойствах самого расширения (корневой элемент в дереве метаданных расширения) существует свойство «Основная роль». Если этот флаг установлен, 1С пытается автоматически назначить данную роль всем пользователям системы. Однако платформа накладывает жесткое ограничение: основная роль расширения не может изменять права на объекты, которые были заимствованы из основной конфигурации. Это сделано для обеспечения безопасности и предсказуемости поведения системы. В сложных случаях может потребоваться быстрая проверка прав доступа на объект метаданных, чтобы точно определить, какие разрешения конфликтуют.
Решение: необходимо зайти в свойства расширения и снять галочку «Основная роль». После этого права на объекты будут успешно приняты платформой. Но помните, что теперь эту роль нужно будет назначить пользователю вручную в конфигураторе или через механизмы БСП в пользовательском режиме.
Выясним, почему после успешного создания роли пользователь не может войти в систему. Ошибка «Нет прав на запуск требуемого вида клиента» означает, что у пользователя в совокупности всех назначенных ему ролей отсутствует право на технический старт приложения. Одной лишь роли «Менеджер по номенклатуре» недостаточно для работы программы.
Проанализируем минимально необходимый набор прав для запуска:
ТонкийКлиент, ТолстыйКлиент или WebКлиент в зависимости от способа подключения.Вывод данных.Без базовых ролей система «упадет» еще до открытия главного окна, так как не сможет инициализировать параметры сеанса, прочитать константы и проверить функциональные опции. Если вы создаете «чистую» роль в расширении, обязательно убедитесь, что в профиле пользователя в режиме «1С:Предприятие» добавлена хотя бы одна роль из основной конфигурации, отвечающая за запуск (например, ЗапускТонкогоКлиента).
Допустим, база запустилась, роль назначена, пользователь видит список номенклатуры, но не может добавить новый элемент — кнопка «Создать» отсутствует. Рассмотрим причины такого поведения интерфейса.
Во-первых, проанализируем разницу между правом Добавление и Интерактивное добавление. В настройках роли 1С разделяет эти действия. Право Добавление позволяет создавать объекты программно (через код), а право Интерактивное добавление отвечает за наличие визуальных элементов управления (кнопок) в формах. Убедитесь, что для справочника Номенклатура в вашей роли расширения установлены обе галочки. Если же вам нужно более гибко управлять визуализацией, можно использовать сторонние решения на настройку доступности элементов формы у пользователей.
Во-вторых, посмотрим на зависимости объектов. В 1С объекты редко существуют изолированно. Например, для создания Номенклатуры пользователю почти всегда нужно выбрать Вид номенклатуры или Единицу измерения. Если у созданной вами роли нет прав на «Чтение» и «Просмотр» этих связанных справочников, система может блокировать создание основного объекта, так как его заполнение станет невозможным.
Иногда права настроены верно, но интерфейс остается ограниченным. Выясним причину в механизме Функциональных опций. Многие поля и кнопки в типовых конфигурациях привязаны к константам. Если ваша новая роль не имеет прав на чтение системных констант (например, ИспользоватьНесколькоВидовНоменклатуры), то элементы управления, связанные с этими опциями, будут скрыты автоматически, независимо от прав на сам справочник.
Также стоит учитывать работу RLS (Record Level Security). Важно понимать принцип «суммирования» прав в 1С:
Рассмотрим пошагово оптимальный процесс создания роли, который минимизирует количество ошибок:
Основная роль.УправлениеНоменклатуройРасш.Чтение, Просмотр, Добавление, Изменение, Интерактивное добавление.Открытие тонкого клиента (или аналогичную базовую роль конфигурации).Такой подход гарантирует, что все механизмы инициализации системы (параметры сеанса, функциональные опции) отработают корректно за счет стандартных ролей, а ваши специфические права добавятся через роль расширения.
Иногда полезно проверить, как система видит права пользователя программно. Рассмотрим пример кода, который можно запустить во внешней обработке для диагностики:
Если ПравоДоступа("ВводНового", Метаданные.Справочники.Номенклатура) Тогда
Сообщить("Пользователь может интерактивно создавать номенклатуру");
Иначе
Сообщить("Право на интерактивное добавление отсутствует!");
КонецЕсли;
Если РольДоступна("УправлениеНоменклатуройРасш") Тогда
Сообщить("Роль из расширения успешно подключена сеансу");
КонецЕсли;
Проанализировав результаты такой проверки, вы сможете точно определить, где именно кроется проблема. Соблюдение этих правил позволит вам эффективно расширять возможности системы, сохраняя чистоту основной конфигурации.