Разработка интерфейсов на управляемых формах иногда преподносит сюрпризы, которые разработчики в шутку называют «мистикой». Типичная ситуация: вы создаете сложную структуру из нескольких горизонтальных и вертикальных групп, выверяете размеры, и в конфигураторе все выглядит идеально. Однако стоит поместить эту структуру внутрь другой группы или запустить форму в режиме предприятия, как элементы «съезжают», заголовки обрезаются, а поля игнорируют заданную ширину. Особенно остро эта проблема проявляется в конфигурациях, работающих в режиме совместимости с платформой 8.3.6 и ниже.
В этой статье мы подробно разберем причины такого поведения интерфейса и рассмотрим проверенные методы решения проблем с версткой, основываясь на особенностях движка компоновки 1С.
Для начала проанализируем ситуацию с технической точки зрения. До версии платформы 8.3.7 в 1С использовался старый алгоритм расчета интерфейса. Его главная особенность заключается в том, что расчет ширины элементов в горизонтальных группах происходит пропорционально их содержимому, а не строго по заданным числам в свойстве Ширина.
Когда мы помещаем сложную группу (состоящую, например, из трех вертикальных подгрупп «Лево», «Центр», «Право») внутрь другой горизонтальной группы, внешняя группа сначала пытается распределить доступное пространство между своими прямыми потомками. Если рядом с нашей сложной группой находится обычная надпись или декорация, система может отдать ей приоритет, «схлопнув» сложную вложенную структуру. В результате внутренние элементы не получают достаточно места, и мы видим обрезанные заголовки и поля ввода.
Одним из штатных механизмов управления сложной версткой является свойство СквозноеВыравнивание. Рассмотрим, как оно работает. Это свойство позволяет выравнивать элементы, находящиеся в разных ветках дерева элементов формы, так, как если бы они находились в одной колонке таблицы.
Попробуем применить этот метод по шагам:
СквозноеВыравнивание — Использовать (или Авто).Важное замечание: в режиме совместимости 8.3.6 это свойство может игнорироваться или работать некорректно, так как полноценная поддержка сквозного выравнивания и свойства Объединенная была оптимизирована в более поздних версиях платформы. Если этот метод не помог, перейдем к более «ручным» способам настройки.
Иногда причина «мистического» поведения кроется в том, как движок формы обсчитывает длину текста в заголовках. Если в одной группе заголовок состоит из одного слова, а в другой — из нескольких с пробелами, система может по-разному рассчитать минимально допустимую ширину этих колонок.
Разберем интересный лайфхак: использование неразрывных пробелов. Если вы заметили, что одна из колонок становится уже других, попробуйте заменить обычные пробелы в заголовках на неразрывные. В коде 1С это соответствует символу Символы.НПП.
Пример программной установки такого заголовка:
Элементы.ГруппаСкидки.Заголовок = "Мои" + Символы.НПП + "Скидки";
Это заставляет систему воспринимать заголовок как единую неразрывную строку, что препятствует автоматическому сужению контейнера группы.
Проанализируем свойство РастягиватьПоГоризонтали. В режиме совместимости 8.3.6 часто возникает конфликт, когда один элемент имеет значение Авто, а другой — Нет. Вложенная группа может «схлопнуться», если ее родитель не имеет четкой установки на растягивание.
Рекомендуется выполнить следующие действия:
РастягиватьПоГоризонтали — Нет.Ширина в символах.Если программные свойства не дают нужного результата, воспользуемся проверенным «костылем» — декорациями-распорками. Этот метод позволяет принудительно задать ширину группы, даже если алгоритм компоновки пытается ее уменьшить.
Рассмотрим алгоритм действий:
Декорация — Надпись.Ширина в конкретное значение (например, 20 или 30 символов).РастягиватьПоГоризонтали — Нет.Такая невидимая декорация создаст жесткий «каркас» внутри группы, который не позволит внешним группам сжать содержимое меньше заданного размера.
Часто верстка «едет» из-за того, что система пытается уместить заголовок слева от поля ввода. В старых версиях платформы ширина заголовка и ширина поля часто конфликтуют при расчете общей ширины группы.
Попробуем изменить стратегию размещения:
ПоложениеЗаголовка в значение Верх для всех элементов внутри группы. Это полностью исключает влияние длины подписи на горизонтальный размер колонки.ШиринаЗаголовка. Установите одинаковое значение этого свойства (например, 15) для всех полей, стоящих друг под другом. Это выровняет их по вертикальной линии и стабилизирует общую ширину группы.Работа с интерфейсом в режиме совместимости 8.3.6 требует от разработчика большего контроля над свойствами элементов. Основное правило — минимизировать автоматизм. Чем меньше свойств установлено в значение Авто, тем предсказуемее будет результат. Использование фиксированной ширины, декораций-распорок и управление сквозным выравниванием позволяют победить «мистику» и добиться стабильного отображения формы на любых мониторах.