Как ограничить доступ сотрудникам к отчету по заработной плате в 1С?

Бизнес-аналитик 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Понимание архитектуры задачи

Для решения поставленной задачи важно понимать, что просто «скрыть колонку» в отчете недостаточно. Опытный пользователь может выгрузить данные в Excel или воспользоваться другими инструментами системы. Поэтому мы будем опираться на профессиональные методы разграничения прав: RLS (ограничение на уровне записей), программную фильтрацию и использование ролей. Поскольку в большинстве случаев отчеты являются самописными, у нас есть полная гибкость в реализации.

Метод 1: Использование ролей и программной фильтрации

Самый понятный для реализации способ — это создание отдельных ролей для доступа к отчету. Мы разделим пользователей на две группы: «Рядовые сотрудники» и «Мастера/Руководители».

  1. Создайте в конфигураторе две роли: ПросмотрЗП_Рядовой и ПросмотрЗП_Мастер.
  2. В коде отчета, при формировании данных, реализуйте проверку текущей роли пользователя.
  3. Если у пользователя роль ПросмотрЗП_Рядовой, система должна принудительно наложить фильтр по его ФизическомуЛицу.

Рассмотрим пример кода, который можно использовать в процедуре формирования отчета:


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

Метод 2: Применение RLS (Row Level Security)

Если требуется максимальный уровень безопасности, используйте RLS. Этот механизм работает на уровне самой СУБД или платформы 1С и «обрезает» выборку данных еще до того, как они попадут в отчет. Даже если пользователь попытается изменить код или сформировать запрос к базе данных вручную, он не получит доступ к «чужим» записям.

При настройке RLS необходимо:

Важные нюансы реализации

При выполнении данной задачи обратите внимание на следующие моменты:

Заключение: что передать программисту?

Чтобы быстро и качественно решить задачу, сформулируйте ТЗ следующим образом:

«Необходимо ограничить доступ к данным в отчете по ЗП. При формировании отчета пользователем с правами "Рядовой сотрудник" отчет должен автоматически фильтроваться по текущему физическому лицу, привязанному к пользователю. Для пользователей с ролью "Мастер" ограничений быть не должно. Прошу реализовать это с помощью механизма ролей или RLS для обеспечения корректности данных и безопасности».

Такой подход позволит вам получить надежное решение, защищенное от любопытства сотрудников, и при этом сохранить удобство работы для руководства.

← На главную