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