При работе с конфигурациями на «обычных» формах (например, УТ 10.3, УПП 1.3 или КА 1.1) пользователи часто сталкиваются с неприятной ситуацией: после замены монитора на более современный или изменения масштаба экрана в Windows элементы формы «разъезжаются». Кнопки могут накладываться друг на друга, табличные части уходят за границы экрана, а привязки перестают адекватно реагировать на изменение размеров окна. Рассмотрим подробнее, почему это происходит и как решить проблему несколькими способами.
Проанализируем техническую сторону вопроса. В отличие от современных «управляемых» форм, которые строятся по принципу адаптивной верстки, «обычные» формы используют систему абсолютных координат в пикселях. Платформа рассчитывает положение каждого элемента (кнопки, поля ввода, надписи), опираясь на системные настройки шрифтов и текущий показатель DPI (Dots Per Inch). Если в настройках операционной системы установлен масштаб, отличный от 100% (96 DPI), 1С пытается пересчитать координаты «на лету». Из-за ошибок округления и конфликтов с сохраненными настройками пользователя в кэше, геометрия формы ломается.
Самый простой и быстрый метод, который помогает в большинстве случаев, — это возврат к стандартному масштабированию Windows. Разберем по шагам, что нужно сделать:
Если пользователю критично работать с крупным текстом, этот способ может не подойти. В таком случае перейдем к более гибким настройкам.
Иногда форма «запоминает» некорректное состояние привязок. Посмотрим, как принудительно заставить платформу пересчитать положение элементов:
Этот нехитрый прием заставляет 1С перезаписать таблицу привязок элементов формы в структуре метаданных, что часто устраняет визуальные артефакты у пользователей.
Проанализируем ситуацию, когда нам нужно сохранить масштаб Windows 125% или 150%, но при этом добиться корректной работы 1С. Мы можем заставить систему обрабатывать графику приложения особым образом:
1cv8.exe).При выборе варианта «Система» Windows будет сама масштабировать окно 1С как картинку. Текст может стать чуть менее четким (эффект размытия), но зато все кнопки и поля останутся на своих местах, предусмотренных разработчиком.
Если «Восстановить положение окна» помогает только на один раз, мы можем автоматизировать этот процесс программно. Рассмотрим пример кода, который можно добавить в модуль формы. Нам нужно принудительно сбрасывать ключ сохранения параметров, чтобы форма каждый раз открывалась «как в первый раз».
В процедуре ПередОткрытием пропишем следующий код:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Принудительно назначаем новый уникальный ключ сохранения положения окна
// Это заставит систему игнорировать старый «кривой» кэш пользователя
КлючСохраненияПоложенияОкна = Новый УникальныйИдентификатор;
// Если нужно, чтобы форма всегда открывалась на весь экран:
ЭтаФорма.СпособОтображенияОкна = ВариантСпособаОтображенияОкна.Максимизированное;
КонецПроцедуры
Использование свойства КлючСохраненияПоложенияОкна эффективно борется с «памятью» формы, которая тянется из настроек пользователя в базе данных.
В конфигураторе у объекта Форма существует важное свойство — «Автомасштабируемость» (Auto-scaling). Проанализируем его влияние:
Попробуйте изменить это значение для проблемной формы. Часто отключение автомасштабируемости возвращает форме предсказуемый вид на больших мониторах.
Помимо кэша файлов на диске (папки Local и Roaming), настройки форм хранятся в самой базе данных. Если форма открывается «криво», значит, там сохранились ошибочные координаты. Выполним глубокую очистку:
После этого при следующем открытии документа 1С заново считает параметры формы из метаданных конфигурации, игнорируя старые ошибки позиционирования.
Важное примечание: Если пользователь работает с двумя мониторами, убедитесь, что основной монитор (Main Display в настройках Windows) — это тот, на котором открывается 1С. Платформа считывает параметры DPI именно с основного экрана в момент инициализации графического интерфейса. Желательно, чтобы на обоих мониторах был установлен одинаковый масштаб DPI (например, 100% на обоих), чтобы избежать хаотичного перемещения элементов при перетаскивании окна между экранами.