Почему не отображается справочник в подсистеме при настройке роли через расширение в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке и доработке крупных конфигураций, таких как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, программисты часто сталкиваются со специфическим поведением платформы при работе с расширениями. Типичный сценарий: в расширение добавляется новый реквизит справочника (например, ДоговорыКонтрагентов), создается новая роль для ограничения прав только этим объектом, настраиваются права, но у конечного пользователя ссылка на справочник в интерфейсе подсистемы (например, Продажи) упорно не появляется. При этом под пользователем с Полными правами всё отображается корректно.

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

1. Проверка иерархии подсистем и прав доступа роли

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

В 1С:ERP справочник ДоговорыКонтрагентов в разделе продаж находится в подчиненной подсистеме. Полный путь выглядит следующим образом: Продажи -> НастройкиИСправочникиПродажи. Разберем, как правильно заимствовать и настроить эту структуру в расширении:

  1. Перенесите в расширение конфигурации родительскую подсистему Продажи.
  2. Перенесите в расширение подчиненную подсистему НастройкиИСправочникиПродажи.
  3. Откройте редактор вашей роли в расширении.
  4. Перейдите на вкладку «Права» и найдите ветку подсистем. Убедитесь, что флаг Просмотр установлен как для подчиненной подсистемы НастройкиИСправочникиПродажи, так и для корневой подсистемы Продажи. Если у роли не будет права просмотра родительской подсистемы, платформа полностью скроет весь раздел интерфейса для этого пользователя.

2. Настройка видимости команд в расширении

Многие разработчики замечают, что при заимствовании типовой подсистемы в расширение свойство Включать в командный интерфейс становится недоступным (отображается серым цветом). Это стандартное поведение: расширение не может изменять глобальную структуру командного интерфейса, определенную в основной конфигурации, но оно позволяет переопределять видимость для конкретных ролей.

Выполним по шагам настройку видимости через командный интерфейс подсистемы в расширении:

  1. В дереве объектов расширения нажмите правой кнопкой мыши на заимствованную подсистему НастройкиИСправочникиПродажи.
  2. В контекстном меню выберите пункт Открыть командный интерфейс.
  3. В открывшемся окне найдите команду открытия списка справочника ДоговорыКонтрагентов (обычно это Договоры контрагентов - Открыть список).
  4. В колонке видимости для вашей новой роли установите флаг принудительного отображения (сняв признак видимости «по умолчанию», если он мешает). Если колонка роли отсутствует, убедитесь, что роль добавлена в расширение и активна.

3. Особенности работы подсистемы безопасности БСП и обновление метаданных

Поскольку 1С:ERP построена на базе БСП, простого добавления роли в конфигураторе часто недостаточно. Механизм управления доступом БСП использует кэширование метаданных в справочнике Идентификаторы объектов метаданных и регистре сведений Права ролей шаблонов доступа. Если система безопасности БСП не знает о существовании вашей роли в расширении или не сопоставила ее с объектами, права пользователя работать не будут.

Выясним, как правильно зарегистрировать новые права в режиме Предприятия:

  1. Запустите информационную базу под учетной записью Администратора в режиме «1С:Предприятие».
  2. Для принудительного обновления справочников БСП рекомендуется запустить базу с параметром командной строки /C ЗапуститьОбновлениеИнформационнойБазы. Это заставит систему пересчитать все идентификаторы метаданных, включая добавленные через расширения.
  3. Перейдите в раздел НСИ и администрирование -> Настройки пользователей и прав -> Профили групп доступа.
  4. Не пытайтесь назначать роль напрямую пользователю в конфигураторе. В ERP роли должны управляться через профили. Создайте новый профиль групп доступа (например, «Только чтение договоров (расширение)»).
  5. В списке разрешенных ролей найдите вашу роль из расширения и отметьте её флагом.
  6. Создайте Группу доступа, выберите созданный профиль и добавьте в состав участников нужного пользователя. БСП автоматически добавит роль в учетную запись пользователя на уровне платформы и обновит кэш прав.

4. Влияние функциональных опций на видимость справочника

В ERP видимость многих справочников регулируется функциональными опциями. Справочник ДоговорыКонтрагентов жестко связан с константой ИспользоватьДоговорыСКонтрагентами. Если у пользователя в его наборе ролей (включая новую роль) нет прав на чтение этой функциональной опции или параметров ее работы, платформа автоматически исключит справочник из интерфейса.

Проанализируем этот момент:

5. Эффект первой роли в расширении

Рассмотрим важную особенность поведения платформы при работе с ролями в расширениях. Если в вашем расширении вообще нет собственных ролей, то на все заимствованные и новые объекты расширения распространяются права основных ролей конфигурации. Но как только вы создаете в расширении хотя бы одну роль, поведение платформы меняется:

С этого момента права на все новые объекты, созданные в расширении (или заимствованные и измененные), должны быть явно прописаны для всех ролей, включая административные. Если вы добавили роль для чтения договоров, но забыли дать права на новые реквизиты администратору (роль ПолныеПрава), то администратор также может столкнуться с проблемами доступности элементов.

Рекомендуется всегда заимствовать роль ПолныеПрава в ваше расширение и предоставлять ей максимальные права на все создаваемые в расширении объекты.

Альтернативное решение: Создание собственной команды для открытия списка

Если стандартный командный интерфейс заимствованной подсистемы не поддается настройке из-за ограничений платформы или особенностей версии ERP, мы можем применить обходной путь — создать собственную команду в расширении.

Разберем этот метод по шагам:

  1. В расширении создайте новый объект типа Общая команда с именем ОткрытьСписокДоговоровРасширение.
  2. В свойствах команды в поле Группа выберите подсистему Продажи - Настройки и справочники (заимствованную в расширение).
  3. В модуле команды напишите следующий код для открытия формы списка справочника:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    // Открываем стандартную форму списка справочника договоров
    ОткрытьФорму(
        "Справочник.ДоговорыКонтрагентов.ФормаСписка", 
        Новый Структура, 
        ПараметрыВыполненияКоманды.Источник, 
        ПараметрыВыполненияКоманды.Уникальность, 
        ПараметрыВыполненияКоманды.Окно, 
        ПараметрыВыполненияКоманды.НавигационнаяСсылка
    );
    
КонецПроцедуры
  1. В вашей роли в расширении предоставьте право Просмотр на созданную общую команду ОткрытьСписокДоговоровРасширение.

Этот способ гарантирует появление ссылки в интерфейсе пользователя, так как команда создана непосредственно в расширении, и права на ее просмотр регулируются вашей новой ролью без конфликтов со сложными механизмами позиционирования стандартных команд ERP.

← На главную