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