Почему в печатной форме 1С ячейка с текстом не растягивается по высоте и как это исправить?

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

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

В этой статье мы подробно разберем, почему возникает эта проблема, как вернуть автовысоту строк в конфигураторе и какие скрытые «ловушки» платформы 1С могут блокировать корректное отображение текста.

Причина 1. Фиксированная высота строки в макете (ручное форматирование)

Самая частая причина, по которой автовысота перестает работать, заключается в том, что разработчик случайно или намеренно изменил высоту строки в конфигураторе вручную (например, растянул или сжал строку с помощью мыши).

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

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

  1. Откройте макет вашей печатной формы в конфигураторе.
  2. Найдите строку, в которой находится проблемная ячейка.
  3. Выделите всю строку целиком. Для этого кликните левой кнопкой мыши по ее заголовку (номеру строки) на серой панели слева.
  4. Нажмите правой кнопкой мыши по выделенному номеру строки для вызова контекстного меню.
  5. В открывшемся меню выберите пункт «Высота строк...» (также этот пункт доступен через главное меню: Таблица -> Ячейки -> Высота строк...).
  6. В появившемся диалоговом окне очистите числовое поле ввода (оно должно стать пустым или равным 0) и обязательно установите флажок «Автовысота строки».
  7. Нажмите кнопку «ОК» для сохранения изменений.

После выполнения этих действий платформа сбросит фиксированный формат, и строка начнет динамически растягиваться под объем выводимого текста.

Причина 2. Использование объединенных ячеек

Объединение ячеек — это вторая по популярности «ловушка» в табличных документах 1С, которая полностью ломает стандартные механизмы расчета высоты строк.

Рассмотрим подробнее два сценария объединения ячеек:

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

Горизонтальное объединение: Если ячейки объединены по горизонтали (в пределах одной строки), на стороне 1С автовысота обычно отрабатывает корректно. Однако проблемы начинаются при выгрузке документа во внешние форматы. Если пользователь решит сохранить печатную форму в формате Excel (XLS или XLSX), автовысота в объединенных по горизонтали ячейках «сломается» уже на стороне Microsoft Excel — программа просто скроет невлезающий текст.

Решение проблемы объединения:

Старайтесь полностью избегать объединения ячеек в тех областях макета, куда планируется выводить динамический многострочный текст. Если вам необходимо визуально объединить ячейки по горизонтали (например, для красивого выравнивания длинного описания товара по всей ширине листа), используйте альтернативный механизм:

  1. Выделите несколько ячеек в строке, которые нужно визуально объединить.
  2. Откройте их свойства (клавиша F4).
  3. В свойстве «Выравнивание» (по горизонтали) установите значение «По выделенным колонкам».

При таком подходе ячейки физически остаются разъединенными, автовысота строки продолжает работать идеально, а текст визуально распределяется по всей ширине выделенной области.

Причина 3. Программная установка автовысоты в коде

Если макет печатной формы формируется динамически или вы выводите области программно, настройки конфигуратора могут перекрываться кодом. Чтобы гарантировать корректное поведение ячеек при формировании табличного документа, мы можем явно управлять свойствами высоты строк через встроенный язык 1С.

Проанализируем пример кода, который решает эту задачу:


// Получаем нужную область строки из макета
ОбластьСтрока = ТабДок.Область("R5"); 

// Сбрасываем фиксированную высоту строки (установка в 0 активирует автовысоту)
ОбластьСтрока.ВысотаСтроки = 0; 
ОбластьСтрока.АвтоВысотаСтроки = Истина;

// Для конкретной ячейки внутри строки принудительно задаем перенос текста
ЯчейкаТекста = ТабДок.Область("R5C3");
ЯчейкаТекста.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

Важное примечание: Присвоение свойству ВысотаСтроки значения 0 во встроенном языке 1С автоматически переводит свойство строки АвтоВысотаСтроки в значение Истина. Это самый надежный способ программно сбросить любые ручные изменения размеров строк, внесенные пользователями или разработчиками в макет.

Причина 4. Проблемы с масштабированием, шрифтами и DPI

Бывают ситуации, когда автовысота строки вроде бы сработала, но при выводе на печать или в режиме предварительного просмотра последняя строчка текста все равно слегка подрезается снизу. Это происходит из-за особенностей расчета высоты шрифтов платформой 1С.

Выясним причину этого поведения: алгоритм 1С рассчитывает высоту строки на основе метрик шрифта и драйвера принтера, установленного в операционной системе по умолчанию. Если на компьютере пользователя установлены нестандартные шрифты, изменен масштаб экрана Windows (например, стоит 125% или 150% на 4К мониторах) или в свойствах табличного документа включен АвтоМасштаб, расчет может дать погрешность в несколько пикселей, которых как раз и не хватает для отображения последней строки.

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

  1. Добавление искусственного отступа: При программном заполнении параметра печатной формы добавляйте в самый конец текста символ переноса строки или пробел. Например:
    Область.Параметры.ОписаниеНоменклатуры = Выборка.Описание + Символы.ПС;
    Это заставит платформу рассчитать высоту строки с запасом еще на одну (пустую) строчку, гарантируя, что основной текст не обрежется.
  2. Использование стандартных шрифтов: Используйте в макетах стандартные и наиболее распространенные шрифты (например, Arial или Times New Roman). У них очень простые и предсказуемые метрики высоты, с которыми алгоритмы 1С и драйверы принтеров работают наиболее корректно.
  3. Контроль свойства «АвтоМасштаб»: Если у табличного документа установлено свойство АвтоМасштаб = Истина, платформа пытается уместить документ по ширине страницы. Это может приводить к незначительному пропорциональному искажению высоты строк. Проверьте, сохраняется ли проблема, если временно отключить автоопределение масштаба.
← На главную