Переход со старых версий операционных систем, таких как Windows Server 2008, на современные решения (Windows Server 2016, 2019 или 2022) часто преподносит неприятные сюрпризы для пользователей программ на базе обычных форм. Одной из таких проблем является визуальная обрезка последнего символа (обычно цифры) в полях ввода или ячейках таблиц, если для них установлено выравнивание по правому краю. Рассмотрим причины этого явления и разберем по шагам все доступные способы решения задачи.
Для начала проанализируем ситуацию с технической точки зрения. Платформа 1С:Предприятие в режиме обычных форм для отрисовки интерфейса использует графический интерфейс устройства GDI (Graphics Device Interface). Начиная с Windows 10 и Windows Server 2016, компания Microsoft существенно переработала алгоритмы сглаживания шрифтов и механизмы масштабирования интерфейса (DPI).
Выясним причину обрезки: современные алгоритмы рендеринга и сглаживания шрифтов (таких как ClearType) рассчитывают ширину текстовой строки с учетом субпиксельного позиционирования. В результате фактическая ширина строки в пикселях может оказаться на 1–2 пикселя больше, чем рассчитывает платформа 1С, опираясь на старые метрики GDI. При выравнивании по правому краю текст прижимается вплотную к правой границе контейнера, и эти "лишние" пиксели просто не помещаются в отведенную область, из-за чего крайний символ кажется обрезанным.
Как показывает практика и обсуждения системных администраторов, наиболее эффективным методом борьбы с этой проблемой является управление функцией ClearType и сглаживанием шрифтов в терминальных сессиях. Рассмотрим подробнее, как это влияет на процесс.
Когда ClearType выключен, протокол RDP передает команды по отрисовке символов на сторону клиента. Когда он включен — сервер рендерит картинку, сжимает ее и пересылает клиенту. Отключение сглаживания не только возвращает "старые" метрики шрифтов, но и часто ускоряет работу интерфейса.
Порядок действий на сервере:
Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных сеансов.Также проверим настройки быстродействия системы:
Панель управления -> Система -> Дополнительные параметры системы.Дополнительно в секции Быстродействие нажмем Параметры.Если проблема сохраняется или проявляется локально (не через RDP), проанализируем настройки масштабирования исполняемого файла платформы 1С. Мы можем заставить операционную систему использовать старый механизм отрисовки для конкретного приложения.
Рассмотрим шаги по настройке:
C:\Program Files (x86)\1cv8\номер_версии\bin\1cv8.exe.Посмотрим на более глубокий уровень настройки через файл манифеста. Платформа 1С может сообщать операционной системе, что она умеет работать с высоким разрешением (DPI Aware). Если мы принудительно укажем, что приложение не поддерживает DPI Aware, Windows применит к нему стандартные механизмы масштабирования.
Для этого рядом с файлом 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>
Это заставит систему считать приложение "старым" и использовать классические алгоритмы отрисовки шрифтов Tahoma и MS Sans Serif, которые чаще всего используются в обычных формах.
Если проблема носит локальный характер и проявляется в конкретных формах (например, только в расходной накладной), мы можем решить ее программно или через свойства объектов. Разберем, какие свойства нам помогут.
В свойствах поля ввода или ячейки табличного поля есть параметр "Отступ справа" (Horizontal Padding). По умолчанию он равен 0. Если мы установим значение 1 или 2, платформа принудительно добавит несколько пикселей свободного пространства между текстом и правой границей поля. Этого запаса обычно достаточно, чтобы компенсировать погрешность рендеринга GDI.
Пример программной установки отступа для всех колонок табличного поля:
Для Каждого Колонка Из ЭлементыФормы.ТабличноеПоле1.Колонки Цикл
Колонка.ЭлементУправления.ОтступСправа = 1;
КонецЦикла;
Выясним еще одну особенность протокола RDP на современных серверах. По умолчанию используется 32-битная глубина цвета. Это активирует дополнительные визуальные эффекты отрисовки, которые могут влиять на отображение шрифтов в устаревших приложениях.
Попробуем ограничить глубину цвета:
Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленных сеансов.Хотя это может незначительно ухудшить цветопередачу в графических элементах, для работы в учетной системе это практически незаметно, но зато эффективно исправляет проблемы с "разъезжающимися" шрифтами.
Проблема обрезки символов — это комплексный конфликт старого графического движка 1С и новых механизмов визуализации Windows. В большинстве случаев достаточно отключения сглаживания шрифтов (ClearType) на стороне сервера. Если же требуется сохранить сглаживание для других приложений, наиболее правильным путем будет использование настроек совместимости DPI для исполняемого файла 1С или установка отступов справа в конфигурации.