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

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

При работе с конфигурациями на «обычных» формах (например, УТ 10.3, УПП 1.3 или КА 1.1) пользователи часто сталкиваются с неприятной ситуацией: после замены монитора на более современный или изменения масштаба экрана в Windows элементы формы «разъезжаются». Кнопки могут накладываться друг на друга, табличные части уходят за границы экрана, а привязки перестают адекватно реагировать на изменение размеров окна. Рассмотрим подробнее, почему это происходит и как решить проблему несколькими способами.

Выясним причину: почему «плывут» обычные формы

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

Способ 1. Приведение системных настроек к стандарту 96 DPI

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

  1. Закроем все активные сеансы 1С:Предприятия.
  2. Перейдем в настройки экрана Windows (правой кнопкой мыши на рабочем столе — «Параметры экрана»).
  3. Установим значение «Масштаб текста, приложений и других элементов» на 100%.
  4. Проверим, что разрешение экрана соответствует рекомендуемому для данного монитора.

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

Способ 2. «Шевеление» элементов в конфигураторе

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

  1. Установим на компьютере разработчика масштаб 100% (96 DPI). Это принципиально важно для корректного сохранения метаданных.
  2. Откроем базу в режиме «Конфигуратор».
  3. Найдем проблемную форму документа или справочника.
  4. Выделим любой элемент формы (например, кнопку или поле) и сдвинем его на пару пикселей в сторону, а затем вернем на место.
  5. Сохраним изменения и обновим конфигурацию базы данных.

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

Способ 3. Переопределение масштабирования в свойствах ярлыка

Проанализируем ситуацию, когда нам нужно сохранить масштаб Windows 125% или 150%, но при этом добиться корректной работы 1С. Мы можем заставить систему обрабатывать графику приложения особым образом:

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

При выборе варианта «Система» Windows будет сама масштабировать окно 1С как картинку. Текст может стать чуть менее четким (эффект размытия), но зато все кнопки и поля останутся на своих местах, предусмотренных разработчиком.

Способ 4. Программный сброс настроек положения окна

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

В процедуре ПередОткрытием пропишем следующий код:


Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    // Принудительно назначаем новый уникальный ключ сохранения положения окна
    // Это заставит систему игнорировать старый «кривой» кэш пользователя
    КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор;
    
    // Если нужно, чтобы форма всегда открывалась на весь экран:
    ЭтаФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
КонецПроцедуры

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

Способ 5. Настройка свойства «Автомасштабируемость»

В конфигураторе у объекта Форма существует важное свойство — «Автомасштабируемость» (Auto-scaling). Проанализируем его влияние:

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

Способ 6. Очистка настроек пользователя в информационной базе

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

  1. Зайдем в программу в режиме «1С:Предприятие» под пользователем с полными правами.
  2. Откроем меню Сервис — Настройки пользователя.
  3. Перейдем на вкладку «Очистка настроек».
  4. В списке найдем настройки именно для того пользователя и той формы, с которой возникли проблемы.
  5. Удалим эти записи.

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

Важное примечание: Если пользователь работает с двумя мониторами, убедитесь, что основной монитор (Main Display в настройках Windows) — это тот, на котором открывается 1С. Платформа считывает параметры DPI именно с основного экрана в момент инициализации графического интерфейса. Желательно, чтобы на обоих мониторах был установлен одинаковый масштаб DPI (например, 100% на обоих), чтобы избежать хаотичного перемещения элементов при перетаскивании окна между экранами.

← На главную