Ограничение по автору: как скрыть от сотрудника чужие документы в 1С 8.3
Содержание
Чтобы пользователь в 1С видел только свои документы, нужно ограничение доступа на уровне записей (RLS) по реквизиту автора: в роли на право Чтение документа пишется условие Ответственный = &ТекущийПользователь. В типовых БП 3.0, УТ 11 и ЗУП 3.1 такого готового ограничения «по автору» нет, поэтому его добавляют в Конфигураторе или расширением, а затем выдают сотруднику профиль без типовых ролей на этот документ.
Типичная ситуация: в отделе продаж пять менеджеров, руководитель просит, чтобы каждый видел только свои заказы и реализации. Галочкой в карточке пользователя это не решается. Ниже — что сделать в конфигурации, как собрать профиль доступа и почему чаще всего «всё настроили, а чужие документы всё равно видны».
Как устроены права доступа в 1С:Предприятии
У платформы два уровня прав, и для задачи «только свои документы» нужны оба.
- 🧱 Роли — права на объект целиком: читать документ «Заказ клиента », добавлять, изменять, проводить. Роль либо даёт право на весь документ, либо нет.
- 🔍 Ограничение на уровне записей (RLS) — условие внутри права роли. Оно отсекает часть строк: например, только документы, где автор — текущий пользователь.
- 👥 Профили и группы доступа (в типовых на БСП) — надстройка над ролями. Профиль собирает набор ролей, группа доступа связывает профиль с пользователями.
Главное правило, на котором спотыкаются все: права из разных ролей складываются. Если у пользователя одна роль даёт чтение заказов с условием «только свои», а другая — чтение без условия, он увидит все заказы. Платформа не выбирает самое строгое ограничение, она объединяет разрешения.
Поэтому задача решается в два хода:
- Сделать роль, где чтение документа ограничено автором.
- Убрать у пользователя все остальные роли, которые дают чтение этого документа шире.
Отбор в списке («Менеджер = Иванов») или сохранённая настройка формы — не защита. Пользователь снимет отбор за секунду. Работает только RLS.
Подготовка: реквизит автора и текущий пользователь
Прежде чем писать ограничение, проверьте две вещи в Конфигураторе.
Есть ли в документе поле «кто автор»
Ограничивать можно только по реквизиту, который хранится в самом документе.
| Конфигурация | Реквизит, по которому обычно ограничивают |
|---|---|
| БП 3.0 | Ответственный — заполняется пользователем, создавшим документ |
| УТ 11, КА 2, ERP | Менеджер в заказах и реализациях, Ответственный в складских и прочих документах |
| Своя конфигурация | Добавьте реквизит типа СправочникСсылка.Пользователи и заполняйте его при создании |
Откройте документ в дереве конфигурации и посмотрите вкладку Данные. Если подходящего реквизита нет, его придётся добавить и заполнить у старых документов обработкой. Иначе старые документы без автора пропадут из списка у всех, кроме администратора.
Есть ли параметр сеанса с текущим пользователем
В конфигурациях на БСП (все типовые 8.3) в ветке Общие → Параметры сеанса уже есть ТекущийПользователь типа СправочникСсылка.Пользователи. Он заполняется при входе. В RLS к нему обращаются через амперсанд: &ТекущийПользователь.
В самописной базе такой параметр создают сами и заполняют в модуле сеанса в процедуре УстановкаПараметровСеанса.
Реквизит автора должен совпадать по типу с параметром сеанса. Если Ответственный ссылается на Справочник.Сотрудники, а параметр — на Справочник.Пользователи, условие никогда не выполнится и пользователь не увидит ни одного документа.
Создание роли с ограничением «только свои документы»
Роль можно сделать двумя путями. Выбор зависит от того, готовы ли вы снимать типовую конфигурацию с поддержки.
| Способ | Когда подходит | Риски |
|---|---|---|
| Новая роль в расширении | Типовая на поддержке, обновляется регулярно | Нужна проверка расширения после каждого обновления |
| Новая роль в основной конфигурации | Конфигурация уже доработана и снята с замков | Усложняется сравнение-объединение при обновлении |
| Правка типовой роли | Почти никогда | Изменения затрутся или вызовут конфликты при обновлении |
Порядок одинаков для обоих рабочих вариантов:
- Сделайте резервную копию:
Администрирование → Выгрузить информационную базув Конфигураторе. - В ветке Общие → Роли создайте роль, например
ЧтениеСвоихЗаказов. - Откройте роль, найдите в дереве нужный документ и отметьте права: Чтение, Добавление, Изменение, Удаление, Проведение, Просмотр, Интерактивное добавление — по тому, что сотрудник должен делать.
- Выделите право Чтение. В нижней части окна в колонке ограничения доступа к данным откройте редактор и впишите условие.
- Повторите то же условие для Изменения (а при необходимости — для Добавления и Удаления).
- Дайте роли права на справочники и регистры, без которых документ не откроется: номенклатура, контрагенты, склады.
- Сохраните и выполните
Конфигурация → Обновить конфигурацию базы данных(для расширения — обновление расширения).
Текст ограничения для права Чтение:
ТекущаяТаблица ГДЕ ТекущаяТаблица.Ответственный = &ТекущийПользователь
Для заказов УТ 11 вместо Ответственный подставьте Менеджер.
Почему ограничение ставят и на Изменение: без него сотрудник не прочитает чужой документ, но сможет записать свой с другим автором и «передать» его коллеге. Условие на изменении проверяется по записываемым данным, поэтому сменить автора на чужого не получится.
Руководитель видит документы своего отдела
Частый следующий шаг — начальник отдела должен видеть свои документы и документы подчинённых. RLS допускает вложенные запросы, поэтому условие расширяют обращением к справочнику или регистру, где хранится связь «руководитель — подчинённый». Для руководителя делают отдельную роль с таким условием, а рядовым менеджерам оставляют простую.
Профиль и группа доступа: выдаём роль пользователю
В типовых конфигурациях роли пользователю напрямую не назначают — только через профиль. Путь в БП 3.0, УТ 11 и ЗУП 3.1 одинаковый: Администрирование → Настройки пользователей и прав.
- Включите флаг Ограничивать доступ на уровне записей в том же разделе. Без него типовые ограничения по организациям не работают; ваше собственное условие в роли платформа применяет в любом случае, но для единой картины флаг лучше держать включённым.
- Откройте Профили групп доступа. Поставляемые профили («Менеджер по продажам», «Бухгалтер») редактировать нельзя — скопируйте подходящий командой копирования.
- В копии на вкладке ролей снимите все типовые роли, которые дают чтение вашего документа. Например, для заказов в УТ 11 это роли со словами «Заказы клиентов» в названии.
- Отметьте свою роль
ЧтениеСвоихЗаказов. Если она в расширении, она появится в списке после установки расширения. - Перейдите в Группы доступа, создайте группу с новым профилем и добавьте в неё сотрудников.
- Проверьте, что эти сотрудники не состоят в других группах, где документ доступен без ограничения.
Если убрать типовую роль, вместе с чтением документа пропадут и другие права, которые она давала: печать, связанные отчёты, команды заполнения. Проверьте каждую операцию, которой пользуется сотрудник, и докиньте недостающие права в свою роль.
Проверка доступа под пользователем
Проверять настройку под своей учётной записью бессмысленно: у администратора полные права, ограничения на него не действуют.
- Заведите тестового пользователя или попросите сотрудника зайти при вас.
- Создайте под ним документ — он должен появиться в списке.
- Откройте тот же список под другим менеджером — документа там быть не должно.
- Проверьте поиск по номеру и ввод на основании: найти чужой документ через строку поиска пользователь тоже не должен.
- Откройте отчёты, которыми он пользуется, и сравните суммы с отчётом администратора.
В типовых на БСП в карточке пользователя есть отчёт о его правах доступа. Он показывает, через какие группы и профили сотрудник получил право на объект. Если документ виден, хотя не должен, отчёт сразу покажет «лишнюю» группу.
Журналы документов и общие списки
Общий журнал собирает документы разных видов в одну таблицу. Для прав это отдельный объект: у журнала документов свои права в роли и своё ограничение доступа.
- 📒 Право на журнал не заменяет права на документы. Чтобы строка была видна и открывалась, нужны права и на журнал, и на сам документ.
- 🧩 Ограничение в журнале пишется по его графам. Если в журнале нет графы с автором, ограничить его по пользователю нельзя: сначала добавьте графу и сопоставьте её с реквизитом автора в каждом документе.
- 🧾 В формах «Такси» многие типовые списки вроде «Документы продажи» построены на динамическом списке с запросом к нескольким документам. Платформа применяет RLS к такому запросу автоматически, отдельной настройки не нужно.
Для собственного журнала текст ограничения выглядит так же, только вместо реквизита документа — графа журнала:
ТекущаяТаблица ГДЕ ТекущаяТаблица.Автор = &ТекущийПользователь
Почему чужие документы видны и что делать
Большинство проблем после настройки — одного из пяти видов.
Ограничение на документе не скрывает движения по регистрам. Если у сотрудника есть доступ к отчёту по регистру продаж или взаиморасчётов, он увидит итоги по чужим документам. Регистры, которые должны быть закрыты, ограничивайте отдельно — по измерению или реквизиту с автором — либо уберите отчёт из профиля.
Скорость работы при большом объёме данных
RLS — это дополнительное условие в каждом запросе к таблице. На базе с сотнями тысяч документов неудачное условие заметно тормозит открытие списков и отчётов.
Что помогает:
- ⚡ Индекс по реквизиту автора. В свойствах реквизита
ОтветственныйпоставьтеИндексировать. Условие по полю с индексом выполняется быстро. - 🚫 Без разыменования. Условие
Ответственный.Подразделение = ...заставляет платформу соединять таблицы. Лучше хранить подразделение прямо в документе или использовать вложенный запрос к компактному регистру. - 🧮 Одно простое условие вместо цепочки ИЛИ. Несколько ролей с разными условиями на один документ дают объединение условий в каждом запросе. Чем их меньше, тем быстрее.
- 🖥️ Клиент-серверный вариант. На файловой базе запросы с RLS при большом объёме идут заметно медленнее. Для отдела из десятка пользователей с ограничениями стоит переходить на сервер 1С и СУБД.
В новых версиях БСП типовые конфигурации используют «универсальное ограничение доступа»: права рассчитываются заранее и хранятся в служебных регистрах, поэтому запросы пользователей не проверяют сложные условия на лету. Цена — фоновое обновление доступа после изменения групп и массовой загрузки документов. Если после смены прав сотрудник какое-то время видит старую картину, дождитесь завершения этого обновления, а не меняйте настройки повторно.
Массовое заполнение реквизита автора в старых документах запускайте вне рабочего времени. Обработка перезаписывает документы и может блокировать данные, с которыми работают пользователи.