При эксплуатации платформы 1С:Предприятие 7.7 в терминальной среде Windows Server через бесшовные приложения RemoteApp администраторы и пользователи нередко сталкиваются со сбоем визуализации интерфейса. Проблема проявляется следующим образом: при открытии формы выбора элемента справочника само модальное или обычное окно открывается, однако область со списком элементов остается пустой или белой. Элементы могут появляться только после переключения фокуса, кликов по узлам дерева групп или изменения размера окна. При этом в классическом полноэкранном сеансе RDP такой сбой полностью отсутствует.
Проанализируем причины подобного поведения платформы, рассмотрим шаги по диагностике и разберем способы полного устранения графических артефактов.
Для понимания корня проблемы разберем различия между работой классического терминального сеанса и протокола публикации отдельных приложений RemoteApp (RAIL):
FormEx (или библиотека 1С++). Данные модули используют технологию перехвата оконных сообщений (subclassing) системных элементов управления Win32/MFC, таких как SysListView32 и SysTreeView32. Компонента перехватывает системные события отрисовки WM_PAINT, WM_ERASEBKGND и WM_NCPAINT. В устаревших версиях библиотек расчет регионов отсечения (clipping regions) выполнялся некорректно для многослойных окон.InvalidateRect), клиентский диспетчер просто не получает пакета обновления геометрии окна.Как показывает практика, источником проблемы в абсолютном большинстве случаев является устаревшая сборка библиотеки FormEx.dll, в которой обработка событий перерисовки списков в среде бесшовных окон еще не была оптимизирована. Разберем по шагам, как выполнить обновление компоненты:
BIN), найдем файл FormEx.dll и проверим его версию в свойствах файла.FormEx.dll на актуальный релиз компоненты, в котором исправлены ошибки взаимодействия с DWM и RemoteApp.
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда
Предупреждение("Не удалось загрузить компоненту FormEx!");
КонецЕсли;
После обновления библиотеки и перезапуска сеанса RemoteApp проверьте открытие форм выбора справочников. Как правило, списки начинают стабильно отрисовываться с первого раза без необходимости щелкать по ветвям дерева.
Если обновление библиотеки по каким-либо причинам невозможно сразу или в системе используются нестандартные графические хуки нескольких компонентов, рассмотрим серверные настройки, стабилизирующие вывод GDI-графики 1С 7.7 в RemoteApp.
На сервере терминалов (например, Windows Server 2008 R2 или новее) можно принудительно изменить поведение диспетчера композиции. Для этого запустим редактор локальной групповой политики gpedit.msc и перейдем по пути:
Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных сеансов
Откроем конфигурационный файл подключения .rdp в текстовом редакторе и добавим или скорректируем следующие директивы:
bitmapcachepersistenable:i:0
allow font smoothing:i:0
session bpp:i:24
Параметр bitmapcachepersistenable:i:0 отключает кэширование битовых матриц на диске клиента, что исключает залипание устаревших пустых фрагментов интерфейса в локальном кэше.
Если в конфигурации параллельно задействованы несколько внешних модулей (например, FormEx.dll и 1cpp.dll), проанализируем порядок их загрузки в процедуре ПриНачалеРаботыСистемы глобального модуля. Компонента, отвечающая за модификацию интерфейса диалогов, должна инициализироваться первой, чтобы правильно перехватить дескрипторы окон без конфликтов с хуками других библиотек.
Платформа 1С:Предприятие 7.7 не проектировалась для работы с бесшовными протоколами публикации окон, появившимися существенно позже окончания активной разработки ветки 7.7. Если в силу уникальных доработок конфигурации или специфических системных хуков добиться идеальной отрисовки в RemoteApp не удается, наиболее надежным и проверенным решением остается запуск 1С 7.7 в полноэкранном терминальном сеансе (Full Desktop RDP). В классическом рабочем столе Windows буферизация экранов происходит монолитно, что на 100% гарантирует отсутствие белых областей и непрорисованных таблиц.