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

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

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

Причина 1. Отключен режим автовысоты строки в макете

Наиболее частая причина, по которой многострочный текст не разворачивается по вертикали, — фиксированная высота строки в макете табличного документа. Если у строки задан фиксированный размер в пунктах, платформа размещает текст с переносом, но физически отображает только ту часть, которая помещается в заданную высоту.

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

  1. Откроем макет печатной формы в конфигураторе.
  2. Выделим строку (или диапазон строк), в которой выводятся данные номенклатуры, кликнув по номерам строк на левой панели макета.
  3. Откроем палитру свойств (сочетание клавиш Alt + Enter).
  4. Найдем свойство Автовысота строки и установим флаг в активное состояние (или сбросим фиксированное значение в поле Высота строки).
  5. Убедимся, что для самой ячейки свойство Размещение установлено как Переносить (ТипРазмещенияТекстаТабличногоДокумента.Переносить).

Причина 2. Объединение ячеек по горизонтали

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

Рассмотрим варианты решения проблемы с объединенными ячейками:

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

Посмотрим на пример программной установки высоты строки:


ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(Выборка);

// Если наименование длинное, задаем высоту области вручную
ДлинаТекста = СтрДлина(Выборка.НоменклатураНаименованиеПолное);
Если ДлинаТекста > 50 Тогда
    КоличествоСтрок = Окр(ДлинаТекста / 50, 0, РежимОкругления.ОкруглениеВверх);
    ОбластьСтрока.ТекущаяОбласть.ВысотаСтроки = КоличествоСтрок * 15;
КонецЕсли;

ТабличныйДокумент.Вывести(ОбластьСтрока);

Причина 3. Использование метода «Присоединить» вместо «Вывести»

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

Разберем рекомендации по выводу областей:

  1. Формируйте строку макета целиком по горизонтали и выводите ее за один вызов метода ТабличныйДокумент.Вывести(ОбластьСтрока).
  2. Если горизонтальная сборка неизбежна, область с потенциально самым длинным текстом выводите первой с помощью метода Вывести(), а остальные колонки добавляйте методом Присоединить().

Причина 4. Выборка короткого наименования в запросе

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

Проверим текст запроса печатной формы. Убедимся, что для формирования документа выбирается именно полное наименование:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Товары.Номенклатура.НаименованиеПолное КАК НоменклатураНаименованиеПолное,
    |	Товары.Количество КАК Количество,
    |	Товары.Цена КАК Цена,
    |	Товары.Сумма КАК Сумма
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК Товары
    |ГДЕ
    |	Товары.Ссылка = &Ссылка";

Причина 5. Неразрывные строки без пробелов

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

← На главную