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