Разработка интерфейсов на управляемых формах 1С часто преподносит сюрпризы, которые программисты называют «мистикой». Типичная ситуация: вы идеально настроили расположение элементов в одной группе, но стоит переместить эту группу внутрь другой — и вся верстка «сыпется». Заголовки обрезаются, поля ввода сужаются, а элементы смещаются. В этой статье мы подробно разберем, почему так происходит, и выработаем надежную стратегию построения интерфейсов, которые будут работать стабильно на любых версиях платформы.
Первым делом проанализируем техническую подоплеку. Важно понимать, что в версии 8.3.10 произошел качественный скачок: был полностью переработан движок отрисовки форм для интерфейса «Такси». Платформа перешла на использование логических единиц вместо физических пикселей (GDI+), что позволило формам корректно масштабироваться на мониторах с высоким разрешением (High DPI).
Если ваша конфигурация работает в режиме совместимости с версией 8.3.6 или 8.3.7, платформа использует старые алгоритмы расчета координат. Как только вы запускаете ту же форму на платформе 8.3.12 и выше без режима совместимости, вступают в силу новые правила автоматического размещения (Auto-layout). Основная проблема «мистики» в том, что старые методы верстки (жесткие размеры, декорации-надписи) конфликтуют с современным динамическим расчетом размеров.
Рассмотрим одну из самых частых ошибок: создание заголовков через элементы типа Декорация — Надпись. Программисты часто прибегают к этому методу, чтобы иметь возможность произвольно размещать текст над полем или слева от него, не ограничиваясь стандартными рамками.
Почему это вредно для верстки:
Решение: Всегда используйте штатное свойство элемента ПоложениеЗаголовка. Если вам нужно, чтобы заголовок был сверху, выберите значение Верх. Если заголовок не нужен совсем — выберите Нет, но не создавайте вместо него отдельную декорацию. Чтобы убрать двоеточие в конце (которое добавляется автоматически), помните, что в новых версиях платформы это поведение зашито в логику интерфейса «Такси», и попытки обойти это через декорации только создадут проблемы с выравниванием.
Выясним причину, по которой нижние группы часто пытаются «втиснуться» в ширину верхних. За это отвечает свойство группы СквозноеВыравнивание. Когда оно включено (значение Использовать), платформа пытается выровнять все поля ввода и их заголовки по единой вертикальной линии внутри всей иерархии групп.
Рассмотрим ситуацию по шагам:
Чтобы этого избежать, проанализируем настройки свойства Группировка. Если вы хотите разорвать связь между выравниванием верхней и нижней частей формы, поместите их в разные родительские группы и установите у промежуточного родителя свойство СквозноеВыравнивание — Не использовать.
Проанализируем использование свойств Ширина и РастягиватьПоГоризонтали. Использование явных размеров (например, установка ширины в 20 или 30 единиц) — это «костыль», который ломает адаптивность формы. В идеальной управляемой форме почти все размеры должны стоять в значении 0 (автоматически).
Выполним следующие рекомендации для создания ровной формы:
РастягиватьПоГоризонтали — Да, а остальные — Нет, то первый заберет себе все свободное место. Если все элементы имеют Авто, платформа распределит место пропорционально их контенту.Иногда «мистика» проявляется при программном изменении видимости элементов. Если форма «плывет» после вызова ЭтаФорма.Элементы.Группа1.Видимость = Ложь;, это означает, что оставшиеся элементы пытаются пересчитать свои границы в условиях изменившейся иерархии.
Посмотрим на пример кода, который помогает правильно управлять состоянием элементов, не ломая верстку:
// Вместо изменения видимости отдельных элементов,
// управляйте видимостью всей группы-контейнера
&НаСервере
Процедура НастроитьОтображениеФормы()
// Если нужно скрыть блок полей, скрываем всю группу
Элементы.ГруппаДополнительныеПоля.Видимость = (Объект.ТипОперации = ПредопределенноеЗначение("Перечисление.ТипыОпераций.Продажа"));
// Для корректного пересчета можно использовать принудительное
// обновление отображения (хотя в УФ это происходит автоматически)
// Но лучше убедиться, что у элементов внутри группы стоит Растягивать = Авто
КонецПроцедуры
Проанализируем вашу форму по следующим пунктам, если она отображается некорректно:
Авто на Обычный или Компактный. Это может мгновенно решить проблему «съеденных» заголовков.Ширина и Высота в 0.Заголовок самого поля.РастягиватьПоГоризонтали — Нет при том, что внутренние элементы пытаются расшириться.Соблюдение этих правил позволит вам создавать профессиональные интерфейсы, которые будут выглядеть одинаково хорошо как на старом мониторе с Windows 7, так и на современном 4K-дисплее в последней версии платформы 1С:Предприятие.