При разработке интерфейсов на платформе 1С:Предприятие 8.3 разработчики часто сталкиваются с особенностями автоматического расчета геометрии управляемых форм. Типичный сценарий: в шапке документа расположены две колонки с реквизитами, скомпонованные в вертикальные группы. При попытке добавить рядом третью колонку с высоким элементом — например, полем картинки — в соседних группах неконтролируемо увеличиваются межстрочные интервалы, из-за чего реквизиты визуально разъезжаются по вертикали.
Проанализируем причины такого поведения платформы и разберем практические способы решения этой задачи.
В управляемых формах 1С полностью отсутствует возможность жесткого позиционирования элементов по пиксельным координатам. Разметка строится по принципу адаптивного потока контейнеров, где платформа вычисляет размеры автоматически:
СквозноеВыравнивание, платформа также пытается сопоставить вертикальные координаты строк в разных подгруппах, что только усиливает паразитное растягивание.Рассмотрим вариант решения, предложенный в обсуждении темы. Если стандартная иерархия формы приводит к искажению геометрии, эффективным решением становится вынесение колонок в отдельную горизонтальную группу.
Разберем по шагам, как настроить структуру элементов:
Группировка в значение Горизонтальная если возможно или Горизонтальная.ШапкаЛево и ШапкаПраво), а также группу с полем картинки.ОтображениеУправления стояло в значении Нет, а свойство ОтображатьЗаголовок было отключено, чтобы группа оставалась визуально невидимой для пользователя.Благодаря созданию явного промежуточного контейнера платформа изолирует внутренний расчет высот колонок от внешних групп формы, возвращая полям стандартные компактные интервалы.
Выясним причину растягивания на уровне свойств самих колонок и устраним проблему без изменения структуры дерева элементов. Если не требуется создавать новые группы, скорректируем поведение существующих контейнеров:
ВертикальноеВыравнивание. По умолчанию он установлен в значение Авто. Меняем его на Верх. Элементы внутри группы плотно прижмутся к верхней границе, а межстрочные интервалы вернутся к стандартным значениям.РастягиватьПоВертикали переключаем значение с Авто на Ложь. Это явно запретит контейнеру с полями ввода занимать всю доступную высоту соседней колонки с картинкой.СквозноеВыравнивание. Устанавливаем его в значение Не использовать, чтобы платформенный механизм не раздвигал строки принудительно.Часто причиной искажения формы становится то, что само поле картинки не имеет ограничений по высоте и раздувает всю горизонтальную линию. Настроим свойства самого проблемного элемента:
РастягиватьПоВертикали (устанавливаем в Ложь).АвтоМаксимальнаяВысота и явно задаем значение в свойстве МаксимальнаяВысота (или указываем фиксированную Высота в строках).РазмерКартинки выбираем вариант Пропорционально или Реальный размер, чтобы картинка не пыталась бесконечно растягивать контейнер формы.Если требуется, чтобы сама группа с реквизитами всё же растягивалась по высоте синхронно с картинкой, но строки полей ввода оставались плотно прижатыми друг к другу, применим классический прием с компенсатором пространства:
Заголовок у декорации, чтобы она не содержала текста.РастягиватьПоВертикали в значение Истина.Посмотрим на результат: декорация заберет на себя всю избыточную высоту вертикальной колонки, а поля ввода сверху сохранят компактное расположение со стандартным расстоянием между строками.