Как исправить некорректное отображение элементов и заголовков в сложных группах управляемых форм

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

Разработка интерфейсов на управляемых формах 1С часто преподносит сюрпризы, которые программисты называют «мистикой». Типичная ситуация: вы идеально настроили расположение элементов в одной группе, но стоит переместить эту группу внутрь другой — и вся верстка «сыпется». Заголовки обрезаются, поля ввода сужаются, а элементы смещаются. В этой статье мы подробно разберем, почему так происходит, и выработаем надежную стратегию построения интерфейсов, которые будут работать стабильно на любых версиях платформы.

Анализируем влияние версии платформы и режима совместимости

Первым делом проанализируем техническую подоплеку. Важно понимать, что в версии 8.3.10 произошел качественный скачок: был полностью переработан движок отрисовки форм для интерфейса «Такси». Платформа перешла на использование логических единиц вместо физических пикселей (GDI+), что позволило формам корректно масштабироваться на мониторах с высоким разрешением (High DPI).

Если ваша конфигурация работает в режиме совместимости с версией 8.3.6 или 8.3.7, платформа использует старые алгоритмы расчета координат. Как только вы запускаете ту же форму на платформе 8.3.12 и выше без режима совместимости, вступают в силу новые правила автоматического размещения (Auto-layout). Основная проблема «мистики» в том, что старые методы верстки (жесткие размеры, декорации-надписи) конфликтуют с современным динамическим расчетом размеров.

Отказываемся от использования декораций вместо заголовков

Рассмотрим одну из самых частых ошибок: создание заголовков через элементы типа Декорация — Надпись. Программисты часто прибегают к этому методу, чтобы иметь возможность произвольно размещать текст над полем или слева от него, не ограничиваясь стандартными рамками.

Почему это вредно для верстки:

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

Управление сквозным выравниванием элементов

Выясним причину, по которой нижние группы часто пытаются «втиснуться» в ширину верхних. За это отвечает свойство группы СквозноеВыравнивание. Когда оно включено (значение Использовать), платформа пытается выровнять все поля ввода и их заголовки по единой вертикальной линии внутри всей иерархии групп.

Рассмотрим ситуацию по шагам:

  1. У вас есть верхняя группа с длинными полями.
  2. У вас есть нижняя группа с короткими полями (например, «Скидка» или «Код»).
  3. Если у обеих групп включено сквозное выравнивание, платформа принудительно расширит или сожмет элементы нижней группы, чтобы их границы совпали с верхней.

Чтобы этого избежать, проанализируем настройки свойства Группировка. Если вы хотите разорвать связь между выравниванием верхней и нижней частей формы, поместите их в разные родительские группы и установите у промежуточного родителя свойство СквозноеВыравнивание — Не использовать.

Работа с размерами элементов: Автоматизация против Жесткости

Проанализируем использование свойств Ширина и РастягиватьПоГоризонтали. Использование явных размеров (например, установка ширины в 20 или 30 единиц) — это «костыль», который ломает адаптивность формы. В идеальной управляемой форме почти все размеры должны стоять в значении 0 (автоматически).

Выполним следующие рекомендации для создания ровной формы:

Программное управление видимостью и структурой

Иногда «мистика» проявляется при программном изменении видимости элементов. Если форма «плывет» после вызова ЭтаФорма.Элементы.Группа1.Видимость = Ложь;, это означает, что оставшиеся элементы пытаются пересчитать свои границы в условиях изменившейся иерархии.

Посмотрим на пример кода, который помогает правильно управлять состоянием элементов, не ломая верстку:


// Вместо изменения видимости отдельных элементов, 
// управляйте видимостью всей группы-контейнера
&НаСервере
Процедура НастроитьОтображениеФормы()
    
    // Если нужно скрыть блок полей, скрываем всю группу
    Элементы.ГруппаДополнительныеПоля.Видимость = (Объект.ТипОперации = ПредопределенноеЗначение("Перечисление.ТипыОпераций.Продажа"));
    
    // Для корректного пересчета можно использовать принудительное 
    // обновление отображения (хотя в УФ это происходит автоматически)
    // Но лучше убедиться, что у элементов внутри группы стоит Растягивать = Авто
    
КонецПроцедуры

Чек-лист для исправления «мистических» проблем верстки

Проанализируем вашу форму по следующим пунктам, если она отображается некорректно:

  1. Проверьте свойство «ВариантМасштабирования»: В свойствах самой формы попробуйте переключить его с Авто на Обычный или Компактный. Это может мгновенно решить проблему «съеденных» заголовков.
  2. Удалите фиксированную ширину: Пройдите по всем элементам и сбросьте Ширина и Высота в 0.
  3. Замените декорации: Верните тексту статуса или заголовкам полей их штатное место в свойстве Заголовок самого поля.
  4. Настройте группировку: Убедитесь, что группы не вложены друг в друга сверх меры. Оптимальная вложенность — не более 3-4 уровней.
  5. Проверьте «Растягивать по горизонтали»: Если группа обрезает содержимое, проверьте, не стоит ли у родительской группы РастягиватьПоГоризонтали — Нет при том, что внутренние элементы пытаются расшириться.

Соблюдение этих правил позволит вам создавать профессиональные интерфейсы, которые будут выглядеть одинаково хорошо как на старом мониторе с Windows 7, так и на современном 4K-дисплее в последней версии платформы 1С:Предприятие.

← На главную