При формировании и выводе на печать многостраничных печатных форм документов (счетов-фактур, товарных накладных ТОРГ-12) в платформе 1С:Предприятие 7.7 можно столкнуться с неприятной ошибкой: на втором и последующих листах документа перед новыми позициями повторно распечатывается первая строка табличной части. При этом в окне предварительного просмотра на экране таблица может выглядеть корректно. Проанализируем, почему возникает этот сбой, и разберем способы его устранения.
Выясним причину такого поведения печатной формы. В 1С 7.7 за дублирование шапки таблицы на каждом новом листе отвечает специальный механизм. Сбой происходит по одной из следующих причин:
ПовторятьПриПечатиСтроки() принимает номера первой и последней строки области, которая должна дублироваться. Если верхняя и нижняя границы заданы жесткими числовыми константами, добавление любой строки в шапку документа (например, увеличение высоты адреса или реквизитов) смещает шапку вниз. В результате зафиксированный диапазон захватывает строку с данными первого товара.Разберем основной вариант исправления в конфигураторе или во внешней печатной форме документа. Откроем модуль печатной формы (или модуль обработки формирования счета-фактуры) и найдем вызов метода, управляющего повтором шапки.
Посмотрим на типовой вызов метода:
// Пример ошибочной жесткой фиксации строк
Таб.ПовторятьПриПечатиСтроки(12, 16);
Если нижняя граница захватывает первую строку товаров, достаточно уменьшить конечное значение диапазона на единицу:
// Скорректированный диапазон повтора шапки
Таб.ПовторятьПриПечатиСтроки(12, 15);
Чтобы печатная форма не ломалась при изменении состава секций шапки документа, правильнее использовать динамическое определение номеров строк через свойство ВысотаТаблицы(). Рассмотрим пример правильного динамического назначения диапазона:
// Выводим секции до шапки таблицы
Таб.ВывестиСекцию("Шапка");
Таб.ВывестиСекцию("Реквизиты");
// Запоминаем начальную строку шапки
НомНачалаШапки = Таб.ВысотаТаблицы() + 1;
// Выводим шапку таблицы
Таб.ВывестиСекцию("ШапкаТаблицы");
// Запоминаем конечную строку шапки
НомКонцаШапки = Таб.ВысотаТаблицы();
// Устанавливаем точный повтор строк шапки на каждом листе
Таб.ПовторятьПриПечатиСтроки(НомНачалаШапки, НомКонцаШапки);
// Выводим строки документа
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Если в программном коде метод ПовторятьПриПечатиСтроки() не вызывается, повтор строк может быть жестко задан в свойствах самого табличного макета. Разберем по шагам, как проверить и исправить макет:
Строка, снимем выделение или выделим только строки секции ШапкаТаблицы.Если границы повтора заданы верно, но на некоторых принтерах (в частности, бюджетных линейках HP LaserJet Pro) по-прежнему вылезают пустые страницы или смещаются строки, проанализируем параметры печати: