Как предоставить кадровику право на установку флага «Расчет утвердил» в документах «Отпуск без сохранения оплаты» и «Отсутствие (болезнь, прогул, неявка)»?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Бухгалтерский учет IT и автоматизация бизнеса
← На главную

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

Рассмотрим, почему это не получается сделать стандартными средствами профилей групп доступа и как решить эту задачу программным путем.

Почему не удается решить задачу типовыми средствами

При попытке просто добавить соответствующие роли в профиль кадровика, мы сталкиваемся с тем, что флаг Расчет утвердил остается недоступным для редактирования. Это происходит из-за архитектурных особенностей механизма Многофункциональных документов (МФД).

Система 1С жестко разграничивает зоны ответственности:

  1. За доступность реквизита Расчет утвердил отвечает наличие прав на изменение данных, которые уже были обработаны расчетчиком.
  2. В современных версиях конфигурации (начиная с 3.1.17) проверка прав доступа вынесена в модули менеджеров конкретных документов и привязана к Определяемым типам объектов.
  3. Простая установка роли, такой как Редактирование начисленной зарплаты в документах, дает права на все документы системы, что является избыточным и небезопасным с точки зрения разделения учета.

Разбор архитектуры: механизмы МФД

Чтобы успешно реализовать задачу, необходимо понимать, как работает проверка прав в современных версиях 1С:ЗУП. Ранее использовались общие модули, такие как МногофункциональныеДокументыБЗК, однако сейчас логика проверки распределена по модулям менеджеров соответствующих документов.

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

Решение задачи через расширение конфигурации

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

Разберем шаги, которые необходимо предпринять для реализации:

  1. Определение контекста: В расширении необходимо найти процедуры, отвечающие за установку доступности элементов формы (обычно это процедуры в модуле менеджера или модуле формы документа).
  2. Использование директив: Используйте директивы &Вместо или &После для переопределения стандартных проверок доступа.
  3. Реализация логики: В процедуре проверки прав необходимо добавить условие, которое для целевых документов (ОтпускБезСохраненияОплаты и ОтсутствиеБолезньПрогулНеявка) будет принудительно возвращать значение Истина для установки доступности поля, если пользователь входит в соответствующий профиль.

Примерная логика в коде может выглядеть следующим образом (псевдокод для концептуального понимания):


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

Важные рекомендации при разработке

При написании расширения важно учитывать следующие моменты:

Подводя итог: задача не решается настройкой ролей, так как требует глубокой программной доработки механизмов управления доступом к полям формы. Использование расширения — оптимальный путь, позволяющий реализовать требования бизнеса без ущерба для безопасности данных и стабильности системы.

← На главную