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

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

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

Проблема фиксированной высоты в обычных формах

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

Рассмотрим пример кода, который часто используется для вывода данных:


Запрос = Новый Запрос("ВЫБРАТЬ Пользователь, Должность ИЗ РегистрСведений.МобильныеТелефоны.СрезПоследних");
Результат = Запрос.Выполнить().Выгрузить();
ТабличноеПоле1 = Результат.Скопировать();
// Данные выведены в таблицу на форме

Даже если в свойствах колонки «Должность» установить флаг МногострочныйРежим, желаемого эффекта (автоматического расширения строки вниз) не будет. Текст действительно может начать переноситься внутри, но вы увидите только его первую часть, так как высота строки жестко задана свойством ВысотаСтроки для всей таблицы целиком. Изменение высоты одной конкретной строки программно или интерактивно невозможно без изменения высоты всех остальных строк.

Решение через Поле табличного документа

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

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

  1. Установим в свойствах конкретной ячейки или области параметр РазмещениеТекста в значение Переносить. Это заставляет систему не обрезать текст, а искать место на следующей строке внутри той же ячейки.
  2. Установим свойство строки АвтоВысотаСтроки в значение Истина. Это критически важный параметр, который приказывает платформе пересчитывать вертикальный размер строки в зависимости от объема содержимого.
  3. Зададим фиксированную Ширину колонки. Если ширина будет установлена в «Авто», система может бесконечно растягивать колонку вширь, и перенос строки просто не сработает.

Посмотрим на пример программной настройки ячейки при выводе данных в табличный документ:


Область = Макет.ПолучитьОбласть("Строка");
Область.Параметры.Должность = "Очень длинное наименование должности, которое не поместится в одну строку";
// Настройка переноса
Область.Область().РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
// Включаем автоматический расчет высоты для текущей строки
Область.Область().АвтоВысотаСтроки = Истина;
ТабДок.Вывести(Область);

Особенности работы в Управляемых формах (1С 8.3)

Теперь рассмотрим современный подход. В управляемом интерфейсе возможности элемента Таблица (связанного с динамическим списком или данными формы) были расширены. Здесь появилось долгожданное свойство Автовысота строки (AutoRowHeight).

Проанализируем алгоритм настройки в конфигураторе:

  1. Выберем элемент «Таблица» в дереве элементов формы.
  2. В палитре свойств найдем раздел «Оформление» и установим флаг Автовысота строки.
  3. Затем выберем конкретную колонку этой таблицы.
  4. В свойстве РазмещениеТекста выберем значение Переносить.

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

Настройка через Систему компоновки данных (СКД)

Если ваш отчет строится на базе СКД, то управлять переносом строк лучше всего через Условное оформление. Это позволяет избежать написания лишнего кода и сохранить гибкость настроек.

Разберем по шагам, как это сделать:

  1. Откроем вкладку «Настройки» в схеме компоновки данных.
  2. Перейдем на закладку «Условное оформление».
  3. Добавим новый элемент оформления. В поле «Оформление» найдем параметр Размещение и установим его в значение Переносить.
  4. В поле «Условие» ничего не указываем (если нужно применять ко всем строкам) или задаем критерий.
  5. В поле «Оформляемые поля» выберем нужные колонки (например, «ФИО» или «Комментарий»).

При таком подходе платформа 1С самостоятельно позаботится о расчете высоты строк в результирующем табличном документе отчета.

Влияние шрифтов и межстрочных интервалов

Иногда, даже при включении всех параметров, текст кажется «обрезанным» или, наоборот, ячейка становится слишком высокой. Проанализируем ситуацию с оформлением текста. На расчет высоты влияют:

Таким образом, для достижения идеального результата в табличном документе следует комбинировать программную установку АвтоВысотаСтроки = Истина и проверку визуальных параметров макета. Помните, что корректный автоперенос — это всегда сочетание трех факторов: разрешенного переноса, фиксированной ширины и автоматического определения высоты.

← На главную