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

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

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

Понимание механизма исправлений в ЗУП 3.1

Прежде чем переходить к блокировке, проанализируем, как работает этот механизм. Кнопка (или гиперссылка) «Исправить» появляется в формах так называемых многофункциональных документов автоматически. Это происходит в двух случаях:

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

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

Способ 1. Централизованная настройка видимости формы

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

  1. Зайдем в систему под пользователем с правами Администратор.
  2. Откроем целевой документ (например, Документ.Отпуск).
  3. Через меню «Ещё» выберем пункт «Изменить форму».
  4. Найдем в дереве элементов команду «Исправить» и снимем с нее флажок видимости.
  5. После сохранения настройки перейдем в раздел «Администрирование» — «Настройки пользователей и прав».
  6. Выберем пункт «Копирование настроек».
  7. Укажем пользователя-образца (себя) и выберем всех пользователей из группы «Кадровики» в качестве получателей.

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

Способ 2. Использование персональных дат запрета изменения данных

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

В разделе «Администрирование» — «Дату запрета изменения данных» установим переключатель в положение «По пользователям». Это позволит нам установить дату запрета для группы «Кадровики» на конец прошлого месяца, в то время как для группы «Расчетчики» период останется открытым. В этом случае при попытке нажать «Исправить» в документе прошлого периода программа выдаст сообщение о невозможности записи нового документа в закрытом периоде.

Способ 3. Использование расширения для управления общим модулем

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

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


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

Этот метод хорош тем, что он работает централизованно. Достаточно один раз «зацепиться» за общий механизм, и кнопка исчезнет во всех многофункциональных документах (Отпусках, Больничных, Командировках) для всех кадровиков сразу.

Способ 4. Подписка на событие «ПередЗаписью»

Посмотрим на ситуацию со стороны безопасности данных. Даже если кнопка скрыта, документ может быть создан программно или через копирование. Чтобы исключить это, создадим в расширении подписку на событие ПередЗаписью для группы документов. Разберем алгоритм проверки:


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

В данном примере мы используем проверку права на документ НачислениеЗарплаты как косвенный признак того, является ли пользователь расчетчиком. Если права на расчет отсутствуют, система заблокирует запись любого документа, у которого заполнено поле ИсправляемыйДокумент.

Способ 5. Настройка ограничений на уровне записей (RLS)

Разберем самый сложный, но «штатный» с точки зрения архитектуры способ — RLS (Record Level Security). В конфигураторе можно настроить профиль групп доступа так, чтобы для ролей кадровика действовало ограничение на изменение документов, у которых реквизит ИсправляемыйДокумент не является пустым.

Проанализируем плюсы и минусы RLS:

Резюме и рекомендации

Выяснив все возможные варианты, мы рекомендуем следующий порядок действий:

  1. Если кадровиков немного — воспользуйтесь Способом 1 (Настройка формы) и Способом 2 (Персональные даты запрета). Это не требует навыков программирования и легко откатывается назад.
  2. Если в организации строгий регламент и много пользователей — используйте Способ 3 (Расширение). Это наиболее надежный и современный метод управления интерфейсом в 1С:Предприятии 8.3.
  3. Всегда комбинируйте визуальное скрытие кнопок с административными мерами (инструкциями и регламентами взаимодействия между отделами), так как в ЗУП 3.1 процессы кадров и расчета неразрывно связаны.

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

← На главную