Почему в 1С 8.3.27 перестает работать клавиатура и пропадает фокус ввода?

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

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

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

Разберем причины возникновения ошибки

Проанализируем ситуацию: платформа 8.3.27 привнесла значительные изменения в ядро отрисовки интерфейса и механизмы взаимодействия с оконным менеджером Windows. Это было необходимо для унификации работы тонкого и веб-клиента. Однако эти изменения привели к конфликтам при обработке модальных окон, выпадающих списков и форм подбора. Выясним причину, почему это чаще заметно в базовых версиях: такие конфигурации часто работают в однопользовательском режиме с жесткой привязкой к лицензии, и дополнительные фоновые проверки (например, проверка легальности или поиск обновлений) могут перехватывать фокус ввода в момент открытия основных рабочих окон. В сообществе уже опубликован детальный разбор багов платформы 8.3.27.1644 с готовыми патчами для исправления ситуации.

Решение 1: Изменение параметров подключения к базе

Одним из первых и наиболее эффективных способов «лечения» без изменения программного кода является корректировка настроек запуска информационной базы. Рассмотрим, как это сделать по шагам:

  1. Запустим окно запуска 1С (список баз).
  2. Выберем нужную базу и нажмем кнопку «Изменить».
  3. Перейдем на последнюю вкладку параметров запуска.
  4. Найдем поле «Основной режим запуска». Если там жестко установлен Толстый клиент, это может провоцировать баг на новой платформе.
  5. Установим значение «Выбирать автоматически».

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

Решение 2: Пользовательские «костыли» для оперативного возврата фокуса

Если изменить настройки подключения не удается или это не помогает, разберем методы, которые позволяют оператору вернуть фокус ввода «здесь и сейчас». Эти действия заставляют операционную систему перерисовать активное окно 1С:

Решение 3: Программное исправление для разработчиков

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

Посмотрим на пример кода, который устанавливает текущий элемент формы явно после выполнения логики закрытия модальных окон:


// В обработчике оповещения о закрытии окна или после открытия модальной формы
ЭтаФорма.ТекущийЭлемент = Элементы.СправочникНоменклатураСписок; 
// Вместо СправочникНоменклатураСписок укажите имя вашего элемента

Если же стандартные методы 1С не помогают, можно прибегнуть к эмуляции нажатия системных клавиш через COMОбъект. Рассмотрим вариант автоматизации нажатия Alt-Alt через WScript.Shell, который имитирует системное переключение фокуса:


Попытка
    Shell = Новый COMОбъект("WScript.Shell");
    // Эмулируем нажатие и отпускание клавиши Alt (код %)
    Shell.SendKeys("%"); 
    Shell.SendKeys("%");
Исключение
    // Обработка ошибки, если объект недоступен (например, в Linux или при ограничениях прав)
КонецПопытки;

Этот метод фактически автоматизирует «ручное» решение с двойным Alt и помогает операторам не отвлекаться на лишние действия.

Решение 4: Настройки операционной системы и аппаратного ускорения

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

  1. В свойствах ярлыка 1С в поле «Объект» добавим ключ /gpu off. Это отключит аппаратное ускорение графики, что часто решает проблемы с «невидимыми» окнами, перехватывающими фокус.
  2. Проверим масштабирование дисплея в настройках Windows. Если установлено 125% или 150%, попробуем вернуть 100% или в свойствах файла 1cv8.exe на вкладке «Совместимость» включить опцию «Переопределить режим масштабирования высокого разрешения» (Система).

Заключение и рекомендации

Подводя итог, отметим, что проблема ввода в 8.3.27 является признанной ошибкой, которую разработчики 1С постепенно исправляют в новых минорных релизах (сборки 17хх, 18хх и выше). Если вы связаны требованиями по маркировке товаров и ФФД 1.2, вам критически важно оставаться на 27-й платформе. В этом случае мы рекомендуем:

  1. Обновиться до самой последней доступной сборки внутри ветки 8.3.27.
  2. Проверить настройки режима запуска (выбирать автоматически).
  3. При сохранении проблем в формах подбора — внедрить программный возврат фокуса через ТекущийЭлемент или использовать проверенное расширение для восстановления работы клавиатуры.

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

← На главную