При настройке прав доступа в современных конфигурациях 1С (таких как «1С:Комплексная автоматизация 2», «1С:ERP Управление предприятием» или «1С:Бухгалтерия предприятия 3.0») администраторы и разработчики часто сталкиваются с задачей жесткого ограничения прав. Типичный пример: необходимо предоставить подотчетному лицу или профильному менеджеру доступ исключительно к авансовым отчетам и связанным справочникам, полностью скрыв остальной функционал программы.
Если просто назначить пользователю стандартную роль по работе с авансовыми отчетами, мы неизбежно столкнемся с одной из двух проблем: либо программа откажется запускаться из-за нехватки системных прав, либо интерфейс окажется пустым, а при попытке открыть список документов система выдаст ошибку нарушения прав доступа. Выясним причину такого поведения платформы и разберем по шагам, как правильно решить эту задачу с помощью механизмов БСП (Библиотеки стандартных подсистем) и расширения конфигурации.
В современных конфигурациях 1С права доступа строятся по модульному принципу. Документ Документ.АвансовыйОтчет не существует изолированно. Он тесно связан со справочниками физических лиц, контрагентов, валют, статей расходов, а также с регистрами накопления, в которых хранится информация о взаиморасчетах с подотчетными лицами. Кроме того, динамический список формы документа делает запросы к смежным таблицам для вывода аналитики.
Поэтому для решения задачи нам потребуется настроить три ключевые составляющие:
---
Рассмотрим ситуацию: мы создали новый профиль групп доступа и добавили туда только роль на чтение и запись авансового отчета. При попытке входа пользователь получит ошибку авторизации. Для того чтобы сеанс успешно инициализировался, пользователю жизненно необходимы общие системные права.
Создадим специальный «технический» профиль (или добавим роли в наш разрабатываемый профиль), который позволит запустить систему и не перегрузит интерфейс лишними деталями. Включим в него следующие стандартные роли:
ЗапускВебКлиента, в зависимости от того, как работают пользователи).БазовыеПрава или БазовыеПраваИнтеграцииБСП) — отвечает за инициализацию параметров сеанса, работу со служебными справочниками и константами при старте программы.---
Проанализируем проблему видимости: даже если у пользователя есть права на документ, соответствующий раздел (например, «Казначейство» в КА/ERP) может не отображаться, если у него нет прав на саму подсистему или на другие документы этого раздела. И наоборот, если дать доступ к разделу «Казначейство», пользователь увидит огромное количество пустых или недоступных для него журналов.
Наиболее красивым и безопасным решением является создание собственной подсистемы в расширении конфигурации. Разберем этот процесс по шагам:
АвансовыйОтчет, нажмем по нему правой кнопкой мыши и выберем пункт Добавить в расширение.РМ_ПодотчетноеЛицо (Рабочее место подотчетника). В свойствах подсистемы обязательно установим флаг Включать в командный интерфейс.АвансовыйОтчет (конкретно его команду открытия списка).РМ_ОсновнаяРольПодотчетника). В этой роли установим право Просмотр для нашей созданной подсистемы РМ_ПодотчетноеЛицо. Также дадим этой роли права на запуск тонкого клиента.Благодаря этому приеме у пользователя на панели разделов отобразится только одна наша подсистема с единственным пунктом меню — «Авансовые отчеты». Все остальные разделы типовой конфигурации будут автоматически скрыты, так как у пользователя нет прав на просмотр их родительских подсистем.
---
Теперь разберем технические зависимости. Динамический список авансовых отчетов в КА 2.4 / ERP активно использует левые соединения. Если у пользователя не будет прав на чтение связанных таблиц, список либо откроется пустым, либо система выдаст ошибку нарушения прав доступа при чтении данных. Для автоматического анализа зависимостей и подбора метаданных подойдёт конструктор прав доступа с автоподбором ролей БСП.
Чтобы этого избежать, добавим в наш профиль доступа роли на чтение следующих объектов метаданных:
ФизическиеЛица — так как подотчетное лицо всегда выбирается из списка физических лиц компании.Организации и Подразделения — для идентификации принадлежности документа к структуре предприятия.Валюты — необходим для работы с мультивалютными отчетами и пересчета курсов.СтатьиДвиженияДенежныхСредств (Статьи ДДС) и СтатьиРасходов — требуются для корректного заполнения аналитики расходов на соответствующих вкладках документа.Контрагенты и ДоговорыКонтрагентов — обязательны для заполнения вкладки оплаты поставщикам.Номенклатура — требуется, если подотчетное лицо самостоятельно закупает товары, материалы или услуги.ДенежныеСредстваУПодотчетныхЛиц — ключевой регистр, из которого система считывает остатки задолженности сотрудника и выводит их в форму списка авансовых отчетов.ПриобретениеТоваровУслуг, если сотрудники отчитываются по заранее оформленным накладным.---
Если в ERP и Комплексной автоматизации разработчики предусмотрели готовые раздельные роли вроде ЧтениеАвансовыхОтчетов и ДобавлениеИзменениеАвансовыхОтчетов, то в «1С:Бухгалтерии 3.0» из коробки подобные права жестко привязаны к профилю бухгалтера. Для БП 3.0 придется создавать роли вручную в расширении. При необходимости можно использовать готовое расширение для настройки прав к авансовым отчетам в Бухгалтерии 3.0.
Помимо вышеперечисленных базовых справочников, в БП 3.0 крайне важно предоставить права чтения на специфические объекты:
РасходныйКассовыйОрдер и СписаниеСРасчетногоСчета (для корректной работы автозаполнения выданных авансов).СчетФактураПолученный (для регистрации входящего НДС по чекам).РегистрСведений.МобильноеПриложениеСканированиеЧековРегистрСведений.ДокументыПоКассовымЧекамПодотчетныхЛицДля наглядности приведем пример кода, который можно использовать в модуле сеанса или при инициализации параметров работы нашего интерфейса в расширении, если требуется программно проверить доступность роли:
Если РольДоступна("РМ_ОсновнаяРольПодотчетника") Тогда
// Выполняем специфическую настройку интерфейса для подотчетного лица
// Например, скрываем ненужные элементы навигации или устанавливаем параметры по умолчанию
АвтоустановкаПараметровИнтерфейсаПодотчетника();
КонецЕсли;
Ограничение доступа пользователя до одного единственного документа — задача кропотливая, требующая понимания взаимосвязей метаданных в конфигурации. Использование расширений конфигурации для создания изолированной подсистемы в сочетании с аккуратным подбором базовых ролей БСП позволяет решить эту задачу без изменения типовой конфигурации, сохранив базу на полной поддержке и обеспечив пользователю максимально простой и понятный интерфейс для работы.