§ 5.1. Авторазмещение: у формы нет координат

Решает платформа, и решает каждый раз заново — в тот момент, когда открывает окно. Места на экране у элемента нет и быть не может: нигде в свойствах поля не записано, что оно стоит во второй строке слева. Записано другое — где элемент стоит в дереве и что ему разрешено. Из этого платформа и собирает экран.

1. Координат нет

Тому, кто рисовал формы в других системах, это место кажется странным, поэтому скажем прямо.

чего нет у элементачто есть вместо
координаты по горизонтали и вертикалиместо в дереве элементов
точного размера в точкахпожелания о ширине и растягивании
привязки к краю окнапринадлежность группе

Мышью тащить можно и в дереве, и по предпросмотру — но платформа при этом меняет не координаты, а место элемента в дереве и его группу. Координат нет и в описании формы, которое уходит на клиента: их просто негде записать.

Элемент не стоит на месте — он стоит в дереве. Место на экране платформа вычисляет при каждом открытии.

2. Почему так сделано

Причина названа ещё в разговоре об управляемых формах, теперь она разворачивается целиком. Одну и ту же форму открывают в разных условиях, и ни одно из них не известно заранее.

что меняетсяпример
клиенттонкий на компьютере, браузер, телефон
размер окнаразвёрнутое на весь экран и половина экрана
настройкимасштаб, размер шрифта
языкподпись «Наименование» и её перевод разной длины

Нарисованная по координатам форма в этих условиях ломается: подпись не помещается, поле уезжает за край. Форма, собранная по правилам, перестраивается — потому что правила не говорят «здесь», они говорят «после этого, внутри этой группы, во всю ширину».

3. Чем управляют вместо координат

Рычагов немного, и все они про правила, а не про точки.

рычагчто задаёт
порядок в деревечто показать раньше, что позже
вложенность в группучто окажется рядом и в какой рамке
растягиваниезанимать ли всё свободное место
положение в группек какому краю группы прижать элемент
ширина и высотапожелание в символах и строках, а не в точках

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

4. «Решай сама» — обычное значение

У свойств размещения есть третье состояние — не «да» и не «нет», а «решай сама», — и у каждого свойства оно записано по-своему.

Растягивать по горизонтали
├── Истина          ← растягивать
├── Ложь            ← не растягивать
└── не задано       ← решает платформа

Ширина
├── число в символах ← пожелание
└── ноль             ← решает платформа

Документация описывает это прямо: у растягивания неопределённое значение означает автоматическое определение, у ширины ту же роль играет ноль, а положение в группе со значением «авто» берётся от родительской группы. Форма, в которой всюду оставлено «решай сама», — не недоделанная: это форма, где разработчик не спорил с платформой без причины.

Незаданное значение — не забытая настройка, а решение доверить выбор платформе.

5. Что из этого следует

Три следствия, которые меняют привычки.

следствиечто это значит на работе
одна форма выглядит по-разномуна широком экране и на узком — разный вид
«подвинь поле правее» не выполнимо буквальнодвигают порядок, группу или растягивание
проверять надо в нескольких размерах окнато, что красиво развёрнутым, может быть тесным

Отсюда правило разбора: увидев на экране странное размещение, ищут не ошибку рисования, а правило — порядок, группу, растягивание. И наоборот: собирая свою форму, задают правила, а проверяют глазами.

6. Ловушка для тех, кто рисовал раньше

Самая частая ошибка новичка с опытом — искать в управляемой форме то, чего в ней нет.

привычкачто делать вместо
тащить элемент в нужную точкутащить его в дереве или на предпросмотре: меняется порядок и группа
задать точный размерразрешить растягивание, задать ширину-пожелание
выровнять по сеткесобрать в группу и положиться на неё

Эта потеря кажется обидной ровно до первого открытия формы на другом экране. Управляемая форма не мешает разработчику — она не даёт испортить чужой экран одним движением мыши. Испортить осознанно, задав неудачные правила, она, конечно, не помешает: об этом вся глава.

7. В Конфигураторе и в Предприятии

Опыт, который показывает авторазмещение в действии.

  1. Откройте карточку товара в Предприятии и растяните окно во всю ширину, потом сожмите до половины. Посмотрите, что стало с полями и подписями.
Здесь будет снимок экранакарточка товара в широком и узком окне рядом
  1. Вернитесь в Конфигуратор, откройте форму элемента «Товаров» и найдите у поля наименования свойства размера и растягивания. Убедитесь, что координат среди них нет.

  2. Разрешите полю «Артикул» растягиваться по горизонтали. Обновите конфигурацию и посмотрите карточку в широком окне.

  3. Верните свойство как было: база серии должна остаться прежней.

  4. Скажите вслух, чем задано положение каждого поля на этой форме. Если в ответе нет слов «порядок», «группа» и «растягивание», посмотрите ещё раз.

Главное в одном абзаце

В управляемой форме у элемента нет координат: место на экране платформа вычисляет при каждом открытии, а разработчик задаёт не точку, а правила — порядок в дереве, вложенность в группу, растягивание, положение в группе и ширину-пожелание. Сделано это потому, что условия открытия неизвестны заранее: клиент, размер окна, масштаб, длина подписей на другом языке. Нарисованная по координатам форма в таких условиях ломается, собранная по правилам — перестраивается. У свойств размещения есть третье состояние — «решай сама»: незаданное растягивание, нулевая ширина; это не забытая настройка, а решение доверить выбор платформе. Отсюда привычки: «подвинь поле правее» выполняется не мышью, а порядком, группой или растягиванием; проверять форму надо в нескольких размерах окна; а разбирая чужую, ищут не ошибку рисования, а правило.


Правила названы, и первое из них — вложенность. Элементы не просто идут друг за другом: они собраны в рамки, и внутри каждой рамки свой порядок. Что такое эта рамка и что она решает?

Контрольные вопросы

  1. Где в управляемой форме записано место элемента на экране?
  2. Почему у элементов нет координат — назовите две причины из условий открытия.
  3. Чем управляют вместо координат? Назовите три рычага.
  4. Что означает незаданное значение у свойств размещения и как оно записано у растягивания и у ширины?
  5. Почему ширина элемента — пожелание, а не точный размер?
  6. Что отвечать на просьбу «подвинь это поле правее»?
  7. Почему форму стоит проверять в разных размерах окна?

Упражнения

По образцу. Откройте список контрагентов в узком и широком окне и опишите, что изменилось в размещении колонок.

Своё: переведите просьбу. Переведите на язык правил: «пусть телефон стоит справа от наименования», «пусть наименование занимает всю ширину», «пусть ИНН будет поуже».

Ловушка: «форма разъехалась». Коллега жалуется: на его ноутбуке карточка выглядит иначе, чем на вашем мониторе, и требует «прибить поля на место». Что вы объясните и что предложите проверить?

Обратный ход. В форме поле стоит во всю ширину окна, а соседнее — узкое. Какими свойствами это могло быть задано?

На чтение. Разработчик задал всем полям формы точную ширину и запретил растягивание. Что случится с этой формой на узком экране и на широком?

Ответы — в конце части.