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