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