Часто при разработке печатных форм в 1С:Предприятии мы сталкиваемся с ситуацией, когда казалось бы идентичные макеты ведут себя по-разному: на один лист помещается 33 строки, а на другой, почти такой же — всего 11. Эта проблема типична и связана не столько с количеством столбцов, сколько с параметрами вывода самого ТабличныйДокумент и свойствами ячеек макета. Давайте разберем, как проанализировать эту ситуацию и навести порядок в печатных формах.
Первое, что необходимо понять — высота строки в макете не всегда является константой. Если в свойствах ячеек установлено автоматическое определение высоты (свойство ВысотаСтроки равно «Авто»), система будет подстраивать высоту каждой строки под объем текста, который в нее выводится. Если включено свойство РазмещениеТекста в режиме «Переносить», то при наличии длинного текста в одной из ячеек строка «растягивается» по вертикали, занимая место нескольких обычных строк.
Разница в 33 и 11 строк обычно возникает из-за того, что в одном из вариантов макета ячейки имеют настройки переноса, вызывающие неожиданное увеличение высоты строк при заполнении данными. Также причиной может быть использование разных стилей шрифтов или наличие невидимых символов переноса строки в данных табличной части.
Чтобы добиться предсказуемого поведения печатной формы, выполните следующие шаги:
ВысотуСтроки в макете. Если вы хотите, чтобы строки всегда были одинаковыми, установите для них фиксированное значение вместо «Авто».РазмещениеТекста. Убедитесь, что для всех ячеек, где это возможно, установлены идентичные параметры. Если текст не должен переноситься, лучше отключить эту опцию, чтобы избежать «раздувания» строк.ТабличныйДокумент. Возможно, установлены разные значения МасштабПечати или используются разные настройки полей страницы.Вместо того чтобы создавать два отдельных макета (один со скидкой, другой без), мы рекомендуем использовать вертикальные секции. Это архитектурно более верное решение, которое позволяет управлять видимостью столбцов программно.
Алгоритм реализации вертикальных секций:
Такой подход исключает ошибки, возникающие при дублировании макетов, и упрощает дальнейшую поддержку кода:
// Пример программного вывода вертикальных секций
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСкидка = Макет.ПолучитьОбласть("Скидка");
Для Каждого СтрокаТЧ Из Документ.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Вывести(ОбластьСтрока);
Если Документ.ЕстьСкидка Тогда
ОбластьСкидка.Параметры.Заполнить(СтрокаТЧ);
ТабДок.Присоединить(ОбластьСкидка);
КонецЕсли;
КонецЦикла;
Если после унификации макета строки все равно не помещаются, используйте возможности платформы для автоматической подгонки содержимого. Вместо задания жесткого процента масштаба, включите автоматический подбор:
ТабДок = Новый ТабличныйДокумент;
ТабДок.АвтоМасштаб = Истина; // Позволяет 1С самой подобрать оптимальный масштаб
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // Если столбцов слишком много
Для исправления вашей проблемы мы рекомендуем:
РазмещениеТекста.ТабличныйДокумент спасет вас от необходимости вручную высчитывать количество строк для каждого случая.ТабДок.ВывестиГоризонтальныйРазделительСтраниц(), однако при правильной настройке АвтоМасштаб это требуется крайне редко.Работа с табличным документом требует внимания к деталям, но, следуя этим правилам, вы сделаете печатные формы стабильными и удобными для пользователя.