Как настроить автоматическую высоту строк в табличной части управляемой формы 1С?

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

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

Базовый алгоритм настройки динамической высоты

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

  1. Откройте нужную управляемую форму и выберите элемент формы типа Таблица.
  2. Перейдите к свойствам конкретной колонки (элемента типа Поле), в которой предполагается наличие длинного текста.
  3. Найдите свойство Многострочный режим и установите его в значение Да. Это позволит платформе переносить текст на новые строки внутри ячейки.
  4. Установите флажок (галочку) в поле Автовысота ячейки. Именно этот параметр отвечает за то, что ячейка будет пытаться подстроиться под содержимое.
  5. Настройте свойство Высота строки. Здесь есть важный нюанс, зависящий от версии платформы и желаемого эффекта.

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

Тонкости настройки свойства «Высота строки»

Рассмотрим подробнее свойство ВысотаСтроки. В обсуждениях часто встречается совет устанавливать значение 999. Давайте выясним причину этой рекомендации и современные альтернативы.

В старых релизах платформы установка значения 999 была своего рода «хаком», который заставлял систему игнорировать любые ограничения и растягивать строку на максимум. Однако в современных версиях (начиная с 8.3.15 и выше) поведение оптимизировано:

Программное управление высотой

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


// Пример настройки колонки "Комментарий" при создании формы на сервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЭлементКолонка = Элементы.СписокНоменклатурыКомментарий;
    ЭлементКолонка.МногострочныйРежим = Истина;
    ЭлементКолонка.АвтоВысотаЯчейки = Истина;
    
    // Устанавливаем высоту строки для всей таблицы
    Элементы.СписокНоменклатуры.ВысотаСтроки = 0; 
    
КонецПроцедуры

Влияние на производительность и UX

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

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

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

Ограничения и важные условия

Важно помнить, что автовысота работает корректно только при соблюдении определенных условий:

  1. Тип элемента управления: Настройки переноса строк и автовысоты применяются к элементу Поле с видом Поле ввода. Если вы используете Поле надписи, убедитесь, что в его свойствах также разрешен перенос строк.
  2. Растягивание по вертикали: Проверьте свойства самой таблицы и групп, в которые она входит. Если для таблицы установлено жесткое ограничение высоты в пикселях или строках, а свойство РастягиватьПоВертикали выключено, то при расширении строк внутри таблицы может просто появиться дополнительная полоса прокрутки, что неудобно.
  3. Фиксированные колонки: Если в вашей таблице есть зафиксированные области (например, артикул и наименование всегда видны слева), в старых релизах 8.3 могли возникать проблемы с синхронизацией высоты между фиксированной и основной частями. В актуальных версиях платформы эта проблема устранена, но при обнаружении визуальных «лесенок» стоит обновить платформу.

Подводя итог, можно сказать, что комбинация свойств Многострочный режим = Да, Автовысота ячейки = Истина и Высота строки = 0 является наиболее эффективным и современным способом решения задачи. Однако применять его стоит осознанно, только для тех колонок, где это действительно необходимо для удобства работы пользователя.

← На главную