Разработчики, работающие с «обычными формами» в 1С:Предприятие 8.3, часто сталкиваются с крайне неприятной ситуацией: при переносе базы с одного компьютера на другой или даже просто при открытии формы в конфигураторе на ноутбуке, все элементы управления «разлетаются». Привязки, которые настраивались часами, внезапно перестают работать, кнопки наезжают друг на друга, а табличные части уходят за границы видимости. Причем это происходит «само по себе» — достаточно просто открыть форму для просмотра.
В этой статье мы подробно разберем, почему так происходит, проанализируем механизмы отрисовки старого движка 1С и найдем пошаговые решения, которые помогут сохранить интерфейс в целости вне зависимости от того, на каком мониторе ведется разработка.
Проанализируем техническую сторону вопроса. Обычные формы 1С проектировались в эпоху, когда стандартным разрешением считалось 96 DPI (соответствует масштабу 100% в настройках Windows). Современные ноутбуки с экранами высокого разрешения (FullHD и выше) по умолчанию используют масштабирование 125%, 150% или даже 200%.
Когда мы открываем форму в конфигураторе на устройстве с 120 DPI (масштаб 125%), платформа пытается «помочь» разработчику и автоматически пересчитывает координаты и размеры элементов (Ширина, Высота, Лево, Верх), чтобы они выглядели соразмерно системным шрифтам. Однако алгоритм пересчета в обычных формах несовершенен. Привязки, которые жестко привязаны к границам элементов, сбиваются из-за ошибок округления пикселей.
Важное правило: Разработку обычных форм рекомендуется выполнять строго в разрешении 96 DPI (100% масштаб). Рассмотрим, как привести рабочее окружение к этому стандарту:
Если мы проигнорируем это правило и сохраним форму, открытую в масштабе 125%, новые некорректные координаты запишутся в метаданные, и форма «поплывет» у всех пользователей.
Если нам неудобно работать во всей системе с масштабом 100% (текст становится слишком мелким), мы можем заставить только конфигуратор 1С работать в режиме «без масштабирования». Проанализируем, как это сделать штатными средствами операционной системы:
C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\1cv8.exe).Теперь, когда мы запустим конфигуратор, интерфейс 1С может выглядеть мелким, но координаты элементов внутри формы будут соответствовать реальным пикселям, и привязки перестанут «слетать».
Выясним причину странного поведения на разных ноутбуках при одинаковых настройках экрана. Исторически сложилось, что в ветке платформы 8.3.10 и 8.3.11 был допущен баг, связанный с отрисовкой графических объектов в режиме обычного приложения. На этих версиях привязки могут вести себя непредсказуемо даже при соблюдении всех условий по DPI.
Разберем рекомендации по обновлению:
В обычных формах существует два режима установки привязок. Посмотрим на них подробнее:
Чтобы минимизировать глюки, проделаем следующие действия для каждого важного элемента формы:
ТабличноеПоле).Разберем ситуацию, когда масштаб в системе 100%, но привязки все равно «плывут». Это может быть связано с тем, что в Windows изменены стандартные размеры шрифтов (например, MS Sans Serif или Tahoma). Обычные формы вычисляют размеры полей ввода, исходя из ширины символов шрифта.
Существует также скрытый параметр в файле conf.cfg, который находится в папке с установленной платформой. Мы можем попробовать принудительно отключить чувствительность к DPI, добавив строку:
AppServerDPIAware=0
Однако помните, что это повлияет на все запущенные сеансы 1С на данном компьютере.
Для закрепления материала проанализируем правильный алгоритм работы с обычными формами при необходимости правок на разных устройствах:
.cf останутся неизменными.Соблюдение этих простых, но строгих правил позволит вам избежать «магического» исчезновения элементов на формах и сохранит нервы вам и вашим коллегам по разработке.