Почему в 1С не редактируются реквизиты нового справочника при наличии всех прав на сам объект?

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

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

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

Выясняем причину: Разделение прав на объект и его реквизиты

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

В окне редактирования роли в Конфигураторе за поведение по умолчанию отвечают два важных свойства:

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

Особое внимание стандартным реквизитам

Распространенная ошибка разработчиков — выдача прав только на добавленные вручную реквизиты при игнорировании стандартных. К стандартным реквизитам относятся поля, которые платформа создает автоматически для каждого справочника: Код, Наименование, Родитель, Владелец, ПометкаУдаления, Предопределенный. В редакторе роли они визуально выделяются зеленым цветом.

Если вы выдали права на справочник, но забыли дать право «Редактирование» на стандартные реквизиты Код и Наименование, пользователь столкнется со следующим поведением:

Приоритет платформенных прав над кодом формы

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

Попытки обойти это ограничение программно в модуле формы не принесут результата. Следующий код будет проигнорирован платформой:


// Этот код не сработает, если у пользователя нет прав на уровне метаданных роли!
Элементы.Наименование.ТолькоПросмотр = Ложь;
Элементы.Наименование.Доступность = Истина;

Платформа имеет абсолютный приоритет над кодом формы: если права на реквизит отсутствуют в метаданных роли, элемент управления гарантированно останется недоступным для редактирования.

Как проверить права программно

Для диагностики подобных проблем мы можем использовать встроенный язык 1С. Чтобы узнать, имеет ли пользователь доступ к конкретному реквизиту (в том числе стандартному), применим метод ПравоДоступа() с указанием четвертого параметра:


// Пример проверки права на стандартный реквизит "Наименование"
ЕстьДоступ = ПравоДоступа("Редактирование", Метаданные.Справочники.ИмяНовогоСправочника, , "Наименование");

Если Не ЕстьДоступ Тогда
    ЗаписьЖурналаРегистрации("Доступ.Ошибки", УровеньЖурналаРегистрации.Предупреждение, , , "У пользователя нет прав на редактирование наименования справочника!");
КонецЕсли;

Если этот метод возвращает Ложь, то проблема точно кроется в настройках роли в Конфигураторе, а не в коде БСП или подписках на события.

Разберем по шагам: Как исправить права в Конфигураторе

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

  1. Откройте информационную базу в режиме Конфигуратор.
  2. Найдите нужную роль в ветке Общие -> Роли и откройте окно ее редактирования.
  3. В дереве объектов метаданных найдите ваш новый справочник.
  4. Убедитесь, что для самого справочника установлены права Чтение, Просмотр, Ввод новых, Изменение и Редактирование.
  5. Разверните ветку вашего справочника в окне настройки роли. Вы увидите подчиненные папки «Реквизиты», «Табличные части» и список стандартных реквизитов (подсвеченных зеленым цветом).
  6. Перейдите к списку реквизитов и установите галочку в колонке Редактирование (или Просмотр) для каждого необходимого поля.
  7. Обязательно выделите стандартные реквизиты (Наименование, Код и др.) и также установите для них флаг Редактирование.
  8. Сохраните конфигурацию базы данных (клавиша F7).

Методология проектирования ролей

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

← На главную