При работе со старыми конфигурациями 1С:Предприятие (например, 1С:УПП, 1С:КА 1.1 и другими legacy-решениями на обычных формах) IT-специалисты часто сталкиваются со специфической проблемой. После обновления платформы или конфигурации у пользователей, работающих в терминальном режиме (RDP), внезапно «слетает» масштабирование документов и справочников. Формы при разворачивании на весь экран не растягиваются, элементы наползают друг на друга, а кнопки и табличные части уходят за границы видимости.
Особенно загадочным выглядит то, что при первом открытии формы после очистки кэша всё отображается корректно. Но стоит закрыть форму и открыть её второй раз — интерфейс ломается безвозвратно. Ни ручная очистка папок AppData, ни запуск с ключом /ClearCache не дают долгосрочного результата. Проанализируем, почему возникает этот сбой, и детально рассмотрим все способы его устранения.
Для понимания природы этой проблемы важно знать, как старый графический движок 1С (работающий с обычными формами) взаимодействует с операционной системой Windows. Происходит следующее:
Рассмотрим подробнее по шагам, как можно решить эту проблему на уровне пользователя, разработчика и системного администратора.
Если проблему нужно устранить «здесь и сейчас» для одного конкретного пользователя, можно воспользоваться встроенным механизмом сброса координат окна в самой 1С.
Выполним следующие действия:
Это мгновенно вернет форму к исходному состоянию из метаданных. Однако помните, что этот способ временный: при последующем закрытии и повторном открытии формы с некорректным масштабом экрана координаты могут перезаписаться с ошибкой снова.
По умолчанию современные операционные системы Windows Server транслируют масштаб экрана с клиентского компьютера пользователя в активную RDP-сессию. Если у бухгалтера на локальном компьютере установлен масштаб 125% или 150% (что часто бывает на современных FullHD и 4K мониторах), сервер RDP применит эти же параметры внутри терминального сеанса, что и ломает обычные формы 1С.
Мы можем принудительно запретить серверу перенимать масштаб DPI клиента. Для этого выполним настройку системного реестра на RDP-сервере:
regedit) от имени администратора.HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
HKCU\Control Panel\Desktop
После внесения этих изменений пользователям необходимо завершить терминальный сеанс (выйти через Log off) и зайти заново.
Если у пользователей установлены мониторы с очень высоким разрешением и им физически необходим локальный масштаб более 100%, мы можем настроить сам клиент удаленного рабочего стола (mstsc.exe) на персональном компьютере пользователя так, чтобы он игнорировал системное масштабирование Windows.
Для этого применим режим DPI-unaware одним из двух путей:
Перейдем в реестр на локальной машине пользователя в раздел:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\mstsc.exe
Создадим там параметр dpiAwareness (тип REG_DWORD) со значением 0. Это отключит трансляцию локального масштаба в окно терминала.
Рассмотрим, как заставить ОС принудительно масштабировать окно RDP силами самого графического процессора клиентского ПК:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide
C:\Windows\System32 (где расположен исполняемый файл RDP-клиента) и создадим там текстовый файл с именем mstsc.exe.manifest.Бывают ситуации, когда разработчик вносил изменения в форму или накатывал обновление конфигурации, работая на мониторе с масштабом экрана 125% или выше. В этом случае геометрические параметры элементов записываются в саму структуру конфигурации с искажениями.
Чтобы исправить это, нам необходимо выполнить «перекомпиляцию» интерфейса:
После этой процедуры у большинства пользователей формы начнут вести себя стабильно.
Если платформа 1С запускается непосредственно на локальных компьютерах пользователей, либо база опубликована через RemoteApp, исправить привязки обычных форм можно через свойства совместимости исполняемого файла:
1cestart.exe / 1cv8.exe) и выберем пункт «Свойства».При такой настройке операционная система будет воспринимать окно 1С как единый графический объект и самостоятельно масштабировать его под экран пользователя, предотвращая сдвиг и наложение элементов управления внутри обычных форм.
Если у вас нет административного доступа к RDP-серверам или компьютерам пользователей, решить проблему можно программным путем непосредственно в кодовой базе конфигурации 1С.
Для этого мы можем принудительно запретить платформе сохранять и считывать некорректные экранные координаты для проблемных форм. Реализуем это в модуле формы с помощью предопределенной процедуры ПередОткрытием:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Отключаем автоматическое сохранение и восстановление положения окна
// для предотвращения сбоев масштабирования элементов при разном DPI
ЭтаФорма.СохранятьПоложениеОкна = Ложь;
КонецПроцедуры
Установив свойство СохранятьПоложениеОкна в значение Ложь, мы заставляем платформу 1С при каждом открытии инициализировать форму заново, основываясь исключительно на эталонных метаданных конфигурации. Проблема со «слетанием» интерфейса при повторных открытиях будет полностью устранена.
Стандартный клиент Windows (mstsc.exe) имеет глубокую интеграцию с подсистемой GDI операционной системы и жестко навязывает настройки DPI удаленному серверу. В качестве альтернативы ИТ-специалисты рекомендуют рассмотреть использование сторонних менеджеров подключений, таких как:
Эти программы позволяют гибко настраивать разрешение экрана и отключать виртуализацию масштабирования индивидуально для каждой сессии. Это гарантирует, что сеанс будет запущен со стандартными параметрами 100% масштаба, и обычные формы 1С будут отображаться корректно вне зависимости от физического разрешения монитора пользователя.