Каждый разработчик 1С рано или поздно сталкивается с ситуацией: на управляемой форме одно или несколько полей ввода отображаются серым цветом и полностью недоступны для изменения пользователем. Вы открываете конфигуратор, запускаете глобальный поиск по имени реквизита, ищете свойства Доступность и ТолькоПросмотр, проверяете настройки условного оформления формы — но поисковая выдача пуста. В коде нет ни одной строчки, которая бы явно блокировала элемент, а на форме нет правил оформления, накладывающих ограничение.
В чем же подвох? Главная зацепка в решении этой загадки кроется в поведении платформы на этапе разработки. Давайте внимательно проанализируем ситуацию: доступен ли элемент управления визуально в самом конфигураторе? Если поле выглядит заблокированным (отображается серым цветом) уже на этапе проектирования формы в конфигураторе, круг возможных причин сужается до нескольких ключевых настроек метаданных или структуры расширения. Если же в конфигураторе поле выглядит доступным, но блокируется только в режиме «1С:Предприятие», дело в системных механизмах платформы или логике конфигурации.
В этой статье мы подробно разберем все возможные причины блокировки элементов формы, разделив их на две категории: ограничения уровня конфигуратора и динамические ограничения пользовательского режима.
Если визуально поле недоступно для редактирования в самом редакторе управляемой формы, программный код здесь ни при чем. Давайте разберем по шагам свойства и параметры, которые приводят к такому поведению платформы.
Если вы ведете разработку или доработку типового решения с использованием механизма расширений, платформа накладывает жесткие правила на работу с заимствованными формами. Когда вы добавляете форму в расширение, на ней отображаются все элементы исходной формы. Однако те элементы и реквизиты, которые еще не были заимствованы в расширение, отображаются серым цветом и заблокированы для любых изменений.
Платформа делает это умышленно, чтобы защитить структуру формы от случайных изменений, которые могут конфликтовать с основной конфигурацией при обновлении. Чтобы исправить это, проанализируем дерево элементов формы в расширении, найдем нужный реквизит, нажмем по нему правой кнопкой мыши и выберем команду «Добавить в расширение». После этого поле станет доступным для настройки. Для стабильного сопровождения таких систем и предотвращения ошибок при изменениях выполняется автоматическое архивирование, обновление и тестирование 1С по расписанию.
Рассмотрим ситуацию, когда в качестве источника данных для элемента формы выбран реквизит связанного объекта. Например, в свойстве ПутьКДанным вашего поля ввода указано выражение вида Объект.Контрагент.ОсновнойДоговор или Объект.Номенклатура.ЕдиницаИзмерения.
Платформа 1С:Предприятие работает по строгим объектным правилам. Из формы текущего объекта (например, документа «Реализация товаров и услуг») вы не можете напрямую редактировать реквизиты других связанных справочников. Поле, связанное с данными «через точку», автоматически переводится платформой в режим «только просмотр». Изменить значение этого реквизита на форме текущего объекта невозможно — для этого нужно открыть форму самого связанного объекта.
Существует ряд системных полей, которые платформа по умолчанию запрещает редактировать вручную на уровне интерфейса. К таким реквизитам относятся, например, Ссылка, ВерсияДанных, ИндексКартинки или автоматически рассчитываемые поля. Вы можете разместить их на форме для визуального контроля, но они всегда будут отображаться серыми и недоступными для изменения.
Если вы проектируете форму для иерархического справочника, обратите внимание на настройки самого реквизита в дереве метаданных. У каждого реквизита справочника есть свойство Использование, которое может принимать значения:
Для элемента;Для группы;Для группы и элемента.Если форма создана для редактирования Группы справочника, а у используемого реквизита свойство установлено в значение «Для элемента», то на форме группы это поле автоматически заблокируется в конфигураторе и будет недоступно пользователю.
Иногда разработчики ищут проблему в свойствах интерфейсного элемента (поля ввода), забывая проверить свойства самого реквизита формы, к которому этот элемент привязан (вкладка «Реквизиты» в правом верхнем углу редактора формы).
Проанализируем свойства реквизита формы. Если у него снят флаг Сохраняемые данные или на уровне прав роли пользователя отключен доступ к изменению этого реквизита, связанный с ним элемент формы унаследует это ограничение и станет недоступным для интерактивного ввода.
Теперь рассмотрим более сложную ситуацию. В конфигураторе элемент управления выглядит стандартно, галочка ТолькоПросмотр на форме и у группы снята, глобальный поиск по свойствам .Доступность и .ТолькоПросмотр в модулях не дает результатов, но при запуске программы поле все равно остается серым и закрытым для ввода. Выясним, какие неявные механизмы платформы и конфигурации могут приводить к такому результату.
Это первая системная причина, которую необходимо проверить. Если у пользователя, под учетной записью которого запущена сессия, в его ролях отсутствует право на Редактирование или Изменение конкретного реквизита данного объекта метаданных, платформа автоматически заблокирует элемент на форме.
При этом в коде конфигурации не будет ни одной строчки, отвечающей за это поведение. Платформа отрабатывает ограничения прав доступа на самом глубоком уровне. Для проверки запустите сеанс под пользователем с полными правами (Администратор) и посмотрите, станет ли поле доступным.
Функциональные опции в 1С позволяют динамически управлять интерфейсом в зависимости от настроек параметров учета. Если реквизит объекта или элемент формы привязан к функциональной опции (это настраивается в свойствах самого реквизита в дереве метаданных или в свойствах элемента формы), и эта опция в данный момент выключена в пользовательских настройках программы, элемент управления может вести себя двояко:
Проверьте, не связана ли доступность поля с какой-либо константой или регистром сведений, управляющим функциональными опциями системы.
В современных типовых конфигурациях (таких как ERP, КА, УТ, БП, ЗУП), построенных на базе Библиотеки Стандартных Подсистем (БСП), встроен очень мощный механизм защиты данных. Он автоматически блокирует ключевые реквизиты документов или справочников после того, как объект был записан в базу данных или проведен. Чтобы быстро выявить ошибки в данных после подобных блокировок или доработок учета, используется автоматическая сверка бухгалтерских и налоговых проводок между информационными базами.
На форме такого объекта обычно присутствует кнопка «Разрешить редактирование реквизитов» (или аналогичная команда в меню «Еще»). Этот механизм работает динамически: при создании формы программный код БСП анализирует состояние объекта и программно блокирует элементы. Прямой поиск по имени вашего реквизита в модуле формы ничего не даст, так как блокировка происходит через универсальные общие модули БСП, оперирующие коллекциями элементов.
Давайте проанализируем структуру элементов на вашей форме. Управляемая форма имеет древовидную структуру элементов. Если у самой Формы в целом или у любой родительской Группы (в которую вложен ваш реквизит) установлено свойство ТолькоПросмотр = Истина, то абсолютно все дочерние элементы управления унаследуют это свойство.
Даже если у самого поля ввода свойство Доступность установлено в значение Истина, а флаг ТолькоПросмотр снят, оно все равно останется недоступным, пока заблокирован его «родитель» (группа или форма).
Если вы пытаетесь отредактировать документ, дата которого попадает в закрытый период (период, ограниченный датой запрета редактирования для пользователей), подсистемы безопасности автоматически переведут всю форму в режим чтения. Все поля станут серыми и недоступными для изменения. В ситуациях, когда необходимо автоматизировать действия в подобных закрытых интерфейсах, применяется платформа One RPA для роботизации пользовательских сценариев.
Если визуальный осмотр в конфигураторе и проверка прав не принесли результатов, перейдем к профессиональным методам диагностики. Лучшим инструментом в данном случае является отладчик 1С. Для интерактивной проверки и изменения свойств элементов прямо в пользовательском сеансе можно использовать обработку для редактирования свойств открытых управляемых форм.
Для того чтобы выяснить, в какой именно момент и по какой причине элемент формы теряет свою доступность, выполним следующие шаги:
Шаг 1. Откроем модуль формы и найдем стандартную процедуру ПриСозданииНаСервере. Поставим точку останова на самую первую строчку кода этой процедуры.
Шаг 2. Запустим сеанс отладки и откроем форму нужного объекта. Программа приостановит работу на нашей точке останова.
Шаг 3. Откроем окно вычисления выражений (сочетание клавиш Ctrl + Alt + W или Shift + F9) и проверим текущее состояние доступности элемента формы, введя выражение:
Элементы.ИмяВашегоЭлемента.Доступность
// Также проверим свойство ТолькоПросмотр
Элементы.ИмяВашегоЭлемента.ТолькоПросмотр
Шаг 4. Если уже в самом начале процедуры ПриСозданииНаСервере элемент имеет значение Доступность = Ложь или ТолькоПросмотр = Истина, значит, ограничение наложено платформой на уровне метаданных, прав доступа или функциональных опций. Код формы тут непричастен.
Шаг 5. Если в начале процедуры элемент доступен, перенесем точку останова на самую последнюю строчку процедуры ПриСозданииНаСервере (или на оператор КонецПроцедуры) и нажмем продолжить (F5). Вновь проверим свойства элемента в окне вычисления выражений. Если доступность пропала именно здесь, значит, в процессе инициализации формы отработал какой-то программный алгоритм (например, общие модули БСП).
В типовых конфигурациях для детального анализа изменения свойств элементов формы можно использовать замер производительности или пошаговую отладку (клавиша F11) внутри процедур заполнения и настройки формы, чтобы поймать конкретную строку кода в общих модулях, изменяющую свойство элемента:
// Пример того, как сторонний код БСП может изменять свойства
ЭлементФормы = Форма.Элементы.Найти(ИмяРеквизита);
Если ЭлементФормы <> Неопределено Тогда
ЭлементФормы.ТолькоПросмотр = Истина;
КонецЕсли;
Для быстрого решения проблемы недоступности реквизита всегда придерживайтесь следующего алгоритма проверки:
ПриСозданииНаСервере, чтобы зафиксировать точный момент изменения доступности элемента и определить, какой механизм (платформенный или программный) накладывает ограничение.Используя этот системный подход, вы сможете быстро локализовать и устранить причину блокировки любого элемента управляемой формы в 1С.