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