Перейти к основному содержанию
`Ctrl`+`K`

# ForDisableControls

Метод `forDisableControls` обеспечивает надёжное временное отключение событий данных при выполнении группы операций над выборкой, предотвращая побочные эффекты от повторных или вложенных вызовов `disableControls` и `enableControls`.

Смотрите также: Описание методов enableControls, disableControls.

## Ключевые возможности

- Обеспечивает корректную работу с отключёнными элементами управления, исключая двойные вызовы `enableControls` и `disableControls`.

- Сохраняет фокус в карточке объектных характеристик после установки ссылочного атрибута, предотвращая его сброс на первую строку.

## Работа метода

Метод `forDisabledControls` работает следующим образом:

1. Вызывается `disableControls`.

2. Флаг `allowChangeControls` устанавливается в значение `false`, и все последующие вызовы `disableControls`/`enableControls` игнорируются.

3. Выполняется переданный блок кода внутри блока `try`.

4. В блоке `finally` флаг `allowChangeControls` возвращается в значение `true`, и вызывается `enableControls`.

    def forDisabledControls(f: => Unit): Unit = {
      if (allowChangeControls) {
        disableControls()
        allowChangeControls = false
        try {
          f
        } finally {
          allowChangeControls = true
          enableControls()
        }
      } else {
        f
      }
    }

Флаг `allowChangeControls` по умолчанию равен `true`. Если его значение — `false`, то вызовы `disableControls` и `enableControls` не выполняются.

## Примеры использования

Здесь выполняется изменение видимости атрибутов с отключенными контролами:

    selection.forDisabledControls {
        attrs().foreach(attr => {
          val settingOpt = savAttrs.get(attr.name.toUpperCase)
          if (settingOpt.nonEmpty) {
            val setting = settingOpt.get
            attr.isVisible = true
            attr.caption = buildAttrCaption(setting).get
            if (setting.nOrder.isNotNull) {
              attr.order = setting.nOrder.get.doubleValue()
            }
          }
        })
    }