Довольно часто разработчики и администраторы систем на базе 1С:Предприятие 8.1 (например, в типовой конфигурации Зарплата и Управление Персоналом 2.5) сталкиваются с парадоксальной ситуацией. Пользователь имеет права на чтение и просмотр справочника, он прекрасно видит список элементов, но при попытке открыть конкретную карточку система выдает жесткий отказ: «Не хватает прав для открытия формы элемента». При этом попытки отловить ошибку с помощью отладчика ни к чему не приводят — выполнение кода даже не доходит до процедур ПередОткрытием или ПриОткрытии.
В этой статье мы подробно разберем внутренние механизмы платформы, которые приводят к такому поведению, и выясним, как правильно диагностировать и устранять подобные проблемы.
Проанализируем работу «обычного приложения». Главная особенность платформы 8.1 заключается в том, что перед тем как отрисовать форму и начать исполнение программного кода в модуле, система выполняет автоматическую валидацию контекста. Платформа обращается к закладке «Реквизиты» в конфигураторе для данной формы и проверяет права пользователя на каждый объект метаданных, который там указан.
Если в списке реквизитов формы присутствует, например, РегистрСведенийНаборЗаписей.ФИОФизЛиц, а у текущего пользователя в его ролях отсутствует право «Чтение» на этот регистр, платформа немедленно блокирует инициализацию формы. Это критически важный момент: проверка происходит на этапе сборки контекста формы сервером (или локальным клиентом в файловом варианте), поэтому программные точки останова в модуле формы просто не срабатывают.
Рассмотрим ситуацию на примере ЗУП 2.5. Справочник ФизическиеЛица является одним из самых «тяжелых» с точки зрения связанных данных. Разберем, какие объекты часто выносятся в реквизиты его основной формы элемента:
Если вы создали новую роль и дали в ней права только на сам справочник ФизическиеЛица, форма элемента не откроется, если в ее реквизитах жестко прописаны ссылки на вышеуказанные регистры. Система считает, что раз объект объявлен как реквизит формы, доступ к нему должен быть гарантирован на уровне метаданных.
Когда отладчик бессилен, на помощь приходит Журнал регистрации. Это самый быстрый способ понять, какой именно объект блокирует доступ. Разберем последовательность действий:
InformationRegister.PassportData (РегистрСведений.ПаспортныеДанные).Выяснив «виновника», мы можем либо расширить права пользователя в его роли, либо изменить логику работы самой формы.
Иногда права на уровне метаданных (галочки в конфигураторе) расставлены верно, но форма все равно не открывается. Проанализируем влияние RLS (Row Level Security). В 1С 8.1 механизмы RLS могут работать достаточно жестко:
1. Если для права «Чтение» на объект (например, на тот же регистр сведений) установлено условие, которое запрещает доступ к записям именно этого физического лица, платформа может выдать ошибку доступа при попытке инициализировать набор записей в реквизите формы.
2. В ЗУП 2.5 часто используется механизм Групп доступа к физлицам. Если пользователь видит ссылку на человека в списке (так как права на чтение ссылки есть), но не имеет прав на чтение детальной информации по его группе доступа, открытие формы завершится ошибкой.
Если бизнес-задача требует, чтобы пользователь мог открывать форму справочника, но при этом не видел определенных данных (например, паспортных данных), использование стандартных реквизитов формы становится невозможным. Рассмотрим, как это реализовать правильно:
ПриОткрытии.Посмотрим на пример кода, который позволяет безопасно получить данные, даже если у пользователя нет прямых прав на регистр:
// В модуле формы
Процедура ПриОткрытии()
// Вместо прямого обращения к реквизиту формы, вызываем функцию сервера
ДанныеПаспорта = ОбщийМодульСервер.ПолучитьДанныеПаспорта(Ссылка);
ЭлементыФормы.ПолеПаспортныеДанные.Значение = ДанныеПаспорта;
КонецПроцедуры
Такой подход позволяет избежать автоматической проверки прав платформой при старте формы, так как объект РегистрСведенийНаборЗаписей больше не является частью контекста формы.
Важно помнить о свойстве «Способ редактирования». В версии 8.1 у справочников есть три варианта: В списке, В диалоге и Обоими способами. Если установлено В списке, двойной клик по элементу вообще не будет открывать форму, а предложит редактировать строку прямо в таблице. Однако это не вызывает ошибку прав, а просто блокирует само открытие окна. Если же вы видите именно надпись «Не хватает прав», значит проблема локализована именно в составе метаданных формы.
В более поздних версиях (8.2 и 8.3) в режиме управляемого приложения свойство «Способ редактирования» игнорируется, и данные всегда редактируются в форме. Поэтому понимание механизмов 8.1 критически важно для поддержки старых систем.
Подведем итог нашим действиям. Если форма не открывается из-за прав доступа в 8.1, мы должны:
Соблюдение этих шагов позволит вам быстро восстановить работоспособность системы и обеспечить корректную настройку прав доступа для пользователей.