В процессе разработки отчетов и экранных форм в системе 1С:Предприятие часто возникает задача корректного отображения длинных строк, например, полных имен сотрудников или наименований должностей. Если текст не помещается по ширине, стандартное поведение системы может просто обрезать его или скрыть за границами ячейки. В этой статье мы подробно разберем, как заставить систему автоматически переносить текст на новую строку и увеличивать высоту ячейки, а также выясним, почему стандартные методы не всегда работают в обычных формах.
Для начала проанализируем ситуацию, с которой сталкиваются разработчики при работе с «обычными» формами (типично для 1С 8.2 и старых конфигураций 8.3). Когда мы выводим результат запроса в объект типа ТаблицаЗначений, который отображается на форме через элемент управления ТабличноеПоле, мы сталкиваемся с архитектурным ограничением платформы. В этом элементе управления все строки имеют одинаковую высоту.
Рассмотрим пример кода, который часто используется для вывода данных:
Запрос = Новый Запрос("ВЫБРАТЬ Пользователь, Должность ИЗ РегистрСведений.МобильныеТелефоны.СрезПоследних");
Результат = Запрос.Выполнить().Выгрузить();
ТабличноеПоле1 = Результат.Скопировать();
// Данные выведены в таблицу на форме
Даже если в свойствах колонки «Должность» установить флаг МногострочныйРежим, желаемого эффекта (автоматического расширения строки вниз) не будет. Текст действительно может начать переноситься внутри, но вы увидите только его первую часть, так как высота строки жестко задана свойством ВысотаСтроки для всей таблицы целиком. Изменение высоты одной конкретной строки программно или интерактивно невозможно без изменения высоты всех остальных строк.
Выясним причину, по которой опытные разработчики рекомендуют использовать ПолеТабличногоДокумента вместо обычного табличного поля. В отличие от списка значений, табличный документ — это полноценный редактор (аналог электронных таблиц), где каждая ячейка и каждая строка могут иметь индивидуальные настройки оформления.
Для того чтобы реализовать автоперенос с динамической высотой в табличном документе, выполним следующие шаги:
РазмещениеТекста в значение Переносить. Это заставляет систему не обрезать текст, а искать место на следующей строке внутри той же ячейки.АвтоВысотаСтроки в значение Истина. Это критически важный параметр, который приказывает платформе пересчитывать вертикальный размер строки в зависимости от объема содержимого.Посмотрим на пример программной настройки ячейки при выводе данных в табличный документ:
Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Должность = "Очень длинное наименование должности, которое не поместится в одну строку";
// Настройка переноса
Область.Область().РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
// Включаем автоматический расчет высоты для текущей строки
Область.Область().АвтоВысотаСтроки = Истина;
ТабДок.Вывести(Область);
Теперь рассмотрим современный подход. В управляемом интерфейсе возможности элемента Таблица (связанного с динамическим списком или данными формы) были расширены. Здесь появилось долгожданное свойство Автовысота строки (AutoRowHeight).
Проанализируем алгоритм настройки в конфигураторе:
Важное замечание: Использование автовысоты в списках с тысячами строк может привести к замедлению отрисовки интерфейса («тормозам» при скроллинге), так как серверу или клиенту необходимо динамически вычислять высоту каждого элемента. Рекомендуется использовать эту опцию только там, где это действительно необходимо для читаемости данных.
Если ваш отчет строится на базе СКД, то управлять переносом строк лучше всего через Условное оформление. Это позволяет избежать написания лишнего кода и сохранить гибкость настроек.
Разберем по шагам, как это сделать:
Размещение и установим его в значение Переносить.При таком подходе платформа 1С самостоятельно позаботится о расчете высоты строк в результирующем табличном документе отчета.
Иногда, даже при включении всех параметров, текст кажется «обрезанным» или, наоборот, ячейка становится слишком высокой. Проанализируем ситуацию с оформлением текста. На расчет высоты влияют:
Arial или MS Sans Serif.ВысотаЯчейки в фиксированное значение. Если оно установлено, система будет использовать его как приоритетное, игнорируя автовысоту.Таким образом, для достижения идеального результата в табличном документе следует комбинировать программную установку АвтоВысотаСтроки = Истина и проверку визуальных параметров макета. Помните, что корректный автоперенос — это всегда сочетание трех факторов: разрешенного переноса, фиксированной ширины и автоматического определения высоты.