Как настроить в 1С 8.3 видимость только своих документов для пользователя?

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

В процессе эксплуатации систем на базе 1С:Предприятие 8.3 часто возникает задача разграничения прав доступа. Одной из наиболее востребованных функций является ограничение видимости документов: пользователь должен видеть только те записи, которые он создал сам или за которые он назначен ответственным. Рассмотрим подробно, как реализовать это требование, используя стандартные механизмы платформы и программные методы.

Метод 1. Использование механизма RLS (Record Level Security)

Ограничение доступа на уровне записей (RLS) — это наиболее правильный и надежный способ решения задачи. Этот механизм позволяет фильтровать данные непосредственно на уровне SQL-запроса к базе данных, что исключает возможность обхода фильтров через отчеты или консоль запросов. Проанализируем, как настроить RLS в современных конфигурациях. Для упрощения этого процесса можно использовать инструмент для анализа и настройки прав доступа.

Шаг 1. Включение ограничений в базе

Прежде всего, убедимся, что в программе включена сама возможность использования RLS. Перейдем в раздел Администрирование — Настройки пользователей и прав. Нам необходимо установить флаг Ограничивать доступ на уровне записей. После этого программа подготовит служебные таблицы прав доступа.

Шаг 2. Настройка профиля групп доступа

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

  1. Откроем нужный профиль (например, «Менеджер по продажам»).
  2. Перейдем на вкладку Ограничения доступа.
  3. Добавим вид доступа Пользователи (или Ответственные, в зависимости от конфигурации).
  4. Установим значение Разрешены только значения, выбранные в группе доступа.

Шаг 3. Настройка группы доступа

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

Важные нюансы использования RLS

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

Различие между автором и ответственным. В типовых решениях 1С (ERP, УТ 11, БП 3.0) есть реквизиты Автор (кто создал документ) и Ответственный (кто за него отвечает). Как правило, RLS настраивается именно по реквизиту Ответственный. Важно убедиться, что при создании нового документа этот реквизит заполняется автоматически текущим пользователем.

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

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

Метод 2. Программная установка фильтра в Динамическом списке

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

Рассмотрим пример кода в модуле формы списка документов. Мы будем использовать событие ПриСозданииНаСервере для установки фиксированного отбора:


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

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

В данном примере мы используем объект ПолеКомпоновкиДанных, чтобы указать системе, по какому реквизиту нужно фильтровать запрос. Установка свойства РежимОтображения в значение Недоступный гарантирует, что пользователь не увидит этот отбор в окне настроек списка и не сможет его удалить.

Сравнение подходов: RLS или программный фильтр?

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

  1. Безопасность: RLS защищает данные на уровне всей системы. Программный фильтр работает только в конкретной форме. Если пользователь создаст отчет или обработку, он увидит все данные.
  2. Производительность: Программный фильтр работает быстрее, так как не требует сложных проверок прав платформой. RLS может замедлить работу базы при большом количестве данных и слабом оборудовании.
  3. Сложность настройки: Программный фильтр требует написания кода. RLS в типовых конфигурациях настраивается мышкой в режиме «1С:Предприятие», но требует глубокого понимания модели прав доступа.

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

Таким образом, мы рассмотрели два основных способа ограничения видимости документов в 1С 8.3. Для надежной защиты данных используйте RLS, а для удобства работы в интерфейсе и сохранения высокой производительности — фиксированные отборы в динамических списках.

← На главную