Почему в 1С 7.7 при работе через RemoteApp не прорисовываются списки справочников и как решить эту проблему?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

При эксплуатации платформы 1С:Предприятие 7.7 в терминальной среде Windows Server через бесшовные приложения RemoteApp администраторы и пользователи нередко сталкиваются со сбоем визуализации интерфейса. Проблема проявляется следующим образом: при открытии формы выбора элемента справочника само модальное или обычное окно открывается, однако область со списком элементов остается пустой или белой. Элементы могут появляться только после переключения фокуса, кликов по узлам дерева групп или изменения размера окна. При этом в классическом полноэкранном сеансе RDP такой сбой полностью отсутствует.

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

Выясним причину сбоя перерисовки элементов

Для понимания корня проблемы разберем различия между работой классического терминального сеанса и протокола публикации отдельных приложений RemoteApp (RAIL):

  1. Перехват оконных процедур внешними библиотеками: В конфигурациях 1С 7.7 для тонкой настройки интерфейса, раскраски строк таблиц и колонок часто используется внешняя компонента FormEx (или библиотека 1С++). Данные модули используют технологию перехвата оконных сообщений (subclassing) системных элементов управления Win32/MFC, таких как SysListView32 и SysTreeView32. Компонента перехватывает системные события отрисовки WM_PAINT, WM_ERASEBKGND и WM_NCPAINT. В устаревших версиях библиотек расчет регионов отсечения (clipping regions) выполнялся некорректно для многослойных окон.
  2. Специфика бесшовного режима RemoteApp: В отличие от стандартного сеанса RDP, где весь рабочий стол формируется сервером в виде единого кадра, RemoteApp транслирует каждое окно отдельно. Окна и дочерние элементы получают прозрачную подложку и управляются локальным диспетчером композиции (DWM) клиентской операционной системы. Если внешняя компонента не возвращает управление стандартному обработчику окон своевременно или задерживает инвалидацию региона (InvalidateRect), клиентский диспетчер просто не получает пакета обновления геометрии окна.

Основное решение: обновление внешней компоненты FormEx

Как показывает практика, источником проблемы в абсолютном большинстве случаев является устаревшая сборка библиотеки FormEx.dll, в которой обработка событий перерисовки списков в среде бесшовных окон еще не была оптимизирована. Разберем по шагам, как выполнить обновление компоненты:

  1. Определим наличие и расположение библиотеки: Проверим каталог базы данных или каталог системных утилит 1С (обычно подкаталог BIN), найдем файл FormEx.dll и проверим его версию в свойствах файла.
  2. Завершим активные сеансы: Перед заменой библиотеки необходимо убедиться, что ни один терминальный пользователь не удерживает файл в оперативной памяти сервера. Для этого проверим список открытых дескрипторов или временно закроем сессии пользователей.
  3. Установим свежую сборку FormEx: Заменим существующий файл FormEx.dll на актуальный релиз компоненты, в котором исправлены ошибки взаимодействия с DWM и RemoteApp.
  4. Проверим инициализацию в коде: Убедимся, что загрузка компоненты в глобальном модуле выполняется штатным образом:

Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 0 Тогда
    Предупреждение("Не удалось загрузить компоненту FormEx!");
КонецЕсли;

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

Дополнительные решения: оптимизация настроек сервера и RDP

Если обновление библиотеки по каким-либо причинам невозможно сразу или в системе используются нестандартные графические хуки нескольких компонентов, рассмотрим серверные настройки, стабилизирующие вывод GDI-графики 1С 7.7 в RemoteApp.

1. Настройка групповых политик сервера (GPO)

На сервере терминалов (например, Windows Server 2008 R2 или новее) можно принудительно изменить поведение диспетчера композиции. Для этого запустим редактор локальной групповой политики gpedit.msc и перейдем по пути:

Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных сеансов

  1. Найдем параметр «Принудительная отмена композиции рабочего стола для сеансов удаленных рабочих столов» (Disable Desktop Composition) и переведем его в состояние Включено. Это снизит конфликт между устаревшим GDI-рендерингом 1С 7.7 и трехмерной подсистемой Windows.
  2. Установим ограничение глубины цвета для сеансов до 16 или 24 бит, что уменьшает накладные расходы при отрисовке сложных списков.

2. Корректировка параметров RDP-файла

Откроем конфигурационный файл подключения .rdp в текстовом редакторе и добавим или скорректируем следующие директивы:


bitmapcachepersistenable:i:0
allow font smoothing:i:0
session bpp:i:24

Параметр bitmapcachepersistenable:i:0 отключает кэширование битовых матриц на диске клиента, что исключает залипание устаревших пустых фрагментов интерфейса в локальном кэше.

3. Проверка очередности загрузки внешних компонент

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

Ограничения платформы и альтернативный вариант

Платформа 1С:Предприятие 7.7 не проектировалась для работы с бесшовными протоколами публикации окон, появившимися существенно позже окончания активной разработки ветки 7.7. Если в силу уникальных доработок конфигурации или специфических системных хуков добиться идеальной отрисовки в RemoteApp не удается, наиболее надежным и проверенным решением остается запуск 1С 7.7 в полноэкранном терминальном сеансе (Full Desktop RDP). В классическом рабочем столе Windows буферизация экранов происходит монолитно, что на 100% гарантирует отсутствие белых областей и непрорисованных таблиц.

← На главную