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