Как сделать, чтобы высота элемента в 1С зависела от объема текста?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов для мобильного клиента 1С мы часто сталкиваемся с задачей адаптации внешнего вида формы под разный объем контента. Одной из наиболее частых проблем является необходимость изменения высоты элемента Декорация (надпись) в зависимости от того, сколько строк текста в нем содержится. Давайте разберем, почему стандартные свойства не всегда работают так, как мы ожидаем, и какие существуют способы решения этой задачи.

Понимание ограничений элемента «Декорация»

На текущий момент в платформе 1С стандартная Декорация с видом Надпись не обладает встроенным механизмом автоматического изменения высоты («резиновой» верстки) на уровне свойств. Даже при включении параметров АвтоМаксимальнаяВысота или попытке принудительно задать Высота = 0, поведение элемента остается труднопредсказуемым. Платформа стремится зафиксировать сетку формы для оптимизации отрисовки, особенно на мобильных устройствах, что часто приводит либо к усечению текста, либо к появлению лишних пустых пространств.

Мы проанализировали ситуацию и выяснили, что попытки «подгонять» размер через проверку СтрДлина также малоэффективны. Дело в том, что ширина символов в шрифтах переменная (например, буква «Ш» значительно шире буквы «i»), поэтому строгая зависимость длины строки от количества символов не даст точного результата.

Решение 1: Использование «Поля ввода» в режиме только для просмотра

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

Для того чтобы Поле ввода работало как адаптивная надпись, выполним следующие настройки:

  1. Установим свойство Вид в значение Поле ввода.
  2. Включим свойство РежимВыводаМногострочногоТекста в значение Истина.
  3. Для запрета редактирования установим свойство ТолькоПросмотр в значение Истина.
  4. Настроим свойство РастягиватьПоВертикали в значение Истина.

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

Решение 2: Применение «Поля HTML-документа»

Если дизайн требует более сложного форматирования текста (например, использование различных шрифтов или выделение жирным внутри одного блока) и идеального соблюдения высоты, мы рекомендуем использовать Поле HTML-документа.

Данный элемент использует движок браузера, встроенный в мобильную платформу 1С, поэтому расчет геометрии блоков происходит автоматически и максимально корректно. Рассмотрим пример того, как мы можем программно передать данные в такой элемент:


// Пример формирования HTML для вывода в ПолеHTMLДокумента
ТекстHTML = "
|<html>
|<body style='font-family: sans-serif; font-size: 14px;'>
|<div>" + Форма[ИмяВопроса + "_Формулировка"] + "</div>
|</body>
|</html>";
Элементы.ИмяВашегоПоляHTML.УстановитьТекст(ТекстHTML);

Использование этого метода позволяет полностью делегировать расчет высоты платформе. Мы избавляемся от необходимости «угадывать» размер или ограничивать количество строк вручную.

Оптимизация структуры формы

Помимо выбора правильного элемента, важно помнить о настройках Группа формы. Если ваш элемент помещен в группу, проверьте настройки самой группы:

Подводя итог, можно сказать, что хотя стандартная Декорация ограничена в возможностях автовысоты, использование Поля ввода в режиме ТолькоПросмотр или Поля HTML-документа позволяет достичь желаемого результата. Мы рекомендуем остановиться на Поле ввода для простых текстовых блоков и Поле HTML-документа для задач, требующих высокой гибкости отображения.

← На главную