Как устранить ошибку 96 DPI и некорректное отображение обычных форм 1С в терминальном режиме?

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

При работе с платформой 1С:Предприятие 8.3 в терминальном режиме (RDP) на операционных системах Windows Server 2012 R2, 2016 или 2019 многие пользователи и администраторы сталкиваются с назойливым сообщением: «Разработку форм рекомендуется выполнять в разрешении 96 DPI». Проблема осложняется тем, что элементы «обычных» (не управляемых) форм начинают «разъезжаться», кнопки пропадают, а поля ввода накладываются друг на друга. Давайте разберем, почему это происходит и какими способами можно привести интерфейс в рабочее состояние.

Выясним причину: почему 1С требует именно 96 DPI?

Проанализируем технологическую основу «обычного» интерфейса 1С. Он создавался в эпоху, когда мониторы имели стандартную плотность пикселей, а системный масштаб Windows всегда составлял 100% (что соответствует 96 точкам на дюйм — DPI). Механизм отрисовки таких форм использует графическую подсистему GDI, которая оперирует абсолютными координатами в пикселях. Когда современный пользователь подключается к серверу с монитора с высоким разрешением (4K или Full HD на малой диагонали) и устанавливает масштаб 125% или 150%, Windows пытается масштабировать интерфейс 1С.

Рассмотрим проблему глубже: 1С проверяет метрики системного шрифта DEFAULT_GUI_FONT. В современных ОС этот шрифт (обычно Microsoft Sans Serif или Tahoma) меняет свои размеры в зависимости от настроек DPI. Как только 1С видит, что метрики шрифта не соответствуют стандартным 96 DPI, она выдает предупреждение, а алгоритмы автоматической расстановки элементов (Anchors) начинают работать некорректно, вызывая визуальный хаос на форме.

Решение 1: Настройка режима совместимости DPI в свойствах ярлыка

Это самый быстрый и доступный способ, который помогает в большинстве случаев на Windows Server 2012 R2 и выше. Посмотрим, как заставить операционную систему взять масштабирование на себя, скрыв от 1С реальный DPI монитора.

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

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

Решение 2: Групповые политики сервера (самый надежный метод)

Если в терминальной среде работает много пользователей, настраивать каждый ярлык неудобно. Разберем, как решить проблему на уровне всего сервера через редактор локальной групповой политики (gpedit.msc).

Пройдем по шагам следующий путь:

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

Здесь нас интересует параметр «Запретить перенаправление DPI» (No DPI Optimization). Включив эту политику, мы принудительно заставляем сервер игнорировать настройки масштаба клиентского устройства. Каждая RDP-сессия будет запускаться с жестко заданным значением 96 DPI. Это гарантирует стабильность «обычных» форм 1С, так как среда выполнения становится предсказуемой и единообразной для всех сотрудников.

Решение 3: Манипуляции с RDP-сессией (метод «переподключения»)

Рассмотрим интересный нюанс работы RDP в Windows Server 2012 R2 и 2016. Иногда сессия «запоминает» DPI при первом входе. Попробуем выполнить следующий алгоритм, который помогает сбросить некорректные метрики шрифтов:

  1. Установите на своем локальном компьютере масштаб текста 100%.
  2. Зайдите в новую RDP-сессию на сервер.
  3. Выйдите из системы, используя команду «Выход» (Sign out), чтобы сеанс полностью завершился, а не просто перешел в состояние «Disconnected».
  4. Теперь установите на локальном ПК комфортный для вас масштаб (например, 150%).
  5. Снова подключитесь к серверу.

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

Решение 4: Использование внешнего манифеста приложения

Если системные настройки не помогают, мы можем внедрить «инструкцию» для Windows прямо рядом с исполняемым файлом 1С. Рассмотрим создание файла манифеста.

В папке с установленной платформой (где лежит 1cv8.exe) создайте текстовый файл с названием 1cv8.exe.manifest и следующим содержанием:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
        <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
    </windowsSettings>
</application>
</assembly>

Этот файл принудительно сообщает операционной системе, что приложение 1С не поддерживает масштабирование (dpiAware=false). Чтобы Windows начала приоритетно использовать внешний манифест вместо встроенного, может потребоваться внести изменение в реестр:

В ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide создайте параметр PreferExternalManifest (тип DWORD) со значением 1.

Решение 5: Скрипт для принудительной смены разрешения (утилита nircmd)

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


@echo off
nircmd.exe setdisplay 1366 768 32
start /wait 1cv8.exe
nircmd.exe setdisplay 1920 1080 32
exit

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

Подведем итоги

Проблема 96 DPI — это следствие конфликта старой графической архитектуры обычных форм 1С и современных методов масштабирования интерфейсов в Windows. Проанализировав все способы, мы рекомендуем начинать с настройки совместимости «Система» в свойствах ярлыка. Если же вы администрируете сервер с большим количеством пользователей, оптимальным выбором станет настройка групповой политики, запрещающей оптимизацию DPI для терминальных сессий. Это позволит избежать жалоб пользователей на «прыгающие» поля и обеспечит стабильную работу учетной системы.

← На главную