При разработке пользовательских интерфейсов в 1С:Предприятие 8.3 разработчики часто сталкиваются с требованием заказчика сделать так, чтобы текстовое поле (например, поле «Комментарий») автоматически меняло свою высоту и увеличивалось прямо при наборе текста. В этой статье разберем поведение элементов управляемой формы, проанализируем ограничения платформы и рассмотрим доступные способы решения задачи.
Выясним, почему стандартными настройками элементов формы не удается добиться динамического расширения высоты поля в реальном времени во время ввода символов:
МногострочныйРежим и АвтоПереносСтрок. Включение этих параметров позволяет пользователю делать переносы строк и автоматически переносить длинный текст. Однако эти флаги влияют только на поведение текста внутри элемента, но не изменяют физическую высоту самого поля на форме.Высота. Динамическое изменение визуальной высоты элемента во время каждого нажатия клавиши вызывает сброс позиции курсора, визуальные рывки формы и задержки отклика платформы.ВариантУправленияВысотой. Автоматическое подстраивание высоты по содержимому (ВариантУправленияВысотой = ПоСодержимому) реализовано платформенно только для табличных частей и таблиц значений, но не применяется к одиночным полям ввода.Посмотрим на пример решения, когда высота текстового поля рассчитывается программно при изменении содержимого реквизита.
Разберем порядок выполнения настройки:
РастягиватьПоВертикали.МногострочныйРежим = Истина и АвтоПереносСтрок = Истина.СтрЧислоСтрок().Рассмотрим пример кода:
// Устанавливаем количество строк элемента формы в зависимости от длины текста
Элементы.ПолеТекстовогоДокумента.Высота = СтрЧислоСтрок(Объект.Комментарий);
Важно: При таком подходе высота элемента будет пересчитываться только после окончания редактирования и смены фокуса поля, а не в режиме реального времени при каждом нажатии клавиши.
Проанализируем альтернативный вариант решения, если необходимо реализовать авторасширение поля непосредственно во время набора текста.
Рассмотрим по шагам концепцию этого решения:
ПолеHTMLДокумента.textarea.oninput и динамически подстраивает высоту элемента в зависимости от параметра scrollHeight.В типовых конфигурациях 1С для удобной работы с длинными текстами применяют проверенные стандартные варианты оформления:
МногострочныйРежим = Истина и устанавливают постоянную высоту (например, 3 или 4 строки). При превышении объема текста справа автоматически появляется вертикальная полоса прокрутки.ВвестиСтроку() с многострочным режимом.