Настройка пользовательского интерфейса в 1С:ERP — задача нетривиальная. В отличие от простых конфигураций, здесь права доступа и видимость разделов тесно переплетены. Часто возникает ситуация, когда стандартные роли «тянут» за собой лишние подсистемы, а попытка их отключить приводит к потере доступа к важным документам. Рассмотрим подробнее, как эффективно управлять видимостью подсистем, не превращая поддержку системы в кошмар.
Прежде всего, проанализируем ситуацию: в 1С:ERP видимость раздела (подсистемы первого уровня) зависит от наличия у пользователя права Просмотр на саму подсистему и хотя бы на один объект, включенный в эту подсистему. Проблема в том, что типовые роли часто включают права на объекты из разных разделов для обеспечения целостности бизнес-процессов.
Разберем основные стратегии решения этой задачи: от административных методов до программной разработки.
Это один из самых чистых способов с точки зрения архитектуры метаданных. Суть заключается в разделении прав на данные и прав на интерфейс.
ИнтерфейсПродажи.Просмотр только на те Подсистемы, которые должен видеть пользователь.Таким образом, основные роли будут отвечать за то, что пользователь может делать (читать, записывать, проводить), а интерфейсная роль — за то, что он будет видеть в главном меню.
Если нам нужно настроить внешний вид панелей (скрыть конкретные пункты внутри разделов) без изменения прав доступа, воспользуемся штатным инструментом Библиотеки стандартных подсистем (БСП), которая встроена в ERP.
Проанализируем алгоритм действий администратора:
Настройка панели разделов.Администрирование — Настройки пользователей и прав — Персональные настройки пользователей — Копирование настроек.Панель разделов и укажем список пользователей (или группу), которым нужно «раскатать» этот интерфейс.Важный нюанс: Чтобы пользователи не вернули всё обратно, можно программно запретить редактирование настроек интерфейса, переопределив параметры в модуле управляемого приложения.
Иногда требуется настроить интерфейс для сотен пользователей программно. Выясним, как это работает «под капотом». Настройки интерфейса хранятся в системном хранилище. Мы можем использовать метод Копировать объекта ХранилищеСистемныхНастроек.
Рассмотрим пример кода, который позволяет растиражировать настройки панели разделов:
Процедура КопироватьНастройкиИнтерфейса(ОтКого, Кому)
КлючОбъекта = "Общее/ПанельРазделов/НастройкаКнопки";
Настройки = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, , , ОтКого);
Если Настройки <> Неопределено Тогда
Для Каждого ТекущийПользователь Из Кому Цикл
ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, , Настройки, , ТекущийПользователь);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Этот метод позволяет автоматизировать процесс настройки при создании новых учетных записей или при массовом изменении структуры компании.
Проанализируем ситуацию, когда раздел не нужен вообще никому в компании или определенному набору должностей. В 1С:ERP многие разделы привязаны к ФункциональнымОпциям. Если в настройках системы отключить, например, «Производство», то подсистема исчезнет из интерфейса у всех пользователей автоматически.
Если же нужно скрыть раздел выборочно, можно создать собственную функциональную опцию в расширении, привязать к ней видимость нужной подсистемы и управлять значением этой опции в зависимости от параметров сеанса пользователя.
В тексте обсуждения упоминалось, что использование RLS (ограничение доступа на уровне записей) приводит к тормозам. Это часто случается в старых версиях или при неправильной настройке. Посмотрим на современные рекомендации для ERP:
Используйте Производительный режим RLS. Он работает через специальные таблицы доступа и значительно быстрее классического метода. Чтобы настроить доступ по одной организации (как хотел автор вопроса):
Профиле групп доступа на закладке Ограничения доступа выберите вид доступа Организации.Все запрещены, исключения назначаются в группах доступа.Группе доступа укажите разрешенную организацию.Подводя итог, можно сказать, что «серебряной пули» не существует, но комбинация методов дает отличный результат. Для массовой настройки используйте интерфейсные роли в расширении для управления составом разделов и механизм копирования настроек БСП для тонкой настройки содержимого самих разделов. Это позволит избежать «раздувания» количества ролей и сохранит производительность системы.