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