Почему сжимается колонка в макете 1С и текст переносится по одной букве: разбираемся и исправляем

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

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

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

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

Чтобы понять суть проблемы, проанализируем внутреннее устройство объекта ТабличныйДокумент. По умолчанию любой табличный документ в 1С имеет единую сквозную сетку колонок по всей высоте. Это значит, что если в документе есть Колонка №3, то ее ширина будет абсолютно одинаковой для первой, сотой и тысячной строки.

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

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


Способ 1. Создание индивидуального формата строк в Конфигураторе

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

Рассмотрим по шагам, как правильно применить этот метод в Конфигураторе:

  1. Откройте проблемный макет в Конфигураторе 1С.
  2. Выделите всю строку (или несколько строк) проблемной секции макета целиком. Для этого кликните мышью по серой панели с номерами строк на левой границе редактора. Важно: нужно выделить именно строки целиком, а не просто диапазон ячеек в них.
  3. Зажмите и удерживайте клавишу Ctrl на клавиатуре.
  4. Удерживая Ctrl, подведите курсор к границе любой колонки внутри выделенных строк и слегка измените ее ширину мышью (перетащите границу влево или вправо).
  5. Платформа сразу же выдаст системный запрос: «Для выделенных строк будет создан новый формат строк. Продолжить?». Нажмите кнопку ОК.
  6. Теперь сетка колонок для этих строк стала независимой! Вы можете настраивать ширину колонок в этой секции макета как угодно — это никак не повлияет на ширину колонок в табличной части или подвале документа.

Способ 2. Программное создание формата строк

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

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


// Предположим, у нас есть сформированный ТабличныйДокумент
ТабДок = Новый ТабличныйДокумент;

// Выводим секции макета в документ
СекцияШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(СекцияШапка);

// Получаем область только что выведенных строк шапки
// Например, это строки с 1 по 5 включительно
ОбластьСтрокШапки = ТабДок.Область(1, , 5, );

// Принудительно создаем индивидуальный формат строк для этой области
ОбластьСтрокШапки.СоздатьФорматСтрок();

// Теперь мы можем безопасно менять ширину колонок для шапки программно,
// и это не повлияет на последующие строки табличной части
ТабДок.Область("R1C3:R5C3").ШиринаКолонки = 30;

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


Способ 3. Метод «Мелкой сетки» (альтернативный дизайн макета)

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

Суть метода заключается в следующем:

  1. При проектировании макета все его базовые колонки изначально делаются очень узкими — например, шириной всего в 1 или 2 стандартных символа. Таких колонок в макете создается много (от 30 до 100 штук).
  2. Вместо изменения ширины конкретных колонок для разных полей применяется операция **объединения ячеек** по горизонтали.
  3. Например, если в шапке для поля «Номер документа» требуется средняя ширина, мы выделяем и объединяем 10 мелких колонок. А для длинного поля «Наименование товара» в табличной части ниже мы объединяем уже 40 мелких колонок.

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


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

При работе с шириной колонок обратите особое внимание на свойство ячейки РазмещениеТекста (в палитре свойств Конфигуратора оно называется просто «Размещение»). Оно определяет поведение текста при выходе за физические границы ячейки:

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

← На главную