При тонкой настройке прав в конфигурации 1С:Бухгалтерия предприятия 3.0 специалисты часто сталкиваются со списком доступных видов доступа в группах и профилях пользователей. Одним из таких элементов является вид доступа Пользователи. Нередко возникает предположение, что этот вид доступа позволяет разграничить видимость документов по авторам (ответственным лицам). Разберем детально, для чего на самом деле предназначен данный механизм, можно ли штатными средствами ограничить доступ к документам по подразделениям или складам, и почему попытки внедрения RLS по счетам бухгалтерского учета могут нарушить работу всей системы.
Для понимания логики работы этого элемента проанализируем архитектуру конфигурации. Типовая бухгалтерия построена на базе Библиотеки стандартных подсистем (БСП). Подсистема УправлениеДоступом поставляется со стандартным набором предопределенных видов доступа, одним из которых и являются Пользователи.
Выясним причину его наличия в интерфейсе: данный вид доступа ограничивает видимость записей непосредственно в справочниках Справочник.Пользователи и Справочник.ВнешниеПользователи, а также связанных с ними контактных данных. Он не накладывает ограничений на документы хозяйственной деятельности. Штатные сценарии его использования включают следующие задачи:
Ответственный, в списках задач и адресных книгах.Таким образом, вид доступа Пользователи в БСП управляет правами на сам справочник пользователей, а не фильтрует документы по автору, создавшему проводку или операцию.
Рассмотрим популярный прикладной вопрос: возможно ли встроенными средствами конфигурации без доработок и расширений ограничить доступ пользователей к документам по конкретным складам или подразделениям? Ответ однозначный — нет.
В типовой поставке 1С:Бухгалтерии 3.0 механизм ограничения прав на уровне записей (RLS) реализован исключительно в разрезе организаций. Это осознанное архитектурное решение разработчиков конфигурации. Бухгалтерский учет представляет собой непрерывный и взаимосвязанный процесс формирования баланса юридического лица. Введение ограничений по складам или подразделениям в типовой функционал БП порождает непреодолимые технические и методологические конфликты:
Посмотрим, что происходит, когда разработчики пытаются обойти стандартные ограничения и наложить шаблоны RLS на план счетов или на движения регистра бухгалтерии (например, чтобы скрыть счет 70 «Расчеты с персоналом по оплате труда» или счета расчетов с контрагентами). Здесь вступает в силу фундаментальное платформенное ограничение механизма регистров бухгалтерии в платформе 1С:Предприятие 8.3.
Проанализируем физическую структуру данных. В платформе 1С для регистров бухгалтерии предусмотрены таблицы итогов (агрегаты остатков и оборотов), которые обеспечивают мгновенное получение сальдо в отчетах и при контроле остатков. Таблицы итогов регистров бухгалтерии не поддерживают ограничения на уровне записей (RLS).
Как только в роли на регистр бухгалтерии включается условие ограничения чтения, СУБД полностью перестает использовать предварительно рассчитанные таблицы итогов. Платформа переходит в режим динамического расчета: каждый запрос к остаткам, формирование Оборотно-сальдовой ведомости или контроль проведения документа начинают сканировать всю таблицу проводок и субконто с начала ведения учета. Это влечет за собой критические проблемы:
Часто для скрытия конфиденциальных данных (зарплаты, дивидендов) пытаются просто скрыть отчеты из командного интерфейса. Однако пользователи могут скопировать навигационную ссылку отчета в другой базе (например, Ctrl+F11 в демонстрационной базе) и открыть его в рабочей базе через комбинацию клавиш Shift+F11.
Разберем, как правильно перекрыть доступ к просмотру данных через стандартные отчеты, не нарушив проведение документов:
Чтение с регистра бухгалтерии: модули проведения документов обращаются к регистру для проверки остатков и формирования взаимосвязанных проводок. Если у пользователя отнять базовое право Чтение на регистр, он получит системную ошибку нарушения прав при проведении хозяйственных операций.Просмотр: для специализированных ролей необходимо снять права Просмотр и Интерактивное открытие непосредственно у объектов отчетов (Отчет.ОборотноСальдоваяВедомость, Отчет.ОборотноСальдоваяВедомостьПоСчету, Отчет.КарточкаСчета и др.). При отсутствии права Просмотр на сам отчет платформа заблокирует попытку перехода по прямой навигационной ссылке (Shift+F11) с сообщением о нарушении прав доступа.Если бизнес-требования категорически обязывают ограничить видимость первичных документов по подразделениям внутри единой базы, эту задачу решают доработкой в расширении. Рассмотрим основные шаги этой доработки:
ОбщийМодуль.УправлениеДоступомПереопределяемый переопределяются процедуры заполнения видов доступа, куда регистрируется новый вид доступа, привязанный к справочнику ПодразделенияОрганизаций.ПриЗаполненииОграниченияДоступа, где описывается состав полей для производительного режима RLS:
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.ДляОбъекта.Вставить("Подразделение", "ПодразделениеОрганизации");
КонецПроцедуры
Если заказчик ставит жесткое условие работать строго на типовой конфигурации без расширений и вмешательства в код, решить задачу ограничения по складам и подразделениям можно организационно-архитектурными методами: