При формировании печатных форм и отчетов в системе 1С:Предприятие одной из наиболее частых задач является корректное отображение длинных текстовых строк — в решении подобных задач поможет конструктор печатных форм и макетов без кода. Часто текст не помещается в стандартную ширину колонки, и перед разработчиком встает выбор: либо обрезать данные, либо настроить их отображение в несколько строк с автоматическим расширением ячейки. В рамках данной статьи мы подробно разберем, как программно управлять переносами и высотой строк, изучим объектную модель печатной формы и проанализируем нюансы работы платформы с объектом ТабличныйДокумент, используя практические примеры кода.
Для начала выясним причину, по которой текст в ячейке может отображаться некорректно. По умолчанию в 1С ячейка имеет фиксированные настройки. Если строка текста длиннее ширины ячейки, она либо "наползает" на соседние пустые ячейки (перекрывает их), либо обрезается границей. Чтобы изменить это поведение, мы должны работать со свойством РазмещениеТекста. Для более детального понимания рекомендуем изучить подробное описание работы с текстом в ячейках 1С, включая вопросы форматирования и отступов.
Рассмотрим доступные варианты перечисления ТипРазмещенияТекстаТабличногоДокумента:
Проанализируем ситуацию: если мы хотим, чтобы длинное описание товара или содержание услуги полностью отображалось в отчете, нам критически важно установить именно Автоперенос. Без этой настройки даже при наличии символов переноса строки внутри текста, платформа может отобразить их как странные символы или проигнорировать, если высота строки жестко задана. Для более сложных сценариев визуализации текста также полезно знать, что такое форматированный документ и как его использовать в таблицах.
Иногда нам требуется принудительно разорвать строку в определенном месте, не полагаясь на автоматический алгоритм платформы. Для этого в языке 1С используется системное перечисление Символы. Посмотрим на пример кода, который формирует многострочный текст для параметра макета:
// Формируем текст с явными разделителями
ТекстДляВывода = "Первая строка сообщения" + Символы.ПС + "Вторая строка сообщения";
// Устанавливаем значение в параметр области
ОбластьМакета.Параметры.ТекстСообщения = ТекстДляВывода;
В данном примере Символы.ПС (Перевод Строки) вставляет управляющий символ, который дает понять движку отрисовки ТабличныйДокумент, что здесь начинается новая строка. Эти методы часто применяются, когда требуется продвинутая работа с табличным документом для достижения точного визуального результата. Однако само по себе добавление Символы.ПС не изменит высоту строки в итоговом документе — вы увидите только первую строку, если ячейка имеет стандартную высоту.
Чтобы ячейка "растянулась" под объем вставленного текста, необходимо выполнить комплекс настроек. Разберем этот процесс по шагам. Мы должны воздействовать не только на саму ячейку, но и на всю строку табличного документа.
Шаг 1. Настройка размещения текста. Мы сообщаем системе, что текст нужно переносить. Это можно реализовать как в макете, так и применив программное изменение форм и их элементов при выводе области:
Область = Макет.ПолучитьОбласть("СтрокаДанных");
// Указываем тип размещения текста для конкретной ячейки или всей области
Область.Область("R1C2").РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Автоперенос;
Шаг 2. Включение автовысоты. Теперь нам нужно приказать платформе вычислить необходимую высоту строки в зависимости от контента. Для этого используется свойство АвтоВысотаСтроки.
// Включаем автовысоту для всей области (строки)
Область.АвтоВысотаСтроки = Истина;
Шаг 3. Обработка вывода. Важно помнить, что если вы используете АвтоВысотаСтроки, не следует вручную ограничивать высоту строки свойствами ВысотаСтроки в макете, иначе автоматический расчет может быть проигнорирован или конфликтовать с заданными значениями.
Рассмотрим более сложную ситуацию, которая часто вызывает затруднения у разработчиков. Выясним причину, почему АвтоВысотаСтроки иногда не срабатывает. Самая распространенная проблема — использование объединенных ячеек по горизонтали.
К сожалению, алгоритм автоматического расчета высоты в 1С (особенно в старых версиях платформы или при сложной верстке) не всегда корректно определяет высоту для области, состоящей из нескольких объединенных колонок. Чтобы обойти это ограничение, изучите решение проблем с АвтоВысотаСтроки в объединенных ячейках, где описаны проверенные способы обхода данной особенности. Если вы столкнулись с тем, что текст в объединенной ячейке обрезается, воспользуйтесь следующими рекомендациями:
АвтоВысотаСтроки именно для той строки (индекса R), где находится объединенная ячейка.Область.МинимальнаяВысотаСтроки = 15;.Представим, что нам необходимо создать классический корректный пример внешней печатной формы счета, где описание услуги может занимать от пяти слов до нескольких абзацев. Разберем полный программный цикл вывода такой строки:
// Получаем макет и создаем результирующий табличный документ
Макет = ПолучитьМакет("МакетПечатнойФормы");
ТабДок = Новый ТабличныйДокумент;
// Получаем область строки
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаУслуги");
// Заполняем параметры
ОбластьСтрока.Параметры.НоменклатураНаименование = "Очень длинное наименование услуги, которое " +
"обязательно должно быть перенесено на следующую строку для красоты оформления";
ОбластьСтрока.Параметры.Количество = 1;
ОбластьСтрока.Параметры.Цена = 1500;
// Настраиваем программно свойства ячейки с наименованием
// Допустим, ячейка наименования — это вторая колонка (C2)
ЯчейкаНаименования = ОбластьСтрока.Область(1, 2);
ЯчейкаНаименования.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Автоперенос;
// Устанавливаем автовысоту для всей области вывода
ОбластьСтрока.AutoHeight = True; // Или АвтоВысотаСтроки = Истина;
// Выводим область в итоговый документ
ТабДок.Вывести(ОбластьСтрока);
// Дополнительная настройка: отображение сетки и печать
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать();
Для ускорения процесса тестирования таких макетов отлично подойдет универсальная форма отладки для внешней обработки печатных форм (поможет универсальный инструмент разработчика для отладки и оптимизации макетов), которая позволяет моментально увидеть результат изменений в коде.
При использовании АвтоВысотаСтроки = Истина следует учитывать влияние на производительность. Если в вашем отчете десятки тысяч строк и в каждой включена автовысота, формирование документа может занять значительно больше времени. Подобная оптимизация вывода и оформления больших табличных документов крайне важна, так как системе требуется произвести расчет геометрических параметров каждого текстового блока.
Особого внимания требует верстка документов, где выполняется простая генерация QR и штрихкодов без библиотек — в таких случаях корректная высота строки критична для того, чтобы графический объект не "съехал" и оставался считываемым.
Также стоит упомянуть свойство МаксимальнаяВысотаСтроки. Если вы боитесь, что одна ячейка с гигантским текстом растянет строку на весь лист, вы можете ограничить это расширение. Если текст не влезет даже в максимальную высоту, он будет обрезан, но структура отчета останется читаемой.
Посмотрим, как это задается в коде:
ОбластьСтрока.МаксимальнаяВысотаСтроки = 50; // Высота в пунктах
В завершение отметим, что правильная работа с ТабличныйДокумент требует внимания к деталям. Комбинируя Символы.ПС для ручного форматирования и Автоперенос с АвтоВысотаСтроки для динамического контента, мы можем создавать профессиональные и удобные для пользователя отчеты, которые выглядят аккуратно при любом объеме вводимых данных.