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