Как сделать поле доступным при нажатии на переключатель в 1С?

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

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

Подготовка элемента управления

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

Реализация логики в событии ПриИзменении

Для того чтобы интерфейс реагировал на действия пользователя, нам необходимо использовать обработчик события ПриИзменении для нашего переключателя. Разберем по шагам, как это реализовать:

  1. Откройте форму документа в конфигураторе.
  2. В дереве элементов формы найдите элемент, соответствующий реквизиту НаправлениеОтВрача.
  3. В палитре свойств перейдите в раздел «События» и нажмите на кнопку открытия напротив события ПриИзменении.
  4. В открывшемся модуле формы пропишите следующий код:

&НаКлиенте
Процедура НаправлениеОтВрачаПриИзменении(Элемент)
    Если Объект.НаправлениеОтВрача Тогда
        Элементы.Врач.Доступность = Истина;
    Иначе
        Элементы.Врач.Доступность = Ложь;
    КонецЕсли;
КонецПроцедуры

Разбор нюансов реализации

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

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


&НаКлиенте
Процедура НаправлениеОтВрачаПриИзменении(Элемент)
    Элементы.Врач.Доступность = Объект.НаправлениеОтВрача;
КонецПроцедуры

Этот вариант является более лаконичным и соответствует стандартам разработки в 1С. Мы напрямую присваиваем свойству Доступность значение нашего реквизита Объект.НаправлениеОтВрача.

Важные советы по доработке функционала

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


&НаКлиенте
Процедура УстановитьДоступностьПолей()
    Элементы.Врач.Доступность = Объект.НаправлениеОтВрача;
КонецПроцедуры

&НаКлиенте
Процедура НаправлениеОтВрачаПриИзменении(Элемент)
    УстановитьДоступностьПолей();
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Вызываем логику при открытии формы
    УстановитьДоступностьПолей();
КонецПроцедуры

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

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

← На главную