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