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