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