Каждый разработчик 1С рано или поздно сталкивается с неприятной ситуацией при проектировании печатных форм: в Конфигураторе макет выглядит идеально, все колонки имеют правильную ширину, текст отображается красиво и аккуратно. Однако при выводе на печать в режиме «1С:Предприятие» табличный документ преподносит сюрприз — одна из колонок катастрофически сжимается, и длинный текст начинает переноситься буквально по одной букве на строку.
Давайте подробно разберем, почему возникает это поведение платформы, как устроен механизм расчета ширины колонок в табличных документах 1С и какими способами можно навсегда решить эту проблему.
Чтобы понять суть проблемы, проанализируем внутреннее устройство объекта ТабличныйДокумент. По умолчанию любой табличный документ в 1С имеет единую сквозную сетку колонок по всей высоте. Это значит, что если в документе есть Колонка №3, то ее ширина будет абсолютно одинаковой для первой, сотой и тысячной строки.
Когда мы программно формируем печатную форму в модуле менеджера или модуле объекта, мы поочередно выводим различные секции макета (шапку, табличную часть, подвал) с помощью методов Вывести() или Присоединить(). Если в выводимой шапке документа Колонка №3 была сужена ради компактного расположения реквизитов (например, подписи или даты), то при выводе строк табличной части платформа применит эту узкую ширину ко всей Колонке №3 в документе.
В результате ячейка табличной части, которая должна содержать длинное наименование номенклатуры, тоже сжимается до ширины этой узкой колонки. Если в свойствах ячейки табличной части для размещения текста установлено значение «Переносить», платформа послушно перенесет каждое слово на новую строку, сужая его до ширины одной буквы.
Самый простой и быстрый способ решить проблему непосредственно в макете — «оторвать» разметку конкретной секции от общей глобальной сетки табличного документа. Для этого платформа 1С предоставляет встроенный интерактивный механизм создания индивидуального формата строк. Для настройки макетов напрямую в режиме пользователя типовых конфигураций пригодится инструкция по редактированию печатных форм в 1С.
Рассмотрим по шагам, как правильно применить этот метод в Конфигураторе:
Бывают ситуации, когда печатная форма генерируется сложным динамическим путем, объединяет в себе несколько разнородных отчетов или выгружается из внешних источников данных. В этом случае интерактивной настройки макета может оказаться недостаточно. Для решения этой проблемы разработчики используют программный метод СоздатьФорматСтрок().
Проанализируем пример кода, который позволяет программно изолировать разметку определенной области строк табличного документа:
// Предположим, у нас есть сформированный ТабличныйДокумент
ТабДок = Новый ТабличныйДокумент;
// Выводим секции макета в документ
СекцияШапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(СекцияШапка);
// Получаем область только что выведенных строк шапки
// Например, это строки с 1 по 5 включительно
ОбластьСтрокШапки = ТабДок.Область(1, , 5, );
// Принудительно создаем индивидуальный формат строк для этой области
ОбластьСтрокШапки.СоздатьФорматСтрок();
// Теперь мы можем безопасно менять ширину колонок для шапки программно,
// и это не повлияет на последующие строки табличной части
ТабДок.Область("R1C3:R5C3").ШиринаКолонки = 30;
Использование метода СоздатьФорматСтрок() гарантирует, что при последующем выводе строк табличной части (через метод Вывести()) или прикреплении дополнительных колонок (через метод Присоединить()) структура документа не деформируется. При реализации аналогичных алгоритмов в современных типовых конфигурациях можно опираться на эталонный пример внешней печатной формы на БСП.
Опытные разработчики 1С часто стараются избегать чрезмерного количества индивидуальных форматов строк в одном макете, так как это усложняет последующую поддержку печатной формы и может приводить к ошибкам при копировании областей. Вместо этого применяется универсальный дизайнерский подход, называемый методом «мелкой сетки».
Суть метода заключается в следующем:
1 или 2 стандартных символа. Таких колонок в макете создается много (от 30 до 100 штук).При таком подходе сетка табличного документа остается строго единой, структура не нарушается, отсутствуют конфликты форматов, а визуальное отображение элементов получается аккуратным и адаптивным.
При работе с шириной колонок обратите особое внимание на свойство ячейки РазмещениеТекста (в палитре свойств Конфигуратора оно называется просто «Размещение»). Оно определяет поведение текста при выходе за физические границы ячейки:
Также помните о кэшировании печатных форм в платформе 1С. Если вы внесли изменения в формат строк макета в Конфигураторе, сохранили конфигурацию базы данных, но в режиме Предприятия колонка по-прежнему отображается некорректно — попробуйте полностью перезапустить сеанс пользователя 1С или очистить локальный кэш конфигурации. Это исключит влияние старых закэшированных данных разметки на результат отображения.