Как настроить доступ к конкретным видам документов и справочников в 1С:Бухгалтерия 3.0?

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

В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем), к которым относится и 1С:Бухгалтерия предприятия 3.0, задача разграничения прав доступа часто выходит за рамки простого деления «по организациям». Нередко возникает необходимость скрыть от определенных пользователей конкретные типы объектов — например, запретить видеть «Ведомости на выплату зарплаты», при этом оставив доступ к «Авансовым отчетам». Рассмотрим подробнее, какими методами это можно реализовать, проанализируем разницу между профилями и группами доступа, а также изучим программные способы решения задачи.

Метод 1. Использование «атомарных» ролей и профилей групп доступа

Самый правильный с точки зрения архитектуры системы способ — это использование штатного механизма ролей. В современных версиях БП 3.0 большинство документов уже имеют отдельные роли на чтение и изменение. Разберем по шагам, как настроить доступ через профили:

  1. Перейдем в раздел Администрирование — Настройки прав доступа — Профили групп доступа.
  2. Создадим новый профиль (например, «Бухгалтер по первичке (ограниченный)»).
  3. На закладке Роли проанализируем доступные варианты. Нам нужно найти роли вида ЧтениеАвансовыхОтчетов или ДобавлениеИзменениеАвансовыхОтчетов.
  4. Важный нюанс: Если для конкретного документа в системе нет отдельной роли (он входит в общую крупную роль, например, ПолныеПрава или ДобавлениеИзменениеДокументовПокупателей), нам придется создать свою роль в расширении.

Такой подход является наиболее производительным, так как проверка прав происходит на уровне ядра платформы 1С при выполнении запросов к базе данных. Это исключает лишнюю нагрузку на сервер, в отличие от механизмов RLS (Record Level Security).

Метод 2. Разграничение через интерфейс и отключение технических функций

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

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

  1. В Профиле групп доступа найдем и отключим роль Режим "Все функции" (или Стандартные подсистемы — Доступ к функциям для технического специалиста).
  2. После этого пользователь сможет открывать только те документы, ссылки на которые выведены в его интерфейсе.
  3. Настроим видимость подсистем и команд через механизм Функциональных опций или просто настроив состав команд в интерфейсе конкретного пользователя.

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

Метод 3. Программное ограничение через расширение конфигурации

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

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


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

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

Этот метод хорош тем, что он работает точечно. Однако стоит учитывать, что он блокирует только интерактивное открытие формы. Если данные документа выводятся в отчете, пользователь их увидит. Поэтому данный метод часто комбинируют с ограничением прав на чтение в ролях.

Разница между Профилем и Группой доступа

Для правильной настройки прав важно четко понимать разницу между этими объектами в системе 1С. Разберем их назначение:

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

Сложные случаи: доступ по «Ответственному» или «Менеджеру»

Рассмотрим ситуацию, когда нужно разрешить доступ к документам только тем пользователям, которые указаны в документе (или в связанном контрагенте) как ответственные. В БП 3.0 это реализуется через механизм RLS (Ограничение доступа на уровне записей).

Посмотрим на алгоритм настройки:

  1. Включаем ограничение доступа на уровне записей в настройках программы.
  2. В профиле групп доступа выбираем вид доступа (например, «Контрагенты» или «Подразделения»).
  3. Если типовых видов доступа недостаточно, используем расширение для модификации шаблона RLS. В современных версиях платформы (начиная с 8.3.12) рекомендуется использовать Производительный режим RLS. Он работает быстрее за счет предварительного расчета прав в специальных таблицах, что минимизирует «тормоза», о которых часто беспокоятся разработчики.

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

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

← На главную