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