Как ограничить доступ к документам в журнале и запретить их открытие в 1С 8.2

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

В процессе настройки прав доступа в конфигурациях на базе 1С:Предприятие 8.2 (например, Управление торговлей 10.4) часто возникает задача: пользователь должен видеть список документов в журнале, но не должен иметь возможности открывать саму форму документа для просмотра деталей. Рассмотрим подробнее, как решить эту задачу несколькими способами — от простой настройки ролей до программных методов и использования механизмов RLS.

Способ 1. Разграничение прав «Чтение» и «Просмотр»

Это самый правильный и архитектурно верный метод решения задачи. В системе 1С права на объекты метаданных разделены на логические уровни. Проанализируем разницу между ними:

  1. Чтение (Read): Это право позволяет платформе получать данные из базы на уровне запросов. Если у пользователя есть право Чтение, он сможет видеть записи в журнале документов, документ будет участвовать в отчетах и движениях по регистрам.
  2. Просмотр (View): Это право отвечает за визуальное отображение. Именно оно дает возможность открыть форму объекта (документа или справочника).

Для реализации задачи «вижу в списке, но не могу войти» нам необходимо в роли пользователя (например, роль «Кладовщик») оставить флаг на праве Чтение, но снять флаг с права Просмотр. В этом случае при попытке двойного клика по строке в журнале система выдаст стандартное предупреждение: «Нарушение прав доступа». Форма документа даже не начнет инициализироваться.

Важный нюанс: Помните об аддитивности прав. Если у пользователя назначено несколько ролей (например, «Кладовщик» и «Пользователь»), и в роли «Пользователь» право Просмотр для этого документа включено, то ограничение в роли «Кладовщик» работать не будет. Проверьте все назначенные роли.

Способ 2. Программный запрет открытия через событие «ПередОткрытием»

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

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

Рассмотрим пример кода:


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

КонецПроцедуры

Используя параметр Отказ = Истина, мы сообщаем системе, что форму открывать не нужно. Это предотвращает «мигание» интерфейса, когда форма сначала появляется, а потом закрывается.

Способ 3. Ограничение доступа на уровне записей (RLS)

Иногда требуется не просто запретить открытие, а полностью скрыть определенные документы из журнала (например, документы по зарплате для всех, кроме бухгалтера). Для этого в 1С существует механизм RLS (Row Level Security).

Выясним причину, почему это эффективнее обычных фильтров: RLS работает на уровне SQL-запроса к базе данных. Система автоматически добавляет условие ГДЕ... ко всем запросам, которые выполняет пользователь.

Чтобы настроить ограничение по конкретному реквизиту (например, ВидОперации), выполните следующие действия в конфигураторе:

  1. Откройте нужную роль.
  2. Перейдите на вкладку «Шаблоны ограничений» и создайте шаблон или сразу перейдите к объекту «Документ».
  3. В колонке «Ограничение доступа» для права Чтение пропишите условие.

Пример условия на языке запросов 1С для ограничения доступа к оплате труда:

ГДЕ ВидОперации <> ЗНАЧЕНИЕ(Перечисление.ВидыОпераций.ОплатаТруда)

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

Способ 4. Установка неизменяемого отбора в форме журнала

Если жесткое ограничение прав через RLS кажется избыточным или создает нагрузку на производительность, можно воспользоваться «косметическим» методом — программной установкой отбора при открытии журнала документов.

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


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

КонецПроцедуры

Важно понимать: Данный метод не является полноценной защитой. Продвинутый пользователь или программист сможет обойти этот фильтр через внешние обработки или консоль запросов, так как само право Чтение у него остается. Используйте этот метод только для удобства интерфейса, а не для обеспечения безопасности.

Итоги и рекомендации

Для эффективного ограничения доступа в 1С 8.2 мы рекомендуем комбинированный подход:

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

← На главную