Как убрать повторение или пропажу шапки табличного документа при печати заказов в 1С:Управление торговлей 11.3?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При доработке печатных форм в конфигурациях 1С (например, 1С:Управление торговлей 11.3) разработчики часто сталкиваются с задачей размещения нескольких документов на одной странице. Для этого в макете снимаются разделители страниц, а для строк задается свойство Вместе со следующим. Однако при таком подходе возникают побочные эффекты: шапка табличной части начинает дублироваться в произвольных местах (посреди таблицы) или полностью пропадает на отдельных страницах.

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

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

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

  1. Сплошное применение свойства «Вместе со следующим»: Если установить этот флаг практически для всех строк таблицы в макете, платформенный механизм не может корректно рассчитать естественный перенос строк. Платформа стремится не разрывать блок ячеек, из-за чего ошибочно срабатывает расчет высоты страницы.
  2. Рассинхронизация функции ПроверитьВывод() и вызова шапки: В модуле менеджера проверка заполнения листа выполняется с помощью метода ПроверитьВывод(). Если отключить горизонтальные разделители страниц, но оставить условие проверки заполнения страницы вместе с повторным вызовом процедуры ВывестиШапку(), табличный документ начнет выводить шапку прямо посередине текущего листа.
  3. Залипание контекстных переменных: При выводе нескольких заказов подряд в рамках одного объекта ТабличныйДокумент внутренние счетчики строк или флаги первого документа продолжают влиять на последующие документы.

Шаг 1. Настройка макета печатной формы

Рассмотрим порядок правильной настройки макета ПФ_MXL_ЗаказКлиента:

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

Шаг 2. Корректировка кода в модуле менеджера

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

В типовой функции формирования печатной формы найдем блок проверки вывода. Как правило, он выглядит следующим образом:


МассивПроверкиВывода = Новый Массив;
МассивПроверкиВывода.Добавить(ОбластьСтрока);

Если НЕ ТабличныйДокумент.ПроверитьВывод(МассивПроверкиВывода) Тогда
    // Внутри блока происходит вывод разделителя страниц и повторный вывод шапки
    ВывестиШапку(ТабличныйДокумент, ОбластьНомераШапки, ОбластьКодовШапки, ОбластьТоварШапки, ОбластьДанныхШапки, ВыводитьКоды);
КонецЕсли;

Если задача состоит в сквозной печати нескольких документов без жестких искусственных переносов, необходимо закомментировать условие с вызовом ПроверитьВывод() и отключить лишний повторный вызов ВывестиШапку():


// Закомментируем повторный вывод шапки и разделителей
// ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
// ВывестиШапку(ТабличныйДокумент, ОбластьНомераШапки, ОбластьКодовШапки, ОбластьТоварШапки, ОбластьДанныхШапки, ВыводитьКоды);

Отключение вызова повторной шапки внутри цикла вывода строк номенклатуры полностью исключит её появление в середине таблицы одного заказа.

Альтернативное решение: Использование свойства ПовторятьПриПечатиСтроки

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

Посмотрим на пример кода, устанавливающего повтор строк на каждом новом листе:


// Указываем диапазон строк готового результирующего документа, которые должны повторяться
ТабличныйДокумент.ПовторятьПриПечатиСтроки = ТабличныйДокумент.Область("R5:R6");

Важное замечание: Свойство ПовторятьПриПечатиСтроки применяется ко всему объекту ТабличныйДокумент. Если в один документ выводятся разные типы печатных форм или документы с разной структурой, диапазон повторения строк должен задаваться единообразно или обрабатываться через пакетную печать.

Альтернативное решение: Пакетная печать

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

← На главную