Работа с 1С:Предприятие через RemoteApp — это удобный способ предоставить пользователям доступ к базе без необходимости транслировать весь рабочий стол сервера. Однако многие сталкиваются с неприятными спецэффектами: окна выбора файлов открываются «под» основным приложением, фокус внезапно улетает на Excel или браузер, а меню «Файл — Открыть» начинает мерцать. Разберем детально, почему это происходит и как настроить систему для стабильной работы.
Проблема чаще всего кроется в механизмах взаимодействия локального оконного менеджера (на компьютере пользователя) и удаленного сеанса на сервере. Когда приложение работает в режиме RemoteApp, оно пытается интегрироваться в локальную оболочку explorer.exe, что при определенных настройках вызывает конфликты приоритетов окон (Z-order).
Проанализируем первую и самую частую причину «воровства» фокуса. В операционных системах Windows существует защитный механизм, который не позволяет фоновым приложениям внезапно выпрыгивать на передний план и мешать пользователю вводить данные. В контексте RemoteApp этот механизм часто ошибочно считает окно 1С «чужим».
Для решения этой задачи нам потребуется внести изменения в реестр на локальных рабочих станциях пользователей. Рассмотрим последовательность действий:
Win + R, введите regedit и нажмите Enter.HKEY_CURRENT_USER\Control Panel\Desktop.ForegroundLockTimeout.200000 (в десятичной системе). Нам необходимо установить его в 0. Это позволит окнам 1С мгновенно получать фокус при открытии.Важно: После изменения этого параметра необходимо перезагрузить компьютер пользователя или как минимум завершить сеанс и войти снова.
Теперь разберем, как можно модифицировать сам файл подключения (.rdp), через который запускается 1С. Некоторые визуальные эффекты и способы передачи графики конфликтуют с многооконным интерфейсом платформы 8.3.
Откройте ваш .rdp файл любым текстовым редактором (например, Блокнотом) и проверьте или добавьте следующие строки:
bpp:i:16
redirectx:i:0
disable menu anims:i:1
disable themes:i:0
font smoothing:i:0
Выясним, на что влияют эти параметры:
bpp:i:16 — снижение глубины цвета до 16 бит. Это уменьшает нагрузку на канал связи (особенно актуально при использовании OpenVPN) и ускоряет отрисовку окон.redirectx:i:0 — отключение перенаправления DirectX. Это помогает избавиться от мерцания окон и некорректного поведения прозрачных элементов интерфейса.font smoothing:i:0 — отключение сглаживания шрифтов. Хотя это делает текст менее «мягким», это существенно снижает количество графических данных, передаваемых при обновлении окна, что стабилизирует отрисовку диалоговых окон.Рассмотрим ситуацию с мерцанием и «заваливанием» окон с точки зрения графической подсистемы сервера. Современные версии Windows Server пытаются использовать аппаратное ускорение для RemoteApp, что не всегда корректно обрабатывается платформой 1С.
Попробуем отключить аппаратное ускорение графики через групповые политики на сервере:
gpedit.msc.Кроме того, на самом сервере в свойствах системы (sysdm.cpl) на вкладке «Дополнительно» -> «Быстродействие» выберем пункт «Обеспечить наилучшее быстродействие». Это уберет анимацию при сворачивании и разворачивании окон, которая часто является причиной того, что модальное окно 1С «зависает» в невидимой области.
Часто окна «теряются», если у пользователя подключено несколько мониторов или установлено масштабирование экрана (например, 125% или 150%). RemoteApp может некорректно вычислять координаты для новых окон (таких как выбор файла или печатная форма).
Разберем, как это исправить:
Щелкните правой кнопкой мыши по ярлыку 1С (или по файлу mstsc.exe в папке System32), перейдите в «Свойства» -> «Совместимость» -> «Изменить параметры высокого DPI». Установите галочку «Переопределите режим масштабирования...» и выберите в выпадающем списке значение «Приложение». Это заставит систему передавать управление масштабами самой платформе 1С, что минимизирует риск «улета» окон за границы видимости.
Проанализируем программную часть. Начиная с версии 8.3, в 1С реализована концепция отказа от модальных окон. В режиме RemoteApp классические модальные окна (которые блокируют весь интерфейс до их закрытия) ведут себя нестабильно.
Если вы являетесь разработчиком, проверьте свойство конфигурации «Режим использования модальности». Если установлено значение Использовать, попробуйте перевести конфигурацию на режим Использовать с исправлениями или Не использовать.
В коде вместо метода Вопрос() или Предупреждение() следует использовать неблокирующие аналоги:
&НаКлиенте
Процедура ВыполнитьДействие(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Продолжить выполнение операции?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
// Продолжаем логику
КонецЕсли;
КонецПроцедуры
Использование ПоказатьВопрос вместо Вопрос гарантирует, что окно будет корректно вписано в стек окон операционной системы и не «провалится» под основную форму при передаче фокуса через RDP.
Посмотрим на ситуацию со стороны канала связи. Если подключение идет через OpenVPN, пакеты RDP могут фрагментироваться. Это вызывает микро-задержки в отрисовке интерфейса, из-за которых клиент RDP может «рассинхронизироваться» с сервером по состоянию фокуса.
Попробуйте выполнить следующие настройки в конфигурационном файле OpenVPN (.ovpn):
mssfix 1300.tun-mtu 1400.Это уменьшит размер сетевых пакетов, исключая их дробление на узлах провайдеров, что сделает отклик интерфейса 1С более отзывчивым, а переключение окон — более плавным.
Устранение проблем с окнами в RemoteApp — это комплексный процесс. Рекомендуется начинать с правки реестра (ForegroundLockTimeout) и настройки параметров RDP-файла, так как это решает 90% случаев. Если проблема сохраняется, следует обратить внимание на настройки масштабирования и оптимизацию кода самой конфигурации 1С в части использования модальных диалогов.