При разработке и настройке печатных форм в платформе 1С разработчики часто сталкиваются с ситуацией, когда длинное или многострочное наименование номенклатуры выводится только в одну строку и визуально обрезается по границе ячейки. При этом в свойствах ячейки макета может быть явно установлено свойство Размещение в значение Переносить, однако текст все равно не отображается целиком. Разберем основные причины такого поведения платформы и пошаговые способы устранения этой неполадки.
Наиболее частая причина, по которой многострочный текст не разворачивается по вертикали, — фиксированная высота строки в макете табличного документа. Если у строки задан фиксированный размер в пунктах, платформа размещает текст с переносом, но физически отображает только ту часть, которая помещается в заданную высоту.
Проанализируем порядок действий для включения автоматического расчета высоты:
Переносить (ТипРазмещенияТекстаТабличногоДокумента.Переносить).Платформа 1С имеет встроенную особенность: механизм автоматического расчета высоты строки (Автовысота строки) некорректно работает или полностью отключается, если ячейка с многострочным текстом получена путем объединения нескольких колонок. В этом случае высота строки остается стандартной, а длинный текст визуально усекается.
Рассмотрим варианты решения проблемы с объединенными ячейками:
Посмотрим на пример программной установки высоты строки:
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(Выборка);
// Если наименование длинное, задаем высоту области вручную
ДлинаТекста = СтрДлина(Выборка.НоменклатураНаименованиеПолное);
Если ДлинаТекста > 50 Тогда
КоличествоСтрок = Окр(ДлинаТекста / 50, 0, РежимОкругления.ОкруглениеВверх);
ОбластьСтрока.ТекущаяОбласть.ВысотаСтроки = КоличествоСтрок * 15;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьСтрока);
При формировании таблицы по частям с использованием методов Вывести() и Присоединить() высота итоговой строки фиксируется по первой выведенной ячейке. Если область с длинным наименованием добавляется позже через метод Присоединить(), высота строки уже не увеличится автоматически.
Разберем рекомендации по выводу областей:
ТабличныйДокумент.Вывести(ОбластьСтрока).Вывести(), а остальные колонки добавляйте методом Присоединить().Иногда обрезание текста происходит не на уровне отображения в ячейке, а на этапе выборки данных из базы. В типовых конфигурациях у справочника номенклатуры присутствуют два похожих реквизита: Наименование (стандартный реквизит ограниченной длины) и НаименованиеПолное (текст неограниченной длины).
Проверим текст запроса печатной формы. Убедимся, что для формирования документа выбирается именно полное наименование:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Номенклатура.НаименованиеПолное КАК НоменклатураНаименованиеПолное,
| Товары.Количество КАК Количество,
| Товары.Цена КАК Цена,
| Товары.Сумма КАК Сумма
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &Ссылка";
Платформа 1С осуществляет перенос строк по пробельным символам. Если наименование номенклатуры содержит длинные артикулы, серийные номера или сложные технические обозначения без пробелов, ширина которых превышает ширину ячейки, строка не будет перенесена на новую строку. Для решения этой проблемы перед заполнением параметров макета можно программно разбить длинные сплошные идентификаторы с помощью функции вставки пробелов или символа перевода строки Символы.ПС.