Как решить проблему с масштабированием и «слетанием» обычных форм в 1С при работе через RDP?

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе со старыми конфигурациями 1С:Предприятие (например, 1С:УПП, 1С:КА 1.1 и другими legacy-решениями на обычных формах) IT-специалисты часто сталкиваются со специфической проблемой. После обновления платформы или конфигурации у пользователей, работающих в терминальном режиме (RDP), внезапно «слетает» масштабирование документов и справочников. Формы при разворачивании на весь экран не растягиваются, элементы наползают друг на друга, а кнопки и табличные части уходят за границы видимости.

Особенно загадочным выглядит то, что при первом открытии формы после очистки кэша всё отображается корректно. Но стоит закрыть форму и открыть её второй раз — интерфейс ломается безвозвратно. Ни ручная очистка папок AppData, ни запуск с ключом /ClearCache не дают долгосрочного результата. Проанализируем, почему возникает этот сбой, и детально рассмотрим все способы его устранения.

Выясняем причину: почему привязки ломаются именно со второго раза?

Для понимания природы этой проблемы важно знать, как старый графический движок 1С (работающий с обычными формами) взаимодействует с операционной системой Windows. Происходит следующее:

  1. При первом открытии формы (после очистки кэша) платформа 1С считывает её структуру и размеры элементов напрямую из метаданных конфигурации. Она отрисовывает форму «с нуля», используя стандартные геометрические привязки.
  2. При закрытии формы платформа автоматически сохраняет её последние экранные координаты, размеры окон и состояние элементов в системный профиль пользователя на сервере (в файлы кэша настроек).
  3. При втором и последующих открытиях 1С пытается воссоздать интерфейс на основе этих сохраненных координат. Если масштаб DPI (Dots Per Inch) на локальном компьютере пользователя отличается от масштаба на RDP-сервере (например, у пользователя на ноутбуке выставлено 125%, а на сервере — 100%), старый движок отрисовки некорректно пересчитывает пиксели. Координаты элементов смещаются, привязки ломаются, и форма теряет способность к масштабированию.

Рассмотрим подробнее по шагам, как можно решить эту проблему на уровне пользователя, разработчика и системного администратора.

Способ 1. Быстрое исправление на стороне пользователя (Восстановление положения окна)

Если проблему нужно устранить «здесь и сейчас» для одного конкретного пользователя, можно воспользоваться встроенным механизмом сброса координат окна в самой 1С.

Выполним следующие действия:

  1. Откроем проблемную форму в режиме «1С:Предприятие».
  2. В нижней панели открытых окон (или через главное меню «Окна») найдем название нашей формы.
  3. Нажмем на элемент правой кнопкой мыши и выберем пункт «Восстановить положение окна».

Это мгновенно вернет форму к исходному состоянию из метаданных. Однако помните, что этот способ временный: при последующем закрытии и повторном открытии формы с некорректным масштабом экрана координаты могут перезаписаться с ошибкой снова.

Способ 2. Глобальное решение на сервере RDP через реестр (Рекомендуется)

По умолчанию современные операционные системы Windows Server транслируют масштаб экрана с клиентского компьютера пользователя в активную RDP-сессию. Если у бухгалтера на локальном компьютере установлен масштаб 125% или 150% (что часто бывает на современных FullHD и 4K мониторах), сервер RDP применит эти же параметры внутри терминального сеанса, что и ломает обычные формы 1С.

Мы можем принудительно запретить серверу перенимать масштаб DPI клиента. Для этого выполним настройку системного реестра на RDP-сервере:

  1. Запустим редактор реестра (regedit) от имени администратора.
  2. Перейдем в ветку:
    HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations
  3. Создадим параметр типа REG_DWORD с именем IgnoreClientDesktopScaleFactor и присвоим ему значение 1. Это полностью заблокирует наследование масштаба клиента.
  4. Чтобы принудительно задать стандартный масштаб 100% для всех терминальных пользователей, перейдем в ветку:
    HKCU\Control Panel\Desktop
  5. Найдем или создадим параметр типа REG_DWORD с именем LogPixels.
  6. Установим его значение в десятичной системе исчисления равным 96 (что соответствует стандартному масштабу 100% / 96 DPI).

После внесения этих изменений пользователям необходимо завершить терминальный сеанс (выйти через Log off) и зайти заново.

Способ 3. Переопределение режима DPI на стороне RDP-клиента

Если у пользователей установлены мониторы с очень высоким разрешением и им физически необходим локальный масштаб более 100%, мы можем настроить сам клиент удаленного рабочего стола (mstsc.exe) на персональном компьютере пользователя так, чтобы он игнорировал системное масштабирование Windows.

Для этого применим режим DPI-unaware одним из двух путей:

А. Настройка через реестр клиента (для Windows 10 / 11)

Перейдем в реестр на локальной машине пользователя в раздел:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\mstsc.exe
Создадим там параметр dpiAwareness (тип REG_DWORD) со значением 0. Это отключит трансляцию локального масштаба в окно терминала.

Б. Настройка через внешний файл манифеста (для старых версий Windows)

Рассмотрим, как заставить ОС принудительно масштабировать окно RDP силами самого графического процессора клиентского ПК:

  1. Откроем реестр локального компьютера и перейдем по пути:
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide
  2. Создадим параметр PreferExternalManifest (тип REG_DWORD) со значением 1.
  3. Перейдем в системную папку C:\Windows\System32 (где расположен исполняемый файл RDP-клиента) и создадим там текстовый файл с именем mstsc.exe.manifest.
  4. Вставим в созданный файл специальную разметку, которая указывает Windows на необходимость запускать процесс в режиме совместимости с базовым DPI. При таком подходе шрифты в терминале могут стать слегка размытыми, но формы 1С больше никогда не «слетят» и будут масштабироваться корректно.

Способ 4. Пересохранение форм в Конфигураторе при 96 DPI

Бывают ситуации, когда разработчик вносил изменения в форму или накатывал обновление конфигурации, работая на мониторе с масштабом экрана 125% или выше. В этом случае геометрические параметры элементов записываются в саму структуру конфигурации с искажениями.

Чтобы исправить это, нам необходимо выполнить «перекомпиляцию» интерфейса:

  1. Запустим конфигуратор 1С на компьютере, где физически установлен масштаб экрана 100% (96 DPI). При открытии форм конфигуратор не должен выдавать предупреждение: «Разработку форм рекомендуется вести при разрешении экрана 96 DPI».
  2. Откроем проблемную форму объекта (документа или справочника).
  3. Слегка изменим положение любого элемента (например, сдвинем кнопку на 1 пиксель в сторону и вернем её обратно). Это заставит платформу пересчитать привязки.
  4. Сохраним форму и обновим конфигурацию базы данных.

После этой процедуры у большинства пользователей формы начнут вести себя стабильно.

Способ 5. Настройка свойств ярлыка запуска 1С (для локальной работы или RemoteApp)

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

  1. Кликнем правой кнопкой мыши по ярлыку запуска 1С (или напрямую по файлу 1cestart.exe / 1cv8.exe) и выберем пункт «Свойства».
  2. Перейдем во вкладку «Совместимость».
  3. Нажмем кнопку «Изменить параметры высокого DPI».
  4. В открывшемся окне установим флажок напротив пункта «Переопределите режим масштабирования высокого разрешения. Масштабирование выполняется:».
  5. В выпадающем списке выберем вариант «Система» (или «Система (улучшенная)»).

При такой настройке операционная система будет воспринимать окно 1С как единый графический объект и самостоятельно масштабировать его под экран пользователя, предотвращая сдвиг и наложение элементов управления внутри обычных форм.

Способ 6. Программный обход проблемы в коде 1С (для разработчиков)

Если у вас нет административного доступа к RDP-серверам или компьютерам пользователей, решить проблему можно программным путем непосредственно в кодовой базе конфигурации 1С.

Для этого мы можем принудительно запретить платформе сохранять и считывать некорректные экранные координаты для проблемных форм. Реализуем это в модуле формы с помощью предопределенной процедуры ПередОткрытием:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
    // Отключаем автоматическое сохранение и восстановление положения окна 
    // для предотвращения сбоев масштабирования элементов при разном DPI
    ЭтаФорма.СохранятьПоложениеОкна = Ложь;
    
КонецПроцедуры

Установив свойство СохранятьПоложениеОкна в значение Ложь, мы заставляем платформу 1С при каждом открытии инициализировать форму заново, основываясь исключительно на эталонных метаданных конфигурации. Проблема со «слетанием» интерфейса при повторных открытиях будет полностью устранена.

Способ 7. Использование альтернативных RDP-клиентов

Стандартный клиент Windows (mstsc.exe) имеет глубокую интеграцию с подсистемой GDI операционной системы и жестко навязывает настройки DPI удаленному серверу. В качестве альтернативы ИТ-специалисты рекомендуют рассмотреть использование сторонних менеджеров подключений, таких как:

Эти программы позволяют гибко настраивать разрешение экрана и отключать виртуализацию масштабирования индивидуально для каждой сессии. Это гарантирует, что сеанс будет запущен со стандартными параметрами 100% масштаба, и обычные формы 1С будут отображаться корректно вне зависимости от физического разрешения монитора пользователя.

← На главную