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

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

В процессе разработки и сопровождения баз данных 1С часто возникает задача разграничения прав доступа. Типичный пример: необходимо разрешить редактирование документов (например, «Реализация товаров») только определенному кругу лиц (Мише и Маше), в то время как остальные (Аня, Саня, Маня) должны иметь возможность только просматривать данные. Разберем, как реализовать такую логику в конфигурации «Альфа-Авто: Автосалон+Автосервис+Автозапчасти» на платформе 1С:Предприятие 8.3.

Вариант 1. Программное ограничение доступа через модуль формы

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

Для реализации этого метода откроем конфигуратор, найдем нужный документ и перейдем в его Модуль формы. В процедуре ПриОткрытии (или ПриСозданииНаСервере для управляемых форм) добавим следующий код:


ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ИмяПользователя = ТекущийПользователь.Имя;

Если НЕ (ИмяПользователя = "Миша" ИЛИ ИмяПользователя = "Маша") Тогда
    ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;

Разберем по шагам, что происходит в этом фрагменте:

  1. Мы получаем объект текущего пользователя через встроенный менеджер ПользователиИнформационнойБазы.
  2. Извлекаем строковое свойство Имя. Важно помнить, что сравнение идет по точному совпадению строки, поэтому регистр символов имеет значение.
  3. Используем условие НЕ. Если имя пользователя не совпадает ни с одним из разрешенных, мы устанавливаем свойство формы ТолькоПросмотр в значение Истина. Это блокирует все элементы управления на форме для изменения.

Вариант 2. Использование ролей — профессиональный подход

Проанализируем недостатки первого метода: если завтра появится новый пользователь «Коля», которому тоже нужно разрешить редактирование, программисту придется снова заходить в конфигуратор и менять код. Чтобы избежать этого, в 1С принято использовать Роли. Выясним, как это сделать правильно.

В дереве конфигурации перейдем в раздел «Общие» — «Роли». Создадим новую роль, назовем ее, например, РедактированиеРеализаций. Настроим права для этой роли только на нужные объекты. После этого программный код в форме станет гораздо лаконичнее и надежнее:


Если НЕ РольДоступна("РедактированиеРеализаций") Тогда
    ЭтаФорма.ТолькоПросмотр = Истина;
КонецЕсли;

Преимущества этого метода очевидны:

Вариант 3. Специфика конфигурации Альфа-Авто (Рарус)

Поскольку рассматриваемая проблема возникла в конфигурации «Альфа-Авто» редакции 5.1, важно упомянуть о встроенных механизмах этой системы. Разберем подробнее, как работает подсистема «Права и настройки» от компании «Рарус».

В данной конфигурации реализован механизм, позволяющий управлять доступом без программирования. Посмотрим, как это настроить в пользовательском режиме:

  1. Перейдем в раздел Администрирование или Права и настройки.
  2. Найдем справочник «Права и настройки».
  3. В дереве настроек выберем объект «Документы» — «Реализация товаров».
  4. Проверим наличие права на редактирование или изменение конкретных реквизитов. В Альфа-Авто можно гибко настроить доступ для конкретного пользователя или целого подразделения.

Использование штатного функционала является наиболее правильным путем, так как он учитывает все взаимосвязи в системе и не требует внесения изменений в типовую конфигурацию, что облегчает последующие обновления.

Типичные ошибки начинающих разработчиков

Проанализируем ситуацию, с которой столкнулся автор темы. Ошибка в коде ТекущийПользователь.Имя.(Миша,Маша) возникла из-за попытки использовать несуществующий синтаксис. Запомним важные правила:

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

← На главную