При работе с программным продуктом 1С:Зарплата и Управление Персоналом 3.1 многие специалисты сталкиваются с тем, что типовые (поставляемые) профили групп доступа закрыты для редактирования в пользовательском режиме. Это сделано разработчиками для того, чтобы при обновлении конфигурации состав ролей в этих профилях актуализировался автоматически согласно требованиям законодательства и новой логике программы. Однако в реальной практике часто возникает необходимость добавить специфическую роль в профиль "Бухгалтер" или исключить лишние права из профиля "Старший кадровик", не создавая при этом десятки копий профилей. Рассмотрим, как решить эту задачу правильно и эффективно.
Разберем самый простой метод, доступный любому администратору системы без навыков программирования. В списке Профили групп доступа мы можем выбрать нужный поставляемый профиль и нажать кнопку "Скопировать". Создается новый объект, который уже не является поставляемым и доступен для любых правок.
Проанализируем плюсы и минусы этого подхода:
Выясним, как заставить систему программно модифицировать типовой профиль при каждом обновлении данных. Для этого в Библиотеке Стандартных Подсистем (БСП), на которой построена ЗУП 3.1, предусмотрен специальный механизм. Нам потребуется создать расширение и переопределить одну из процедур общего модуля.
Рассмотрим по шагам процесс реализации:
УправлениеДоступомПереопределяемый.ПриЗаполненииПоставляемыхПрофилейГруппДоступа.Посмотрим на пример кода, который позволяет добавить или удалить роли из конкретного профиля:
&После("ПриЗаполненииПоставляемыхПрофилейГруппДоступа")
Процедура ИТ_ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления)
Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл
// Пример добавления новой роли в профиль "Главный бухгалтер"
Если ОписаниеПрофиля.Наименование = "Главный бухгалтер" Тогда
ОписаниеПрофиля.Роли.Добавить("ДобавлениеИзменениеДанныхБухгалтерииМоейКонторы");
ОписаниеПрофиля.Роли.Добавить("ЧтениеДополнительныхСведений");
// Пример удаления роли из профиля "Бухгалтер"
ИначеЕсли ОписаниеПрофиля.Наименование = "Бухгалтер" Тогда
УдалитьРольИзОписанияПрофиля(ОписаниеПрофиля, "ДобавлениеИзменениеДанныхСотрудников");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура УдалитьРольИзОписанияПрофиля(ОписаниеПрофиля, Роль)
ИндексРоли = ОписаниеПрофиля.Роли.Найти(Роль);
Если ИндексРоли <> Неопределено Тогда
ОписаниеПрофиля.Роли.Удалить(ИндексРоли);
КонецЕсли;
КонецПроцедуры
Важный нюанс: Использование аннотации &После критически важно. Это позволяет сначала выполниться типовому коду 1С, который заполнит структуру ОписанияПрофилей стандартными ролями, а затем применить ваши правки. Таким образом, профиль остается "живым" и обновляемым, но с вашими корректировками.
Проанализируем ситуацию: вы написали код в расширении, но в пользовательском интерфейсе ничего не изменилось. Почему так происходит? Дело в том, что поставляемые профили обновляются не в момент открытия формы, а в момент обновления информационной базы. Чтобы изменения вступили в силу, необходимо выполнить один из следующих шагов:
/C ЗапуститьОбновлениеИнформационнойБазы.Для мгновенного применения изменений в отладочных целях можно программно вызвать метод:
УправлениеДоступом.ОбновитьПоставляемыеПрофили()
Рассмотрим альтернативный архитектурный подход. Вместо того чтобы менять типовой профиль "Кадровик", мы создаем новый маленький профиль (например, "Доп. права для кадровиков") и включаем в него только те 2-3 роли, которых не хватает в типовом. В 1С права пользователя суммируются по всем назначенным ему группам доступа. Это самый безопасный метод с точки зрения поддержки, так как вы вообще не трогаете типовые объекты.
Выясним, существует ли способ "разблокировать" профиль прямо в интерфейсе. Да, такой "хак" возможен через обработку Групповое изменение реквизитов, но мы рекомендуем использовать его с осторожностью:
Групповое изменение реквизитов.Профили групп доступа и отфильтруйте нужный вам профиль.Поставляемый и установите его в значение Ложь.После этого профиль станет доступен для редактирования. Однако помните: при следующем глобальном обновлении конфигурации система может либо вернуть этот флаг назад, либо создать дубликат профиля, что приведет к путанице в правах пользователей.
Подводя итог, можно сказать: если правки разовые и небольшие — лучше использовать дополнительные профили. Если требуется массовое изменение логики прав для всех пользователей определенных должностей — используйте программное расширение модуля УправлениеДоступомПереопределяемый. Это гарантирует стабильную работу системы после обновлений и сохранит чистоту настроек прав доступа.