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