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

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

В процессе настройки прав доступа в конфигурации 1С:Зарплата и Управление Персоналом 3.1 системные администраторы и программисты часто сталкиваются с неочевидным поведением системы. Типичная ситуация: пользователю назначен профиль «Только просмотр», однако в документе Ведомость в банк остается активной кнопка «Передан для выплаты» (в меню «Еще» или непосредственно на форме). Нажатие этой кнопки не только меняет статус документа, но и программно снимает блокировку с формы, позволяя редактировать и перепроводить документ, что нарушает всю логику разграничения прав.

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

Выясним причину: почему права «Только просмотр» игнорируются?

Для начала проанализируем ситуацию и поймем механику работы системы. Кнопка «Передан для выплаты» в ЗУП 3.1 — это не просто переключатель реквизита внутри документа. При ее нажатии происходит запись в специальный технический регистр сведений «Ограниченные документы».

Алгоритм работы платформы в этот момент выглядит следующим образом:

  1. Система проверяет наличие прав у пользователя на изменение регистра ОграниченныеДокументы.
  2. Если право на запись в этот регистр есть (а оно часто включено в типовые роли для обеспечения корректной работы интерфейса), система создает там запись, связанную с текущей ведомостью.
  3. Программный код в модуле формы документа при открытии или обновлении проверяет наличие записи в этом регистре. Если статус «Передан для выплаты» установлен, форма может вести себя специфическим образом, игнорируя стандартные ограничения прав на сам объект ДокументСсылка.ВедомостьНаВыплатуЗарплатыВБанк.

Таким образом, корень проблемы кроется в избыточных правах на вспомогательный регистр, а не на сам документ.

Способ 1. Ограничение прав на технический регистр (Рекомендуемое решение)

Разберем самый правильный с точки зрения архитектуры 1С метод — корректировку ролей. Чтобы закрыть возможность обхода прав, необходимо лишить пользователя права на изменение регистра Ограниченные документы.

Рассмотрим подробнее по шагам:

  1. Откроем конфигуратор и найдем роль, которая назначена вашему пользователю (или создадим копию типовой роли для просмотра).
  2. В дереве объектов метаданных перейдем в раздел Регистры сведений.
  3. Найдем объект ОграниченныеДокументы.
  4. Проанализируем установленные флаги. Если для этого регистра стоят галочки «Редактирование» или «Запись», их необходимо снять, оставив только «Чтение» и «Просмотр».
  5. Сохраним изменения и обновим конфигурацию базы данных.

После этих действий при попытке нажать кнопку «Передан для выплаты» система выдаст стандартное сообщение о нарушении прав доступа, и документ останется заблокированным для редактирования.

Способ 2. Анализ и отключение специфических ролей

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

В ЗУП 3.1 существует роль (или ее аналоги в разных версиях БСП), отвечающая конкретно за изменение статусов документов выплаты — например, ИзменениеСтатусаДокументовВыплаты. Посмотрим на список ролей в профиле: если эта роль включена в состав «Только просмотр» (что иногда бывает из-за ошибок в типовых поставляемых профилях), ее нужно исключить.

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

Способ 3. Использование расширения конфигурации

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

Рассмотрим пример кода, который можно разместить в расширении в модуле формы документа ВедомостьНаВыплатуЗарплатыВБанк. Мы будем использовать обработчик ПриСозданииНаСервере, чтобы управлять видимостью элементов управления.


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

Этот метод хорош тем, что он не влияет на обновление программы и позволяет гибко настроить условия (например, скрывать кнопку только для конкретных подразделений или групп пользователей).

Способ 4. Почему "Дата запрета редактирования" не всегда помогает?

Многие специалисты надеются на механизм ДатаЗапретаРедактирования. Однако в данной ситуации выясним причину ее неэффективности. Дата запрета блокирует проведение документа и изменение данных, которые влияют на регистры накопления (взаиморасчеты с сотрудниками).

Команда «Передан для выплаты» во многих релизах реализована как «сервисная». Она создает запись в независимом регистре сведений, который может не входить в список проверяемых объектов при контроле даты запрета. В результате пользователь может нажать кнопку, документ «разблокируется» на уровне формы, и хотя провести его окончательно система может и не дать (сработает дата запрета), пользователь все равно сможет изменить реквизиты внутри формы, что недопустимо для режима «Только просмотр».

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

Подводя итог, можно сказать, что наиболее надежным методом является комбинированный подход:

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

Следование этим инструкциям позволит вам создать по-настоящему защищенную среду, где права «Только просмотр» будут работать корректно и без исключений.

← На главную