Почему горячие клавиши в 1С на обычных формах могут работать медленнее, чем клик мышью?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В практике разработки на платформе 1С:Предприятие 8.2 и 8.3 (Обычные формы) программисты иногда сталкиваются с парадоксальной ситуацией: одна и та же процедура выполняется значительно быстрее при клике мышью по кнопке, чем при использовании назначенной этой кнопке "горячей клавиши" (например, F12 или Alt+S). Особенно часто это проявляется в старых, многократно переписанных конфигурациях, таких как Управление торговлей 10.3 или УПП.

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

1. Механика передачи фокуса и валидация данных

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

  1. ПриИзменении
  2. ОкончаниеРедактирования
  3. Валидация типа данных и проверка незаполненных значений.

Проанализируем ситуацию с горячими клавишами. При нажатии сочетания клавиш (например, F1...F12) фокус часто остается в активном поле ввода. Платформа пытается одновременно запустить выполнение кода кнопки и продолжать поддерживать состояние редактирования в поле. Если на форме много элементов или включено автоматическое ОбновлениеОтображения, это создает микрозадержки в очереди сообщений операционной системы. Система вынуждена обрабатывать события клавиатуры KeyDown, KeyUp и одновременно инициировать серверный вызов команды.

2. Влияние торгового оборудования и клавиатурных перехватов

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

Разберем, как это влияет на скорость:

3. Анализ пустых обработчиков событий

Проанализируем ситуацию, когда в форме присутствует множество пустых процедур-обработчиков. Часто при разработке программисты создают события для элементов формы (например, ПриИзменении), а затем просто удаляют код внутри, оставляя саму оболочку процедуры в модуле.

Посмотрим на пример такого кода:


Процедура ПолеВвода21ПриИзменении(Элемент)
    // Код был удален, но обработчик остался привязан к элементу
КонецПроцедуры

Кажется, что пустая процедура не должна влиять на скорость. Однако это не так. При активации команды через горячую клавишу платформа может выполнять "обход" элементов формы для проверки их состояния. Каждый вызов даже пустой процедуры в 1С — это полноценная операция, требующая:

  1. Передачи управления из ядра платформы в виртуальную машину встроенного языка.
  2. Инициализации контекста процедуры.
  3. Выполнения (пустого).
  4. Возврата управления.

Если таких "пустышек" на форме десятки, суммарная задержка становится ощутимой для пользователя.

4. Пересчет доступности элементов командной панели

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

Мышь вызывает действие более адресно: клик по конкретному объекту имеет приоритет в очереди сообщений Windows и часто игнорирует некоторые этапы предварительного обновления интерфейса, которые обязательны для событий клавиатуры.

5. Особенности работы через терминальный сервер (RDP)

Если ваша база 1С развернута на терминальном сервере, работа с клавиатурой может замедляться из-за протокола передачи данных. Нажатия функциональных клавиш (особенно с Alt или Ctrl) упаковываются в отдельные пакеты TCP. Клик мышью передается как координата, что в ряде случаев обрабатывается графическим подсистемами быстрее, чем последовательность нажатия и отпускания управляющей клавиши, требующая подтверждения от сервера.

Рекомендации по оптимизации производительности

Чтобы устранить "тормоза" при использовании горячих клавиш, выполним следующие шаги:

  1. Проверка внешних компонент: Временно отключите все драйверы торгового оборудования (сканеры, фискальные регистраторы) и проверьте, исчезла ли задержка. Если да — настройте префиксы в драйвере так, чтобы они не пересекались с функциональными клавишами.
  2. Очистка модуля формы: Удалите все пустые процедуры обработчиков. Не забудьте также очистить пути к ним в свойствах элементов формы (в палитре свойств).
  3. Оптимизация процедуры ОбновлениеОтображения: Если на форме используется этот обработчик, убедитесь, что в нем нет тяжелых запросов или обращений к серверу. Помните, что нажатие любой горячей клавиши провоцирует вызов ОбновлениеОтображения.
  4. Использование явного управления фокусом: В начале кода процедуры, привязанной к кнопке, попробуйте принудительно установить фокус на саму кнопку или нейтральный элемент через ЭтаФорма.ТекущийЭлемент = ....
  5. Информативные имена: Избегайте имен команд типа Действие50. Это затрудняет отладку и анализ замера производительности. Используйте осмысленные названия, чтобы при замере сразу видеть, какая процедура "отъедает" время.

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

← На главную