Как изменить состав ролей в поставляемых профилях ЗУП 3.1?

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

При работе с программным продуктом 1С:Зарплата и Управление Персоналом 3.1 многие специалисты сталкиваются с тем, что типовые (поставляемые) профили групп доступа закрыты для редактирования в пользовательском режиме. Это сделано разработчиками для того, чтобы при обновлении конфигурации состав ролей в этих профилях актуализировался автоматически согласно требованиям законодательства и новой логике программы. Однако в реальной практике часто возникает необходимость добавить специфическую роль в профиль "Бухгалтер" или исключить лишние права из профиля "Старший кадровик", не создавая при этом десятки копий профилей. Рассмотрим, как решить эту задачу правильно и эффективно.

Способ 1. Копирование существующего профиля

Разберем самый простой метод, доступный любому администратору системы без навыков программирования. В списке Профили групп доступа мы можем выбрать нужный поставляемый профиль и нажать кнопку "Скопировать". Создается новый объект, который уже не является поставляемым и доступен для любых правок.

Проанализируем плюсы и минусы этого подхода:

Способ 2. Программное изменение через расширение (Рекомендуемый)

Выясним, как заставить систему программно модифицировать типовой профиль при каждом обновлении данных. Для этого в Библиотеке Стандартных Подсистем (БСП), на которой построена ЗУП 3.1, предусмотрен специальный механизм. Нам потребуется создать расширение и переопределить одну из процедур общего модуля.

Рассмотрим по шагам процесс реализации:

  1. Создадим новое расширение конфигурации.
  2. Добавим в него общий модуль УправлениеДоступомПереопределяемый.
  3. Создадим процедуру-обработчик для метода ПриЗаполненииПоставляемыхПрофилейГруппДоступа.

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


&После("ПриЗаполненииПоставляемыхПрофилейГруппДоступа")
Процедура ИТ_ПриЗаполненииПоставляемыхПрофилейГруппДоступа(ОписанияПрофилей, ПараметрыОбновления)
    
    Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл
        
        // Пример добавления новой роли в профиль "Главный бухгалтер"
        Если ОписаниеПрофиля.Наименование = "Главный бухгалтер" Тогда
            ОписаниеПрофиля.Роли.Добавить("ДобавлениеИзменениеДанныхБухгалтерииМоейКонторы");
            ОписаниеПрофиля.Роли.Добавить("ЧтениеДополнительныхСведений");
            
        // Пример удаления роли из профиля "Бухгалтер"
        ИначеЕсли ОписаниеПрофиля.Наименование = "Бухгалтер" Тогда
            УдалитьРольИзОписанияПрофиля(ОписаниеПрофиля, "ДобавлениеИзменениеДанныхСотрудников");
        КонецЕсли;
        
    КонецЦикла; 
    
КонецПроцедуры

Процедура УдалитьРольИзОписанияПрофиля(ОписаниеПрофиля, Роль)
    ИндексРоли = ОписаниеПрофиля.Роли.Найти(Роль);
    Если ИндексРоли <> Неопределено Тогда
        ОписаниеПрофиля.Роли.Удалить(ИндексРоли);
    КонецЕсли; 
КонецПроцедуры

Важный нюанс: Использование аннотации &После критически важно. Это позволяет сначала выполниться типовому коду 1С, который заполнит структуру ОписанияПрофилей стандартными ролями, а затем применить ваши правки. Таким образом, профиль остается "живым" и обновляемым, но с вашими корректировками.

Способ 3. Принудительное обновление вспомогательных данных

Проанализируем ситуацию: вы написали код в расширении, но в пользовательском интерфейсе ничего не изменилось. Почему так происходит? Дело в том, что поставляемые профили обновляются не в момент открытия формы, а в момент обновления информационной базы. Чтобы изменения вступили в силу, необходимо выполнить один из следующих шагов:

Для мгновенного применения изменений в отладочных целях можно программно вызвать метод:

УправлениеДоступом.ОбновитьПоставляемыеПрофили()

Способ 4. Создание дополнительных "микро-профилей"

Рассмотрим альтернативный архитектурный подход. Вместо того чтобы менять типовой профиль "Кадровик", мы создаем новый маленький профиль (например, "Доп. права для кадровиков") и включаем в него только те 2-3 роли, которых не хватает в типовом. В 1С права пользователя суммируются по всем назначенным ему группам доступа. Это самый безопасный метод с точки зрения поддержки, так как вы вообще не трогаете типовые объекты.

Способ 5. Снятие флага "Поставляемый" через групповое изменение реквизитов

Выясним, существует ли способ "разблокировать" профиль прямо в интерфейсе. Да, такой "хак" возможен через обработку Групповое изменение реквизитов, но мы рекомендуем использовать его с осторожностью:

  1. Откройте обработку Групповое изменение реквизитов.
  2. Выберите объект Профили групп доступа и отфильтруйте нужный вам профиль.
  3. В настройках (кнопка "Дополнительные параметры") включите флаг "Показывать служебные реквизиты".
  4. Найдите реквизит Поставляемый и установите его в значение Ложь.

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

Резюме

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

← На главную