При отображении длинных текстов или реквизитов с типом Строка неограниченной длины в колонках таблицы управляемой формы платформа 1С по умолчанию включает автовысоту. В результате, если текст содержит переносы или не помещается по ширине, строка таблицы сильно растягивается по высоте, что делает интерфейс громоздким и неудобным для работы. Разберем по шагам, как зафиксировать высоту ячеек и сделать так, чтобы текст обрезался в одну строку.
Рассмотрим, почему платформа 1С ведет себя таким образом. При связывании колонки таблицы формы с реквизитом типа Строка неограниченной длины элемент формы «Поле ввода» по умолчанию использует автоматический расчет высоты. Если значение содержит символы переноса строк или длинный текст, платформа увеличивает высоту всей строки таблицы для вывода содержимого.
Проанализируем базовый способ решения задачи непосредственно в конфигураторе:
АвтоВысотаЯчейки = Ложь).1.После этого ячейка зафиксируется в одну строку, а не помещающийся по ширине текст будет аккуратно обрезаться многоточием.
Посмотрим на дополнительное свойство элемента управления. Чтобы запретить полю разбивать текст на несколько строк при наличии внутренних символов переноса, настроим многострочный режим:
Ложь.В этом случае текст будет выводиться strictly в одну строку без учета переносов.
Если данные в колонке таблицы предназначены только для чтения, изменим вид элемента управления:
Поле ввода на Поле надписи (ВидПоляФормы.ПолеНадписи).Поле надписи в таблицах управляемой формы по умолчанию не растягивает строку по высоте, отображая текст в одну строку и обрезая его по ширине колонки.
Если таблица формы получает данные из динамического списка или результата запроса, эффективным решением будет ограничение длины строки на стороне сервера БД. Проанализируем пример использования функций языка запросов 1С:
ВЫБРАТЬ
ПОДСТРОКА(Документ.Описание, 1, 150) КАК ОписаниеСокращенное
ИЗ
Документ.ПриходнаяНакладная КАК Документ
Или с помощью приведения типа с использованием функции ВЫРАЗИТЬ:
ВЫБРАТЬ
ВЫРАЗИТЬ(Документ.Описание КАК СТРОКА(150)) КАК ОписаниеСокращенное
ИЗ
Документ.ПриходнаяНакладная КАК Документ
Этот подход не только устраняет проблемы с отображением высоты строки в интерфейсе, но и оптимизирует объем данных, передаваемых между сервером и клиентом.
Рассмотрим ситуацию, когда пользователю необходимо читать полный текст неограниченной строки, но важно сохранить компактность таблицы. Для этого зафиксируем высоту колонки равной 1, а полное значение выведем в отдельное многострочное поле под таблицей. В событии таблицы ПриАктивизацииСтроки пропишем обновление текста:
&НаКлиенте
Процедура ТаблицаПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элементы.Таблица.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Объект.ПолноеОписание = ТекущиеДанные.Описание;
КонецЕсли;
КонецПроцедуры
Таким образом, мы сохраняем компактный вид таблицы и предоставляем удобный механизм для просмотра подробной информации.