Почему не открывается форма списка номенклатуры при наличии прав на справочник и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

Часто в практике администраторов и программистов 1С встречается парадоксальная ситуация: пользователь имеет полные права на чтение и просмотр справочника Номенклатура, он может беспрепятственно открывать карточку товара из документов, выбирать позиции в табличную часть, но при попытке открыть форму списка напрямую из интерфейса система выдает ошибку «Недостаточно прав доступа». Проанализируем, почему это происходит в современных конфигурациях, таких как «Бухгалтерия предприятия 3.0», и как решить эту проблему по шагам.

Разберем архитектурные особенности форм списков

В управляемых формах 1С 8.3 форма списка — это не просто таблица с данными справочника. Это сложный объект, который в момент инициализации обращается к десяткам вспомогательных подсистем. Проанализируем основные причины, по которым доступ может быть заблокирован, даже если права на основной объект (справочник) выданы корректно:

  1. Служебные подсистемы БСП (Библиотеки стандартных подсистем). В типовые формы встроены блоки новостей, рекламные баннеры (так называемая «форма с котом»), подсказки и сервисы интернет-поддержки. Если у пользователя нет прав на чтение регистров, в которых хранятся настройки этих баннеров, форма «отвалится» с ошибкой прав доступа еще до того, как отобразит данные.
  2. Динамические списки с левыми соединениями. Основной реквизит формы списка — ДинамическийСписок — часто содержит сложный запрос. Если в этом запросе данные справочника соединяются с другой таблицей (например, цены, остатки или штрихкоды), на которую у пользователя нет прав Чтение, список не откроется.
  3. Функциональные опции и параметры. Форма может использовать реквизиты, связанные с функциональными опциями. Отсутствие прав на чтение констант или регистров, управляющих этими опциями, также приводит к отказу.

Шаг 1: Анализируем запрос Динамического списка

Первым делом рассмотрим структуру запроса, который питает форму списка. Для этого откроем форму в конфигураторе, выберем основной реквизит Список и перейдем в настройку запроса. Если мы видим там конструкцию типа ЛЕВОЕ СОЕДИНЕНИЕ, нужно убедиться, что у пользователя есть права на присоединенную таблицу.

Пример проблемного кода в запросе динамического списка:


ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Ссылка,
    СпрНоменклатура.Код КАК Код,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура

Важный момент: даже если используется ЛЕВОЕ СОЕДИНЕНИЕ, при котором данные основной таблицы должны выводиться в любом случае, платформа 1С требует наличия права Чтение на все таблицы, участвующие в запросе динамического списка. Если у роли пользователя нет права на РегистрСведений.ЦеныНоменклатуры, форма списка не откроется.

Шаг 2: Проверяем права на «баннеры» и рекламные блоки

Если с запросом списка всё в порядке, а ошибка сохраняется, значит, дело в «обвязке» формы. В современных версиях БП 3.0 и других конфигурациях реализована система динамического информирования. В народе она получила название «форма с котом» из-за характерных изображений на баннерах.

Выясним причину через проверку прав на следующие объекты. Убедитесь, что в роли пользователя установлена галочка Чтение и Просмотр для:

Посмотрим на пример кода, который часто выполняется в процедуре ПриСозданииНаСервере и вызывает ошибку при отсутствии прав:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Информационная панель (баннеры)
    ИнформационнаяПанельСервер.ПриСозданииНаСервере(ЭтаФорма, "ГруппаБаннеров");
    
    // Подсистема новостей
    ОбработкаНовостей.ПриСозданииНаСервере(ЭтаФорма);
    
КонецПроцедуры

Если внутри этих процедур происходит обращение к данным, на которые нет прав, система не просто скроет баннер, а прервет выполнение кода и выдаст ошибку доступа.

Шаг 3: Используем Журнал регистрации для точной диагностики

Чтобы не гадать, на какой именно объект не хватает прав, воспользуемся самым надежным инструментом — Журналом регистрации. Выполним следующие действия:

  1. Запустим сеанс под пользователем, у которого возникает проблема.
  2. Попробуем открыть форму списка номенклатуры и дождемся появления ошибки.
  3. Зайдем в базу под полными правами, откроем Журнал регистрации.
  4. Установим фильтр по колонке Событие, выбрав «Доступ.Отказ в доступе».
  5. Проанализируем записи. В колонке Данные будет четко указано имя метаданных (например, РегистрСведений.СведенияОНоменклатуре), на которые системе не хватило полномочий.

Шаг 4: Проверка прав на «Интерактивное открытие»

Иногда программисты забывают о разнице между правами Просмотр и Интерактивное открытие. Если форма открывается программно (через ОткрытьФорму), системе требуется право на чтение объекта. Но если пользователь нажимает кнопку в интерфейсе, ему необходимо право «Интерактивный просмотр» или право на конкретную Общую команду, которая вызывает это открытие.

Рассмотрим ситуацию из обсуждения: в подписке на событие или в общей команде используется код:


ОткрытьФорму("Справочник.Номенклатура.ФормаСписка", , ПараметрыВыполненияКоманды.Источник);

Если у пользователя есть права на справочник, но нет прав на саму ФормаСписка (она может быть ограничена отдельно в свойствах роли), либо нет прав на ОбщуюКоманду, через которую он заходит — результат будет отрицательным. Проанализируем права в конфигураторе на вкладке «Права» у конкретной роли, обращая внимание на ветку Общие -> Общие команды.

Итоги и рекомендации

Подведем итог нашего исследования. Если форма элемента открывается, а форма списка — нет, алгоритм решения следующий:

Использование этих шагов позволит вам быстро диагностировать и устранить проблемы с правами доступа, обеспечив комфортную работу пользователей без избыточного назначения прав «администратора».

← На главную