§ 5.1. Авторазмещение: у формы нет координат
Решает платформа, и решает каждый раз заново — в тот момент, когда открывает окно. Места на экране у элемента нет и быть не может: нигде в свойствах поля не записано, что оно стоит во второй строке слева. Записано другое — где элемент стоит в дереве и что ему разрешено. Из этого платформа и собирает экран.
1. Координат нет
Тому, кто рисовал формы в других системах, это место кажется странным, поэтому скажем прямо.
| чего нет у элемента | что есть вместо |
|---|---|
| координаты по горизонтали и вертикали | место в дереве элементов |
| точного размера в точках | пожелания о ширине и растягивании |
| привязки к краю окна | принадлежность группе |
Мышью тащить можно и в дереве, и по предпросмотру — но платформа при этом меняет не координаты, а место элемента в дереве и его группу. Координат нет и в описании формы, которое уходит на клиента: их просто негде записать.
Элемент не стоит на месте — он стоит в дереве. Место на экране платформа вычисляет при каждом открытии.
2. Почему так сделано
Причина названа ещё в разговоре об управляемых формах, теперь она разворачивается целиком. Одну и ту же форму открывают в разных условиях, и ни одно из них не известно заранее.
| что меняется | пример |
|---|---|
| клиент | тонкий на компьютере, браузер, телефон |
| размер окна | развёрнутое на весь экран и половина экрана |
| настройки | масштаб, размер шрифта |
| язык | подпись «Наименование» и её перевод разной длины |
Нарисованная по координатам форма в этих условиях ломается: подпись не помещается, поле уезжает за край. Форма, собранная по правилам, перестраивается — потому что правила не говорят «здесь», они говорят «после этого, внутри этой группы, во всю ширину».
3. Чем управляют вместо координат
Рычагов немного, и все они про правила, а не про точки.
| рычаг | что задаёт |
|---|---|
| порядок в дереве | что показать раньше, что позже |
| вложенность в группу | что окажется рядом и в какой рамке |
| растягивание | занимать ли всё свободное место |
| положение в группе | к какому краю группы прижать элемент |
| ширина и высота | пожелание в символах и строках, а не в точках |
Слово «пожелание» здесь не смягчение. Документация говорит о ширине поля ввода так: задаётся в символах, используется при расчёте макета формы, ноль — автоматическое определение. Высота считается строками. Пожелание — потому что платформа взвешивает его против других пожеланий и против свободного места: если места мало, поле будет сжато, если много и растягивание разрешено — раздаст свободное. Точного «шестьсот точек» в управляемой форме не бывает, и положение в группе — тоже правило выравнивания, а не смещение от угла.
4. «Решай сама» — обычное значение
У свойств размещения есть третье состояние — не «да» и не «нет», а «решай сама», — и у каждого свойства оно записано по-своему.
Растягивать по горизонтали
├── Истина ← растягивать
├── Ложь ← не растягивать
└── не задано ← решает платформа
Ширина
├── число в символах ← пожелание
└── ноль ← решает платформа
Документация описывает это прямо: у растягивания неопределённое значение означает автоматическое определение, у ширины ту же роль играет ноль, а положение в группе со значением «авто» берётся от родительской группы. Форма, в которой всюду оставлено «решай сама», — не недоделанная: это форма, где разработчик не спорил с платформой без причины.
Незаданное значение — не забытая настройка, а решение доверить выбор платформе.
5. Что из этого следует
Три следствия, которые меняют привычки.
| следствие | что это значит на работе |
|---|---|
| одна форма выглядит по-разному | на широком экране и на узком — разный вид |
| «подвинь поле правее» не выполнимо буквально | двигают порядок, группу или растягивание |
| проверять надо в нескольких размерах окна | то, что красиво развёрнутым, может быть тесным |
Отсюда правило разбора: увидев на экране странное размещение, ищут не ошибку рисования, а правило — порядок, группу, растягивание. И наоборот: собирая свою форму, задают правила, а проверяют глазами.
6. Ловушка для тех, кто рисовал раньше
Самая частая ошибка новичка с опытом — искать в управляемой форме то, чего в ней нет.
| привычка | что делать вместо |
|---|---|
| тащить элемент в нужную точку | тащить его в дереве или на предпросмотре: меняется порядок и группа |
| задать точный размер | разрешить растягивание, задать ширину-пожелание |
| выровнять по сетке | собрать в группу и положиться на неё |
Эта потеря кажется обидной ровно до первого открытия формы на другом экране. Управляемая форма не мешает разработчику — она не даёт испортить чужой экран одним движением мыши. Испортить осознанно, задав неудачные правила, она, конечно, не помешает: об этом вся глава.
7. В Конфигураторе и в Предприятии
Опыт, который показывает авторазмещение в действии.
- Откройте карточку товара в Предприятии и растяните окно во всю ширину, потом сожмите до половины. Посмотрите, что стало с полями и подписями.
-
Вернитесь в Конфигуратор, откройте форму элемента «Товаров» и найдите у поля наименования свойства размера и растягивания. Убедитесь, что координат среди них нет.
-
Разрешите полю «Артикул» растягиваться по горизонтали. Обновите конфигурацию и посмотрите карточку в широком окне.
-
Верните свойство как было: база серии должна остаться прежней.
-
Скажите вслух, чем задано положение каждого поля на этой форме. Если в ответе нет слов «порядок», «группа» и «растягивание», посмотрите ещё раз.
Главное в одном абзаце
В управляемой форме у элемента нет координат: место на экране платформа вычисляет при каждом открытии, а разработчик задаёт не точку, а правила — порядок в дереве, вложенность в группу, растягивание, положение в группе и ширину-пожелание. Сделано это потому, что условия открытия неизвестны заранее: клиент, размер окна, масштаб, длина подписей на другом языке. Нарисованная по координатам форма в таких условиях ломается, собранная по правилам — перестраивается. У свойств размещения есть третье состояние — «решай сама»: незаданное растягивание, нулевая ширина; это не забытая настройка, а решение доверить выбор платформе. Отсюда привычки: «подвинь поле правее» выполняется не мышью, а порядком, группой или растягиванием; проверять форму надо в нескольких размерах окна; а разбирая чужую, ищут не ошибку рисования, а правило.
Правила названы, и первое из них — вложенность. Элементы не просто идут друг за другом: они собраны в рамки, и внутри каждой рамки свой порядок. Что такое эта рамка и что она решает?
Контрольные вопросы
- Где в управляемой форме записано место элемента на экране?
- Почему у элементов нет координат — назовите две причины из условий открытия.
- Чем управляют вместо координат? Назовите три рычага.
- Что означает незаданное значение у свойств размещения и как оно записано у растягивания и у ширины?
- Почему ширина элемента — пожелание, а не точный размер?
- Что отвечать на просьбу «подвинь это поле правее»?
- Почему форму стоит проверять в разных размерах окна?
Упражнения
По образцу. Откройте список контрагентов в узком и широком окне и опишите, что изменилось в размещении колонок.
Своё: переведите просьбу. Переведите на язык правил: «пусть телефон стоит справа от наименования», «пусть наименование занимает всю ширину», «пусть ИНН будет поуже».
Ловушка: «форма разъехалась». Коллега жалуется: на его ноутбуке карточка выглядит иначе, чем на вашем мониторе, и требует «прибить поля на место». Что вы объясните и что предложите проверить?
Обратный ход. В форме поле стоит во всю ширину окна, а соседнее — узкое. Какими свойствами это могло быть задано?
На чтение. Разработчик задал всем полям формы точную ширину и запретил растягивание. Что случится с этой формой на узком экране и на широком?
Ответы — в конце части.