К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как активировать элемент формы в 1С

Как активировать элемент формы в 1С: свойство Доступность, метод Активизировать, управление видимостью кнопок и полей. Примеры кода и типичные ошибки.

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

Под «активацией элемента» обычно понимают две разные задачи. Первая — сделать элемент доступным для редактирования, то есть снять блокировку. Вторая — программно активизировать элемент, то есть передать ему фокус через метод Активизировать(), чтобы курсор сразу встал в нужное поле. Обе задачи решаются штатными средствами платформы.

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

Что значит «активировать элемент формы» в 1С

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

Отдельное понятие — активизация элемента, то есть установка на него фокуса ввода. Метод формы Активизировать() делает элемент текущим: пользователь сразу может вводить данные без клика мышью. Это полезно при открытии формы, после добавления строки в таблицу или при возврате из диалога.

Активация через свойство «Доступность» в конфигураторе

Самый простой случай — элемент заблокирован на уровне настроек формы. Откройте форму в конфигураторе, выделите нужный элемент и в палитре свойств найдите Доступность. Значение Истина делает элемент активным, Ложь — блокирует. Рядом проверьте свойство Только просмотр: даже доступное поле с этим флагом не даст редактировать данные.

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

Порядок включения доступности
  1. 1
    Откройте форму объекта в конфигураторе
  2. 2
    Выделите элемент и проверьте свойство Доступность
  3. 3
    Проверьте свойство Только просмотр элемента
  4. 4
    Проверьте Доступность родительских групп и самой формы
  5. 5
    Сохраните конфигурацию и обновите базу
  6. 6
    Откройте форму в режиме предприятия и убедитесь, что элемент активен

Программное управление доступностью

В типовых и доработанных конфигурациях доступность чаще всего управляется кодом — например, поле активируется только при определённом значении другого реквизита. Управление выполняется через коллекцию Элементы формы:

// Активировать поле ввода

Элементы.Комментарий.Доступность = Истина;

// Включить доступность по условию

Процедура ПриИзмененииСпособаДоставки(Элемент)

Элементы.АдресДоставки.Доступность =

(Объект.СпособДоставки = Перечисления.СпособыДоставки.Курьером);

КонецПроцедуры

Если элемент должен быть виден, но не редактироваться, вместо доступности используйте ТолькоПросмотр — так пользователь понимает, что данные есть, но менять их нельзя. Для кнопок командной панели управляйте свойством Доступность соответствующей кнопки формы.

bsl
Элементы.КнопкаПровести.Доступность = Не Объект.Проведен;

Метод Активизировать: передача фокуса элементу

Метод Активизировать() вызывается у формы и принимает элемент, который должен получить фокус. Типовой сценарий — после открытия формы сразу поставить курсор в поле поиска или в новую строку таблицы:

&НаКлиенте

Процедура ПриОткрытии(Отказ)

ЭтаФорма.Активизировать(Элементы.Наименование);

КонецПроцедуры

Для таблиц метод позволяет активизировать конкретную строку. Сначала установите текущую строку через Элементы.Список.ТекущаяСтрока, затем при необходимости активизируйте саму таблицу. Учтите ограничение: активизировать можно только видимый и доступный элемент — скрытый или заблокированный фокус не получит.

В обычных формах (толстый клиент) используется аналогичный метод Активизировать() у формы или свойство ТекущийЭлемент. В управляемых формах приоритетный способ — именно ЭтаФорма.Активизировать(Элемент), так как ТекущийЭлемент работает с ограничениями и в ряде случаев только в клиентских процедурах.

Почему элемент остаётся недоступным: права, опции, оформление

Если свойства в порядке, а элемент всё равно серый, причина обычно в одном из трёх механизмов платформы. Проверяйте их последовательно.

Права доступа (роли). Если у пользователя нет права на редактирование реквизита или объекта, платформа блокирует связанные элементы автоматически. Проверяется через роль пользователя в конфигураторе (права на объект) либо временным запуском под полными правами — если элемент активировался, причина в ролях.

Функциональные опции. Реквизит может быть связан с функциональной опцией (например, «Вести учёт по складам»). Пока опция отключена в настройках программы, элемент недоступен или скрыт. Проверьте свойство элемента «Функциональные опции» и значение опции в базе.

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

Маршрут решения

Как найти причину блокировки

Элемент серый у всех пользователейПроверяйте свойство Доступность и код формы
Элемент серый только у части пользователейПроверяйте роли и права на редактирование
Элемент появляется после изменения настроек программыПроверяйте функциональные опции
Доступность меняется при изменении реквизитаИщите обработчик ПриИзменении и условное оформление

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Меняют Доступность элемента, но забывают про недоступную родительскую группу — элемент остаётся серым
02
Вызывают Активизировать в серверной процедуре — фокус не устанавливается
03
Пытаются активизировать невидимый элемент — метод не срабатывает
04
Включают Доступность, но оставляют ТолькоПросмотр = Истина — ввод по-прежнему невозможен
05
Дорабатывают типовую форму напрямую вместо расширения — изменения теряются при обновлении

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

Итог

Что важно запомнить

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

Частые вопросы

Элемент доступен, но не получает фокус через Активизировать. Почему?

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

Как активировать кнопку командной панели?

Через свойство Доступность кнопки: Элементы.ИмяКнопки.Доступность = Истина. Если кнопка связана с командой объекта (например, «Провести»), её состояние может переопределяться платформой — тогда проверяйте состояние самого объекта.

Под полными правами элемент активен, а под пользователем — нет. Что делать?

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

Можно ли активировать элемент без изменения конфигурации?

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

Чем ТолькоПросмотр отличается от Доступности?

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