Как запретить редактирование конкретного вида документов, оставив права на просмотр и печать в 1С?

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

При настройке прав доступа пользователей часто возникает задача: предоставить сотруднику возможность открывать документы определенного вида (например, счета-фактуры), просматривать реквизиты и выводить печатные формы, но полностью исключить возможность внесения любых изменений. Разберем, почему простой настройки прав Чтение и Просмотр в отдельной роли может быть недостаточно, как устроена система разграничения прав в платформе 1С и какими способами можно реализовать требуемое ограничение.

Анализ механизма объединения ролей в платформе 1С

Главный принцип работы системы прав доступа в 1С заключается в логическом сложении (операция ИЛИ):

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

Поиск пересечений прав с помощью типовых отчетов

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

  1. Сформируем специализированный отчет по правам доступа (например, Отчет по правам доступа или отчет в консоли администратора), выбрав конкретного пользователя и исследуемый объект метаданных (документ СчетФактураВыданный или аналогичный).
  2. Проанализируем результирующую матрицу прав: отчет наглядно покажет, какие именно роли дают право Изменение или Запись.
  3. В конфигурациях на базе БСП (Библиотеки стандартных подсистем) проверим соответствие назначенных профилей групп доступа. Если роли редактировались в конфигураторе, для корректной работы подсистемы прав запустим обработку обновления служебных данных.
  4. Исключим пользователя из групп доступа с избыточными правами либо скорректируем состав ролей в конфигураторе.

Программная установка режима «Только просмотр» на форме документа

В конфигурациях на обычных формах (например, в УТП или УПП) программный код типовой формы может при определенных условиях принудительно разблокировать элементы интерфейса, даже если у пользователя ограничены права. Чтобы гарантированно запретить интерактивное редактирование, применим установку свойства формы ТолькоПросмотр.

Разберем пример для обычного приложения в модуле формы документа:


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

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


&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    Если Не ПравоДоступа("Изменение", Метаданные.Документы.СчетФактураВыданный) Тогда
        ЭтаФорма.ТолькоПросмотр = Истина;
    КонецЕсли;
КонецПроцедуры

Защита от записи на уровне модуля объекта

Установка свойства формы ТолькоПросмотр блокирует только интерактивные действия пользователя через интерфейс. Чтобы исключить случайную запись или проведение документа через внешние обработки и групповые операции, настроим проверку в модуле объекта документа:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    Если Не ПравоДоступа("Изменение", Метаданные.Документы.СчетФактураВыданный) Тогда
        Отказ = Истина;
        ВызватьИсключение "Недостаточно прав для изменения документа ""Счет-фактура""!";
    КонецЕсли;
КонецПроцедуры

Использование дат запрета изменения данных

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

← На главную