Почему элемент управляемой формы 1С недоступен для редактирования, если его свойство Доступность в отладчике равно Истина?

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

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

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

Главная причина: Различие между «Доступность» и «ТолькоПросмотр»

Для начала проанализируем базовую концепцию платформы 1С. Визуальная блокировка элемента формы складывается из двух совершенно разных и независимых свойств: Доступность (Availability) и ТолькоПросмотр (ReadOnly). Начинающие разработчики часто путают их, так как внешне результат работы этих свойств для обычного пользователя выглядит одинаково — поле нельзя отредактировать. Однако логика работы платформы кардинально отличается:

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

В чем же кроется ловушка отладчика? Если для элемента формы или его родительских групп установлено свойство ТолькоПросмотр = Истина, то редактировать его нельзя. При этом свойство Доступность этого элемента на программном уровне остается равным Истина! Проверяя в отладчике исключительно Доступность, вы упускаете из виду состояние флага ТолькоПросмотр.

Влияние подсистемы БСП «Запрет редактирования реквизитов объектов»

В современных типовых конфигурациях (таких как «Управление торговлей 11», «ERP Управление предприятием», «Комплексная автоматизация» и др.) заблокированные поля чаще всего являются результатом работы стандартной подсистемы БСП (Библиотека Стандартных Подсистем) «Запрет редактирования реквизитов объектов».

Этот механизм предназначен для того, чтобы защитить ключевые реквизиты объектов (например, параметры учета на складе, ставки НДС, уникальные идентификаторы документов), которые уже были записаны и задействованы в учете, от случайного или некорректного изменения пользователем.

Выясним, как этот механизм работает изнутри:

  1. При открытии формы срабатывает обработчик, который обращается к модулю менеджера объекта и получает список блокируемых реквизитов через экспортную функцию ПолучитьБлокируемыеРеквизитыОбъекта().
  2. Далее вызывается специализированная процедура БСП: ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтаФорма);
  3. Эта процедура обходит элементы формы, связанные с ключевыми реквизитами, и принудительно устанавливает для них свойство ТолькоПросмотр = Истина.

Именно поэтому, как в обсуждаемом случае со справочником «Склады» и реквизитом ИспользоватьОрдернуюСхемуПриПоступлении, локальная доступность элемента остается равной Истина, но редактирование заблокировано на уровне свойства ТолькоПросмотр.

Для разблокировки таких реквизитов в интерфейсе формы обычно предусмотрена стандартная кнопка «Еще» — «Разрешить редактирование реквизитов». Только после ее нажатия подсистема БСП снимает флаг ТолькоПросмотр с защищаемых полей. Для быстрого снятия ограничений «ТолькоПросмотр» и восстановления доступности элементов формы можно использовать расширение для разблокировки доступности элементов формы.

Иерархическое наследование свойств (Группы и Страницы)

Еще один важный аспект управляемых форм 1С — это дерево элементов. Элементы формы редко располагаются на ней хаотично, обычно они вложены в группы, панели, страницы (вкладки) или группы страниц.

Если у любой из родительских групп (на любом уровне вложенности вплоть до самой формы) установлено свойство Доступность = Ложь или ТолькоПросмотр = Истина, то все дочерние элементы автоматически унаследуют это поведение.

Проанализируем пример: у нас есть иерархия элементов:

В данном случае, если вы посмотрите в отладчике свойства непосредственно поля ИспользоватьОрдернуюСхему, система вернет вам Доступность = Истина и ТолькоПросмотр = Ложь. Однако на экране поле будет заблокировано, потому что его дедушка — Группа «Основное» — имеет свойство ТолькоПросмотр = Истина. Платформа каскадно блокирует весь ввод внутри этой группы.

Программное условное оформление

Условное оформление формы — мощный механизм платформы 1С. Оформление может накладываться не только интерактивно в конфигураторе, но и программно динамически в процессе работы формы (например, в общих модулях при создании формы на сервере).

Если в правилах условного оформления прописано отключение доступности или установка режима «Только просмотр» для определенных полей при выполнении условий, платформа применит эти правила непосредственно на клиенте при отрисовке интерфейса.

При этом в серверных процедурах (например, ПриСозданииНаСервере или в конце ПриОткрытии) значения свойств элементов формы в отладчике все еще могут отображаться как доступные, так как движок условного оформления отрабатывает позже, перед выводом элементов на экран.

Ограничение прав доступа (Роли и RLS)

Если у текущего пользователя в его ролях отсутствует право «Редактирование» для конкретного реквизита объекта метаданных, платформа 1С автоматически переведет соответствующее поле ввода на форме в режим «Только просмотр». Это происходит на уровне ядра платформы.

В этом случае любые программные попытки прописать в коде формы:


Элементы.ИспользоватьОрдернуюСхему.ТолькоПросмотр = Ложь;
Элементы.ИспользоватьОрдернуюСхему.Доступность = Истина;

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

Пошаговая инструкция по диагностике проблемы

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

Шаг 1. Проверка свойства ТолькоПросмотр у самого элемента

В табло отладчика вычислите выражение для вашего элемента, проверив оба ключевых свойства одновременно:


Элементы.ИмяВашегоЭлемента.Доступность
Элементы.ИмяВашегоЭлемента.ТолькоПросмотр

Если ТолькоПросмотр возвращает Истина, значит, причина найдена. Ищите в коде конфигурации (глобальным поиском), где именно этому элементу устанавливается данное свойство.

Шаг 2. Проверка иерархии родительских элементов

Если у самого элемента Доступность = Истина и ТолькоПросмотр = Ложь, но он заблокирован, необходимо проверить всю цепочку его родителей. Для этого выполните в табло отладчика следующий код или напишите временную диагностическую процедуру:


Родитель = Элементы.ИмяВашегоЭлемента.Родитель;
Пока Родитель <> Неопределено Цикл
    ЗаписьЖурналаРегистрации("Диагностика", УровеньЖурналаРегистрации.Информация, , , 
        "Элемент: " + Родитель.Имя + 
        " | Доступность: " + Родитель.Доступность + 
        " | ТолькоПросмотр: " + Родитель.ТолькоПросмотр);
    Родитель = Родитель.Родитель;
КонецЦикла;

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

Шаг 3. Анализ подсистемы БСП

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

Шаг 4. Анализ условного оформления формы

Проверьте коллекцию условного оформления формы. Это можно сделать прямо в отладчике, посмотрев свойство ЭтаФорма.УсловноеОформление. Проверьте элементы коллекции (правила оформления), обращая внимание на те, у которых в оформлении устанавливаются свойства Доступность или ТолькоПросмотр.

Шаг 5. Проверка прав доступа

Запустите сеанс под пользователем с ограниченными правами (или проверьте текущего администратора) и посмотрите в конфигураторе права роли на данный реквизит. Убедитесь, что у роли установлены флаги «Редактирование» и «Просмотр» для исследуемого реквизита.

Применяя эти комплексные методы анализа, вы сможете быстро и профессионально разбираться с любыми сложными ситуациями блокировки элементов на управляемых формах 1С.

← На главную