Как запретить просмотр ФОТ и оклада в карточке сотрудника в 1С:ЗУП 3.1?

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

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

В этой статье мы подробно разберем, какие механизмы платформы 1С отвечают за вывод этих показателей, выясним причину возникновения сложностей при настройке прав и рассмотрим несколько эффективных способов решения данной задачи — от типовых настроек до разработки небольшого расширения конфигурации.

Выясняем причину: какая роль отвечает за видимость оклада и ФОТ

Для начала проанализируем, как именно платформа определяет, нужно ли показывать оклад и ФОТ на форме элемента справочника Сотрудники. Данные показатели выводятся на форму динамически и связаны с реквизитом ТекущаяТарифнаяСтавка (или аналогичными полями плановых начислений).

Опытным путем и в ходе анализа состава ролей конфигурации «1С:ЗУП 3.1» было установлено следующее:

  1. Отображение оклада в карточке сотрудника напрямую регулируется типовой ролью «Чтение данных для начисления зарплаты» (в метаданных — ЧтениеДанныхДляНачисленияЗарплаты).
  2. Если у пользователя в профиле доступа полностью отсутствует эта роль (а также смежные роли, дающие права на чтение регистров плановых начислений), то поля «Оклад» и «ФОТ» на форме карточки сотрудника и в списках отображаться не будут — они останутся пустыми или будут скрыты.

Если мы создаем профиль на основании стандартного профиля «Аудитор» или «Кадровик (без доступа к зарплате)», программа по умолчанию должна скрывать эти поля. Однако на практике часто возникает ситуация, когда оклад все равно остается видимым. Рассмотрим, почему это происходит.

Проблема объединения прав (аддитивности ролей) при работе с несколькими организациями

Основная сложность настройки прав в 1С заключается в механизме аддитивности (складывания) ролей. Если пользователю назначено несколько групп доступа (профилей), то его итоговые права представляют собой объединение всех разрешенных действий из всех назначенных ролей.

Рассмотрим распространенную ситуацию:

В данном случае платформа применит правило объединения прав. Поскольку у пользователя есть роль Чтение данных для начисления зарплаты из первого профиля, она станет доступна глобально в рамках текущего сеанса работы. Платформа отобразит реквизиты оклада и ФОТ на форме карточки сотрудника независимо от того, карточку сотрудника какой организации (А или Б) открыл пользователь в данный момент.

Важный вывод: Настроить права типовыми средствами «1С:ЗУП 3.1» так, чтобы один и тот же пользователь по одной организации видел оклады, а по другой — нет, невозможно из-за особенностей архитектуры прав доступа платформы 1С.

Если же перед вами стоит задача полностью закрыть просмотр зарплаты для конкретного пользователя (без разделения по организациям), это можно решить несколькими способами.

Способ 1. Тонкая настройка типового профиля доступа

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

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа.
  2. Создадим новый профиль доступа (например, копированием типового профиля «Кадровик» или «Аудитор»).
  3. В списке разрешенных ролей найдем и принудительно снимем флажки со следующих ролей:
    • Чтение данных для начисления зарплаты;
    • Чтение плановых начислений;
    • Чтение штатного расписания (при необходимости, так как там также фигурируют оклады);
    • Любые роли, связанные с расчетом и выплатой зарплаты.
  4. Сохраним профиль и создадим соответствующую Группу доступа, назначив её целевому пользователю. При этом убедимся, что у пользователя нет других действующих профилей, которые могут содержать данные роли.

После этого при входе в карточку сотрудника поля ФОТ и оклада отображаться не будут.

Способ 2. Пользовательская настройка видимости реквизитов формы

Если вам нужно оперативно скрыть элементы интерфейса на форме для конкретного пользователя без изменения конфигурации и без создания сложных профилей, можно воспользоваться механизмом пользовательской настройки формы.

Для этого выполним следующие действия:

  1. Зайдем в программу под учетной записью нужного пользователя и откроем карточку любого сотрудника.
  2. В правом верхнем углу нажмем кнопку Еще — Изменить форму.
  3. В открывшемся дереве элементов интерфейса найдем группу элементов, отвечающую за вывод оклада и ФОТ (например, поле ТекущаяТарифнаяСтавка).
  4. Снимем флажки видимости с этих элементов и нажмем кнопку Применить (или ОК).

Обратите внимание: Этот способ не является надежным средством защиты информации. Если пользователь обладает достаточной квалификацией («ушлый пользователь»), он сможет самостоятельно зайти в настройки формы и вернуть флажки видимости обратно.

Способ 3. Реализация запрета с помощью Расширения конфигурации

Наиболее надежным, гибким и при этом безопасным для обновлений способом является использование механизма Расширений конфигурации. Этот вариант позволяет обойти ограничения аддитивности ролей и гарантированно скрыть элементы формы программным путем.

Рассмотрим, как реализовать этот алгоритм. Создадим новое расширение и добавим в него форму элемента справочника Сотрудники. Нам потребуется перехватить процедуру ПриСозданииНаСервере этой формы.

Напишем программный код в модуле расширения формы сотрудника:


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

Преимущества программного скрытия через расширение:

Резюме

Мы проанализировали особенности работы прав доступа в программе «1С:ЗУП 3.1» в части отображения ФОТ и окладов в карточке сотрудников. Выяснилось, что при использовании только одного профиля задача легко решается отключением роли Чтение данных для начисления зарплаты. В случаях, когда права пользователя пересекаются по разным организациям, лучшим решением будет создание простого расширения конфигурации, которое гарантирует надежное сокрытие конфиденциальных данных на уровне кода сервера.

← На главную