В процессе работы с торговыми решениями на платформе 1С:Предприятие 8.3 (особенно в конфигурациях 1С:Розница или 1С:Управление торговлей при использовании рабочего места кассира — РМК) технические специалисты часто сталкиваются со странным поведением интерфейса. Типичный сценарий: кассир считывает штрихкод товара или дисконтной карты, на экране на доли секунды всплывает модальное или блокирующее окно опроса (например, для ввода данных владельца карты), но затем основное окно РМК «встряхивается», перерисовывается, а диалоговое окно уходит на задний план, блокируя при этом работу кассира.
Подобная ситуация сильно замедляет обслуживание покупателей на кассе. Ситуация усложняется тем, что база данных на других компьютерах может работать абсолютно корректно. Это доказывает, что корень проблемы кроется не в ошибках самой конфигурации 1С, а в особенностях окружения конкретного рабочего места: операционной системе Windows, драйверах торгового оборудования, настройках масштабирования или параметрах реестра. Давайте подробно разберем, почему это происходит и какими способами можно полностью устранить эту проблему.
В ряде релизов платформы 1С:Предприятие 8.3 (особенно использующих интерфейс «Такси» на управляемых формах) присутствует неприятная особенность прорисовки интерфейса. Когда главное окно программы развернуто на весь экран (кнопкой «Развернуть» в Windows), операционная система и платформа могут некорректно рассчитывать порядок слоев (Z-order) при открытии новых дочерних окон. При появлении диалогового окна платформа пытается перерисовать родительскую форму, что вызывает визуальное мерцание («колбасит» интерфейс), после чего фокус принудительно возвращается главному окну, а дочернее уходит под него.
Для решения этой проблемы выполним следующие шаги:
В операционных системах Windows, начиная с Windows 7 и заканчивая Windows 10/11, по умолчанию работает встроенный механизм защиты пользователя от «кражи фокуса» (Foreground Lock). Этот механизм предотвращает ситуации, когда фоновые приложения внезапно открывают свои окна поверх активного окна, в которое пользователь вводит текст. Однако в случае с 1С и внешними компонентами сканера штрихкодов Windows может ошибочно распознать открытие формы опроса как попытку фонового процесса захватить экран и принудительно возвращает фокус на главное окно РМК.
Для принудительного отключения этой защиты и разрешения окнам 1С беспрепятственно забирать фокус выполним редактирование системного реестра:
Win + R, введем regedit и нажмем Enter для запуска редактора реестра.HKEY_CURRENT_USER\Control Panel\Desktop.ForegroundLockTimeout.0 (по умолчанию там обычно установлено 200000 миллисекунд). Это изменение заставит Windows передавать фокус новым окнам мгновенно.ActiveWindowTracking в этой же ветке реестра. Если он установлен в значение 1, это означает, что фокус автоматически переносится на то окно, над которым находится курсор мыши. Рекомендуется установить его в значение 0, чтобы избежать хаотичного переключения окон при случайном сдвиге мыши.Для быстрого внесения изменений в реестр мы можем создать текстовый файл с расширением .reg и запустить его от имени администратора со следующим содержимым:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Control Panel\Desktop]
"ForegroundLockTimeout"=dword:00000000
"ActiveWindowTracking"=dword:00000000
Очень часто сканеры штрихкодов подключаются к компьютеру в режиме эмуляции клавиатуры (KB-интерфейс). При считывании кода сканер отправляет в систему поток символов с огромной скоростью, имитируя сверхбыстрое нажатие клавиш. Если в операционной системе установлена утилита автоматического переключения раскладки клавиатуры (например, Punto Switcher или Caramba Switcher), она перехватывает этот поток данных, пытается проанализировать его на предмет корректности русской/английской раскладки и отправляет свои эмулированные нажатия клавиш назад. Это переключение раскладки «на лету» гарантированно сбивает фокус активного окна в 1С.
Проанализируем и исправим эту ситуацию:
1cv8.exe (или 1cv8c.exe для тонкого клиента) в список исключений программы-переводчика.Ctrl + Shift вызывает сбои в логике работы РМК (при удержании клавиши Ctrl интерфейс 1С может уводить формы одну под другую). Рекомендуется изменить стандартное сочетание клавиш для смены раскладки на Alt + Shift в параметрах языковых настроек Windows.ВнешнееСобытие, минуя клавиатурный буфер Windows и раскладку клавиатуры.Если на кассовом компьютере установлено нестандартное масштабирование экрана Windows (например, 125% или 150% для сенсорных мониторов), видеоподсистема при отрисовке нового масштабируемого окна 1С может не успевать вовремя обработать графические слои. Это приводит к характерному визуальному «подергиванию» основного окна и потере фокуса.
Выполним следующие действия для устранения проблем с графикой:
/NoGdiPlus — отключает использование библиотеки GDI+ для отрисовки графики интерфейса./NoHardwareAcceleration — отключает аппаратное ускорение отрисовки форм видеокартой.При простом удалении базы из списка и повторном ее добавлении системный кэш метаданных очищается, но настройки отображения интерфейса конкретного пользователя Windows (включая сохраненную геометрию окон, их размеры и порядок слоев) остаются в профиле операционной системы. Если в файлах настроек произошел сбой, окна РМК могут продолжать открываться некорректно.
Для полной очистки пользовательского кэша выполним следующие действия:
%userprofile%\AppData\Local\1C\1cv8. Полностью удалим все папки с длинными буквенно-цифровыми именами (UID баз данных).%userprofile%\AppData\Roaming\1C\1cv8 и также очистим все папки с UID баз данных. При этом будут сброшены все персональные настройки окон пользователя (размеры, положение на экране), и при следующем открытии РМК формы инициализируются в стандартном правильном режиме.Последовательно применив эти шаги, мы сможем локализовать причину сбоя графической подсистемы Windows или драйверов оборудования и вернуть стабильную, быструю работу кассового узла без необходимости переустановки операционной системы или замены комплектующих компьютера.