При разработке интерфейсов на платформе 1С в режиме совместимости 8.3.8 (и ниже) программисты часто сталкиваются с неприятным визуальным эффектом: элементы управления (поля ввода, надписи, кнопки) начинают «прыгать» или смещаться по вертикали относительно друг друга. Особенно это заметно в сложных формах с глубокой вложенностью групп. В этой статье мы подробно разберем, почему возникает эта проблема и какими методами ее можно решить, опираясь на практический опыт разработчиков и технические особенности движка «Такси».
Проанализируем ситуацию с технической стороны. В старых версиях платформы (до 8.3.10) алгоритм расчета высоты элементов в горизонтальных группах работал по принципу «самого высокого соседа». Если в одной строке находятся элементы разных типов — например, ПолеВвода и декорация типа Надпись — платформа может некорректно рассчитать их базовые линии.
Рассмотрим основные факторы влияния:
Объединенная, платформа пытается максимально «схлопнуть» пространство между элементами, что в режиме совместимости 8.3.8 часто приводит к игнорированию стандартных правил выравнивания.Разберем самый эффективный метод, предложенный на практике. Часто разработчики используют структуру: Группа (Горизонтальная) -> Вложенные Группы (Вертикальные). Именно такая схема в режиме 8.3.8 часто дает сбой. Попробуем сделать наоборот.
Пошаговый алгоритм действий:
Группировка в значение Вертикальная.Такой подход заставляет платформу сначала жестко определить границы строк, а уже внутри них распределять элементы по горизонтали. Это минимизирует вероятность накопления ошибки высоты, которая возникает при попытке выровнять две длинные вертикальные колонки («Лево» и «Право») друг относительно друга.
Проанализируем влияние свойства Объединенная. Если ваши элементы сгруппированы в колонки (вертикальные группы), и эти колонки находятся внутри одной горизонтальной группы, проверьте настройки каждой вертикальной группы.
Рекомендация: Снимите флажок Объединенная у вложенных групп «Лево» и «Право». Это вернет стандартные отступы между элементами. Хотя визуально форма может стать чуть шире или выше, это часто «лечит» перекос строк, так как платформа перестает пытаться подогнать элементы вплотную друг к другу, игнорируя их естественную высоту.
Если структурные изменения не помогают, рассмотрим профессиональные хитрости, которые часто применяют опытные разработчики 1С.
Использование пустых декораций:
Если одна из колонок визуально «улетает» вверх из-за разного состава элементов, мы можем «подпереть» ее. Добавим в ту колонку, которая кажется короче, пустую декорацию-надпись без текста. Это создаст дополнительную точку опоры для движка компоновки и поможет выровнять соседние элементы по одной линии.
Настройка высоты декораций:
Декорации-надписи — частый виновник проблем. В режиме 8.3.8 декорация без явно указанной высоты может отличаться от стандартного поля ввода на несколько пикселей. Попробуем жестко зафиксировать параметры:
Высота в значение 1.РастягиватьПоВертикали в значение Нет.Посмотрим на свойства самих групп и элементов. В настройках управляемой формы есть свойство ВыравниваниеПоВертикали. В режиме совместимости 8.3.8 оно работает специфично.
Если у вас горизонтальная группа, попробуйте установить для нее ВыравниваниеПоВертикали в значение Центрировать. Это заставит платформу выравнивать центры полей ввода и надписей по одной горизонтальной оси. Часто это исправляет ситуацию, когда текст в полях ввода и текст в декорациях визуально находятся на разных уровнях, создавая ощущение «сдвига».
Важно учитывать, что проблема может проявляться не у всех пользователей. Рассмотрим влияние настроек операционной системы. В режиме 8.3.8 интерфейс плохо обрабатывает нестандартные масштабы экрана (например, 125% или 150%). Ошибки округления при расчете пикселей накапливаются в сложных структурах групп. Единственный надежный способ борьбы с этим в старых версиях платформы — максимальное упрощение структуры формы и отказ от глубокой вложенности (более 3-4 уровней групп).
Чтобы окончательно решить проблему смещения реквизитов, пройдемся по чек-листу:
Объединенная у вложенных колонок.Высота и РастягиватьПоВертикали у декораций.ВыравниваниеПоВертикали в значение Центрировать для горизонтальных групп.В колонках, который строит более жесткую сетку, хотя и менее гибкую при изменении размеров окна.Помните, что радикальное решение проблемы появилось только в платформе 8.3.10, где механизмы компоновки были полностью переписаны. Если проект позволяет, рассмотрите возможность повышения режима совместимости — это избавит вас от необходимости использовать подобные «интерфейсные костыли».