Почему на некоторых компьютерах не работают привязки в УТ 10.3 при переходе на платформу 8.3 и как это исправить?

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

Переход с платформы 1С:Предприятие 8.2 на 8.3 для конфигураций с обычными формами (таких как Управление торговлей 10.3, УПП 1.3 или Бухгалтерия 2.0) часто сопровождается неприятным визуальным артефактом. На некоторых рабочих местах интерфейс форм «разваливается»: кнопки накладываются друг на друга, поля ввода уезжают за границы окна, а привязки элементов управления перестают работать корректно. При этом на большинстве компьютеров всё отображается штатно.

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

Выясняем причину: конфликт старого движка и современного DPI

Проанализируем ситуацию. Механизм обычных форм создавался разработчиками 1С более 15 лет назад. В то время стандартным разрешением мониторов было 96 DPI (соответствует масштабу 100% в настройках Windows). Современные мониторы и ноутбуки с высоким разрешением (FullHD на малых диагоналях, 2K, 4K) требуют масштабирования текста и элементов интерфейса до 125%, 150% и выше для комфортной работы.

Платформа 1С 8.3 пытается быть «современной» и умеет обрабатывать настройки масштабирования операционной системы. Однако в старом движке «обычных форм» это реализовано с ошибками. Когда платформа видит, что в Windows установлен масштаб, отличный от 100%, она пытается программно пересчитать координаты и размеры элементов, заданные в пикселях. Из-за ошибок в алгоритмах пересчета (особенно в ветках 8.3.10 — 8.3.12) привязки «сходят с ума», и форма отрисовывается некорректно. Именно поэтому кнопка «Восстановить положение окна» помогает лишь временно: она сбрасывает кэш координат, но при следующем открытии или изменении размера окна платформа снова ошибается в расчетах.

Решение №1: Настройка масштабирования в параметрах Windows

Самый простой и быстрый способ проверить гипотезу — привести настройки экрана к стандартному виду. Рассмотрим, как это сделать:

  1. Перейдем в Параметры экрана (правой кнопкой мыши по рабочему столу).
  2. Найдем раздел Масштаб и разметка.
  3. Установим значение 100%.
  4. Выйдем из системы и зайдем снова (это критически важно для корректного применения параметров ко всем процессам).

Если после этих манипуляций привязки в 1С заработали правильно, значит, виноват именно DPI. Однако этот метод не всегда удобен, так как на мониторах с высоким разрешением текст станет слишком мелким.

Решение №2: Настройка совместимости исполняемого файла (High DPI Scaling)

Если мы не можем изменить масштаб всей системы, мы можем заставить Windows обрабатывать масштабирование приложения 1С особым образом. Разберем по шагам, как настроить ярлык:

  1. Найдем файл 1cv8.exe. Обычно он располагается в папке C:\Program Files (x86)\1cv8\номер_платформы\bin\.
  2. Нажмем правой кнопкой мыши и выберем Свойства.
  3. Перейдем на вкладку Совместимость.
  4. Нажмем кнопку Изменить параметры высокого DPI.
  5. Установим флажок Переопределите режим масштабирования высокого разрешения.
  6. В выпадающем списке выберем пункт Приложение (Application).

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

Решение №3: Параметр запуска /DisableHighDpiAware

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

Проанализируем процедуру добавления ключа:

  1. Запустим окно выбора информационных баз 1С.
  2. Выберем нужную базу и нажмем Изменить.
  3. На последней вкладке в поле Дополнительные параметры запуска впишем: /DisableHighDpiAware.
  4. Запустим базу.

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

Решение №4: Программный «костыль» для исправления привязок

Если проблема носит массовый характер, а пользователи работают через RDP или на разных устройствах, программисты могут использовать небольшую хитрость в коде. Суть метода заключается в том, чтобы заставить форму «пересчитать» свои элементы сразу после открытия. Посмотрим на пример реализации в модуле формы:


Процедура ПриОткрытии()
    // Устанавливаем признак изменения размера, чтобы спровоцировать пересчет привязок
    ЭтаФорма.Ширина = ЭтаФорма.Ширина + 1;
    ЭтаФорма.Ширина = ЭтаФорма.Ширина - 1;
КонецПроцедуры

Изменение ширины формы на 1 пиксель и мгновенный возврат в исходное состояние инициирует внутреннее событие платформы по обновлению макета. В большинстве случаев это заставляет «уехавшие» элементы вернуться на свои места.

Решение №5: Очистка кэша настроек пользователя

Иногда даже после исправления настроек DPI форма продолжает отображаться криво из-за того, что некорректные координаты уже сохранились в настройках пользователя. Выясним, как их сбросить:

  1. В режиме 1С:Предприятие зайдем в меню Сервис — Настройки пользователя.
  2. Найдем раздел, отвечающий за сохраненные настройки окон.
  3. Удалим настройки для проблемной формы.
  4. Либо воспользуемся радикальным методом: удалим папку кэша по адресу %AppData%\Local\1C\1Cv82 и %AppData%\Roaming\1C\1Cv82 (для 8.3 пути аналогичны, но в папках 1Cv8).

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

Мы выяснили, что основной виновник проблем с привязками в УТ 10.3 на платформе 8.3 — это некорректная работа движка обычных форм с параметром системного масштабирования Windows (DPI). Для исправления ситуации рекомендуем сначала проверить настройку /DisableHighDpiAware в параметрах запуска, так как это наиболее безопасный и точечный метод. Если же вы столкнулись с этой проблемой при разработке, попробуйте программный метод с изменением размера формы в событии ПриОткрытии.

Помните, что борьба «админов и программистов» в данном случае бессмысленна — это объективная особенность поведения платформы, которую нужно просто один раз правильно настроить под конкретное рабочее окружение.

← На главную