При разработке интерфейсов на управляемых формах программисты часто сталкиваются с тем, что длинный текст в ячейках табличной части обрезается, не помещаясь по ширине. Стандартное поведение таблицы — фиксированная высота строки, что не всегда удобно для пользователя, которому важно видеть содержимое целиком без лишних кликов. В этой статье мы подробно разберем, как заставить строки таблицы «растягиваться» под объем введенного текста.
Для того чтобы реализовать автоматический перенос текста и соответствующее увеличение высоты строки, нам необходимо поработать со свойствами конкретных колонок таблицы. Рассмотрим пошагово, какие изменения нужно внести в конфигураторе:
Таблица.Поле), в которой предполагается наличие длинного текста.Проанализируем ситуацию с количеством колонок: достаточно ли настроить одну колонку или нужно менять свойства у всех? Практика показывает, что если хотя бы одна ячейка в строке увеличивается по вертикали, то и вся строка целиком растягивается. Однако для корректного отображения и избегания визуальных артефактов рекомендуется включать эти опции во всех колонках, где текст потенциально может не поместиться в одну строку.
Рассмотрим подробнее свойство ВысотаСтроки. В обсуждениях часто встречается совет устанавливать значение 999. Давайте выясним причину этой рекомендации и современные альтернативы.
В старых релизах платформы установка значения 999 была своего рода «хаком», который заставлял систему игнорировать любые ограничения и растягивать строку на максимум. Однако в современных версиях (начиная с 8.3.15 и выше) поведение оптимизировано:
Иногда настройки в конфигураторе недостаточно, и требуется управлять поведением таблицы из кода, например, в зависимости от прав пользователя или вида документа. Рассмотрим пример кода, который устанавливает эти свойства программно:
// Пример настройки колонки "Комментарий" при создании формы на сервере
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементКолонка = Элементы.СписокНоменклатурыКомментарий;
ЭлементКолонка.МногострочныйРежим = Истина;
ЭлементКолонка.АвтоВысотаЯчейки = Истина;
// Устанавливаем высоту строки для всей таблицы
Элементы.СписокНоменклатуры.ВысотаСтроки = 0;
КонецПроцедуры
Выясним причину, по которой не стоит включать автовысоту для всех таблиц подряд. Динамический расчет высоты — это ресурсозатратная операция для графической подсистемы платформы.
Производительность: Когда вы листаете таблицу, в которой каждая строка имеет разную высоту, 1С приходится «на лету» вычислять размер каждой ячейки перед отрисовкой. В списках с десятками тысяч записей это может привести к заметным задержкам (фризам) при прокрутке.
Эффект «прыгающего» скролла: Проанализируем ситуацию с полосой прокрутки. Платформа 1С не знает точную высоту всех строк в базе данных, пока они не отрисованы на экране. Поэтому ползунок прокрутки может менять свой размер и положение («прыгать») в процессе скроллинга, так как система узнает реальную высоту новых порций данных. Это может раздражать пользователей, привыкших к плавному перемещению.
Важно помнить, что автовысота работает корректно только при соблюдении определенных условий:
Поле с видом Поле ввода. Если вы используете Поле надписи, убедитесь, что в его свойствах также разрешен перенос строк.РастягиватьПоВертикали выключено, то при расширении строк внутри таблицы может просто появиться дополнительная полоса прокрутки, что неудобно.Подводя итог, можно сказать, что комбинация свойств Многострочный режим = Да, Автовысота ячейки = Истина и Высота строки = 0 является наиболее эффективным и современным способом решения задачи. Однако применять его стоит осознанно, только для тех колонок, где это действительно необходимо для удобства работы пользователя.