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