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