Как ограничить доступ к расчетному листку для определенных пользователей в 1С:ЗКГУ и ЗУП 3.1?

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

В системах 1С:Зарплата и кадры государственного учреждения (ЗКГУ) и 1С:Зарплата и управление персоналом (ЗУП) версии 3.1 часто возникает задача тонкой настройки прав доступа. Одной из специфических проблем является необходимость ограничить доступ к отчету «Расчетный листок» для пользователей с профилем «Расчетчик», при этом сохранив их возможность работать с другими отчетами из той же группы (например, «Анализ начислений и удержаний»).

Сложность заключается в том, что в архитектуре 1С многие зарплатные отчеты являются лишь разными вариантами одного и того же объекта метаданных — отчета АнализНачисленийИУдержаний. Если мы просто заберем права на этот объект, пользователь потеряет доступ ко всем ключевым отчетам по зарплате. Разберем по шагам, как решить эту задачу различными методами.

Метод 1. Управление через справочник «Варианты отчетов»

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

Проанализируем алгоритм действий:

  1. Перейдем в раздел АдминистрированиеПечатные формы, отчеты и обработкиОтчеты.
  2. В открывшемся списке найдем отчет «Расчетный листок». Важно понимать, что в списке может быть несколько вариантов с похожими названиями (например, для разных групп сотрудников).
  3. В карточке варианта отчета мы можем снять флаг «Видимость по умолчанию».
  4. Также в интерфейсе настройки прав для конкретных групп пользователей или профилей можно исключить данный вариант отчета из списка доступных.

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

Метод 2. Программное ограничение через расширение конфигурации

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

Рассмотрим подробнее реализацию в процедуре ПриКомпоновкеРезультата. Эта процедура вызывается непосредственно перед тем, как система начнет собирать данные для вывода в отчет.

Создадим расширение и добавим в него отчет АнализНачисленийИУдержаний. В модуле объекта отчета в расширении создадим обработчик:


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

КонецПроцедуры

Выясним причину выбора именно этого метода: процедура ПриКомпоновкеРезультата срабатывает всегда, когда отчет запускается на формирование, включая вызовы из программного кода или других форм.

Метод 3. Перехват при создании формы (интерфейсный запрет)

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

В расширении для формы отчета ФормаОтчета (которая обычно является общей или заимствованной) добавим процедуру ПриСозданииНаСервере:


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

КонецПроцедуры

Метод 4. Использование «Отрицательной» логики доступа

В платформе 1С 8.3 нет классических «запрещающих» ролей (кроме механизма RLS). Поэтому мы рекомендуем создать в расширении новую роль, например, РазрешитьПросмотрРасчетныхЛистков.

Разберем, почему это удобнее:

Это гораздо надежнее, чем проверка по имени профиля (например, «Расчетчик»), так как название профиля может быть изменено администратором в пользовательском режиме, и тогда программный код перестанет отрабатывать корректно.

Дополнительные рекомендации и нюансы

Посмотрим на ситуацию шире. В ЗУП/ЗКГУ КОРП «Расчетный листок» может формироваться не только через панель отчетов, но и:

  1. Из документов «Начисление зарплаты и взносов» через кнопку «Печать» или «Отчеты».
  2. Из справочника «Сотрудники».
  3. Из личного кабинета сотрудника (если используется сервис 1С:Кабинет сотрудника).

Проанализируем риски: Если вы заблокируете только вариант отчета в справочнике «Варианты отчетов», кнопка печати в документе «Начисление зарплаты» все равно может сработать, так как она может обращаться к макету напрямую или вызывать формирование программно с обходом стандартных настроек видимости.

Именно поэтому Метод 2 (вставка кода в МодульОбъекта) является самым приоритетным и безопасным. Проверка в ПриКомпоновкеРезультата гарантирует, что какие бы настройки ни применил пользователь, данные не будут выведены на экран, если у него нет соответствующего разрешения.

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

← На главную