При работе в сложных конфигурациях, таких как 1С:ERP Управление предприятием, пользователи часто сталкиваются с неприятным визуальным багом: модальные окна или окна предупреждений «проваливаются» под основные формы приложения. Особенно ярко это проявляется при оформлении документа Заявка на расходование денежных средств (ЗРДС). Когда система пытается вывести предупреждение о том, что «Заданные условия поиска дали слишком много результатов», это сообщение оказывается заблокированным окном уточнения условий. В итоге интерфейс замирает, и пользователь не может нажать «ОК», так как кнопка физически скрыта другим окном.
В этой статье мы подробно разберем, почему возникает нарушение так называемого Z-порядка (очередности наслоения окон) при работе через удаленный рабочий стол (RDP), проанализируем причины этого поведения и рассмотрим пошаговые инструкции по устранению данной ошибки.
Для начала выясним причину, почему это происходит именно в терминальных сессиях. Проблема носит комплексный характер и связана с тем, как графическая подсистема Windows передает данные об отрисовке окон через протокол RDP. Когда платформа 1С инициирует создание нового окна, оно должно получить фокус ввода и встать на передний план. Однако из-за задержек сети или особенностей работы режима RemoteApp, операционная система может не успеть корректно передать фокус, и окно отрисовывается в «фоновом» слое относительно родительской формы.
К основным факторам влияния мы относим:
SystemSettings.Если проблема застала пользователя врасплох и работу нужно продолжить немедленно, разберем несколько приемов, которые заставляют Windows принудительно перерисовать слои графики:
Использование комбинации Alt + Tab. Рассмотрим этот метод как самый простой. При нажатии данных клавиш операционная система выводит список всех активных окон. Переключение на другое приложение и возврат обратно в 1С часто заставляет систему корректно выстроить цепочку модальных окон, выводя предупреждение на передний план.
Изменение геометрии основного окна. Попробуем изменить размер основного окна программы 1С. Можно нажать кнопку «Развернуть во весь экран» или, наоборот, восстановить окно из полноэкранного режима. В момент изменения размера родительской формы 1С инициирует событие ОбновлениеОтображения, что вынуждает все дочерние окна пересчитать свои координаты и положение.
Системное меню окна (Alt + Пробел). Проанализируем ситуацию, когда окно активно, но скрыто. Нажатие Alt + Пробел вызывает системное меню активного (пусть и невидимого) окна. Если после этого нажать клавишу «Переместить» и нажать любую стрелку на клавиатуре, окно «прилипнет» к курсору и выйдет на передний план.
Часто виновником некорректного позиционирования окон являются настройки экрана. Выясним, как правильно настроить масштабирование. Если у пользователя на локальном компьютере установлен масштаб, отличный от 100% (например, 125% на 4K мониторе), а на сервере RDP жестко задано иное значение, координаты всплывающих окон могут рассчитываться с ошибкой.
Выполним следующие действия:
Рассмотрим более глубокую настройку на стороне сервера терминалов. В Windows существует механизм предотвращения кражи фокуса. Если приложение пытается создать окно, когда пользователь активно работает в другом месте, система может блокировать вывод этого окна поверх остальных.
Разберем, как изменить этот параметр через реестр:
regedit от имени администратора.HKEY_CURRENT_USER\Control Panel\Desktop.ForegroundLockTimeout.Платформа 1С запоминает положение каждого открытого окна для каждого пользователя. Эти данные хранятся в специальной системной таблице. Если один раз окно предупреждения открылось некорректно (например, при сбое RDP-сессии), программа будет пытаться открывать его там же снова и снова.
Посмотрим, как сбросить эти настройки в информационной базе:
Также полезно выполнить полную очистку локального кэша, удалив содержимое папок %AppData%\1C\1Cv8 и %LocalAppData%\1C\1Cv8, предварительно завершив работу всех процессов 1С.
Проанализируем влияние графического ускорения. При работе через RDP отрисовка интерфейса может конфликтовать с драйверами видеокарты сервера. Для устранения визуальных артефактов и проблем с наслоением окон попробуем отключить аппаратное ускорение в параметрах запуска 1С.
В окне выбора информационной базы нажмем «Изменить», перейдем на последнюю закладку и в поле «Дополнительные параметры запуска» добавим ключ:
/NoGraphicsHardwareAcceleration
Это заставит платформу использовать программный рендеринг, который более стабильно работает в терминальных средах.
Проблема перекрытия окон в 1С:ERP — это не программная ошибка кода конфигурации, а особенность взаимодействия платформы с графической оболочкой Windows в условиях удаленного доступа. Мы рекомендуем начинать решение с настройки масштаба экрана и очистки пользовательских настроек окон. Если это не помогает, следует переходить к правке реестра и обновлению версии платформы 1С, так как в последних релизах (начиная с 8.3.22) разработчики уделили значительное внимание стабильности Z-порядка окон в веб-клиенте и RDP-сессиях.