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