Как сделать автоматически расширяемое поле ввода на управляемой форме 1С 8.3?

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

При разработке пользовательских интерфейсов в 1С:Предприятие 8.3 разработчики часто сталкиваются с требованием заказчика сделать так, чтобы текстовое поле (например, поле «Комментарий») автоматически меняло свою высоту и увеличивалось прямо при наборе текста. В этой статье разберем поведение элементов управляемой формы, проанализируем ограничения платформы и рассмотрим доступные способы решения задачи.

Ограничения стандартного поля ввода платформы 1С

Выясним, почему стандартными настройками элементов формы не удается добиться динамического расширения высоты поля в реальном времени во время ввода символов:

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

Вариант 1. Программное изменение высоты поля по количеству строк

Посмотрим на пример решения, когда высота текстового поля рассчитывается программно при изменении содержимого реквизита.

Разберем порядок выполнения настройки:

  1. В свойствах элемента формы снимаем флажок РастягиватьПоВертикали.
  2. Убеждаемся, что для элемента установлены свойства МногострочныйРежим = Истина и АвтоПереносСтрок = Истина.
  3. В обработчике события изменения значения реквизита пересчитываем высоту с помощью функции СтрЧислоСтрок().

Рассмотрим пример кода:


// Устанавливаем количество строк элемента формы в зависимости от длины текста
Элементы.ПолеТекстовогоДокумента.Высота = СтрЧислоСтрок(Объект.Комментарий);

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

Вариант 2. Использование поля HTML-документа и JavaScript

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

Рассмотрим по шагам концепцию этого решения:

  1. Размещаем на управляемой форме элемент ПолеHTMLДокумента.
  2. Загружаем в поле HTML-код с тегом textarea.
  3. Используем скрипт JavaScript, который обрабатывает событие oninput и динамически подстраивает высоту элемента в зависимости от параметра scrollHeight.
  4. Настраиваем передачу введенного текста из HTML-страницы в реквизит формы 1С.

Вариант 3. Стандартные альтернативные решения

В типовых конфигурациях 1С для удобной работы с длинными текстами применяют проверенные стандартные варианты оформления:

  1. Фиксированное многострочное поле с полосой прокрутки. Для поля задают МногострочныйРежим = Истина и устанавливают постоянную высоту (например, 3 или 4 строки). При превышении объема текста справа автоматически появляется вертикальная полоса прокрутки.
  2. Ввод текста в отдельном диалоговом окне. На самой форме оставляют однострочное поле, а полный текст вводят с помощью встроенной кнопки открытия или вызова функции ВвестиСтроку() с многострочным режимом.
← На главную