Как правильно настроить или исправить номер документа в верхнем колонтитуле печатной формы?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

Где искать настройки колонтитулов: макет или код?

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

  1. Настройки в макете (визуальный редактор): Эти параметры жестко заданы в самом объекте Макет (файл .mxl). Если в программном коде нет явных указаний по заполнению колонтитулов, система берет настройки отсюда. Чтобы проверить их, необходимо открыть макет, перейти в главное меню Таблица — Настройка печати — Колонтитулы.
  2. Программная настройка: Этот способ является более гибким и приоритетным. Даже если в макете что-то настроено вручную, код может переопределить эти значения непосредственно перед выводом на экран или печать. Чаще всего это происходит в модуле менеджера документа или в специальной функции печати.

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

Программное управление объектом ВерхнийКолонтитул

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


Если ВыводитьКолонтитул Тогда
    // Определяем, с какой страницы начинать вывод (обычно со второй)
    ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
    
    // Указываем вертикальное выравнивание текста внутри области колонтитула
    ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
    
    // Формируем строку заголовка с использованием типовой функции
    ЗаголовокДляПечати = ОбщегоНазначения.СформироватьЗаголовокДокумента(ДанныеДляПечати, "Счет-фактура") + " г."; 
    
    // Назначаем текст для левой и правой части колонтитула
    ТабДокумент.ВерхнийКолонтитул.ТекстСлева  = ЗаголовокДляПечати;
    ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";
КонецЕсли;

Разберем по шагам, что делает каждый параметр в этом фрагменте кода:

1. НачальнаяСтраница: Установка значения 2 крайне важна. Это позволяет избежать дублирования информации. На первой странице документа обычно уже выведен большой заголовок (например, «Счет-фактура №...»), поэтому занимать место колонтитулом там не имеет смысла. Программа начнет печатать колонтитул только тогда, когда документ перейдет на второй лист.

2. ВертикальноеПоложение: Используя свойство ВертикальноеПоложение.Низ, мы прижимаем текст к нижней границе отведенной под колонтитул области. Это помогает визуально отделить служебную информацию от основного «тела» документа.

3. ТекстСлева и ТекстСправа: Это основные поля для вывода данных. В ТекстСлева мы передаем сформированную строку с названием документа и его номером. В ТекстСправа мы используем специальную конструкцию [&НомерСтраницы] — это системный шаблон, который платформа 1С автоматически заменяет на порядковый номер листа при печати.

Использование специальных шаблонов в текстах

Выясним, какие еще возможности предоставляет платформа для автоматизации вывода данных в колонтитулах без написания сложных алгоритмов вычисления страниц. Помимо [&НомерСтраницы], вы можете использовать следующие теги:

Эти теги можно комбинировать с произвольным текстом. Например, установка свойства ТабДокумент.ВерхнийКолонтитул.ТекстЦентр = "Напечатано: [&Дата] [&Время]"; позволит всегда знать, когда была создана бумажная копия документа.

Типовые ошибки и способы их исправления

Проанализируем ситуацию, когда номер документа выводится не так, как ожидается. Рассмотрим основные причины:

Проблема с префиксами: Если в колонтитуле выводится номер вида «0000-00123», а бухгалтер хочет видеть просто «123», значит, функция ОбщегоНазначения.СформироватьЗаголовокДокумента() отрабатывает с типовыми настройками. Чтобы получить «чистый» номер, можно воспользоваться функцией ПрефиксацияОбъектовКлиентСервер.НомерНаПечать() или вручную обработать строку номера, удалив лидирующие нули.

Текст «наползает» на таблицу: Если основной текст документа перекрывает колонтитул, это означает, что высота области колонтитула задана недостаточно. Проверьте свойство ВерхнийКолонтитул.Высота. Значение измеряется в миллиметрах. По умолчанию оно может быть равно 0, если настройки берутся из системных параметров принтера, поэтому лучше задать его явно, например 10 или 15.

Колонтитул не отображается: Проверьте условие НачальнаяСтраница. Если ваш документ уместился на одну страницу, а в коде стоит НачальнаяСтраница = 2, то колонтитул и не должен появиться. Также убедитесь, что свойство ВыводитьВерхнийКолонтитул (или аналогичный флаг в коде) установлено в значение Истина.

Дополнительное оформление

Посмотрим на возможности программного изменения шрифта. Если стандартный шрифт кажется слишком крупным и отвлекает от данных, мы можем создать объект Шрифт и применить его:


НовыйШрифт = Новый Шрифт("Arial", 8, Истина, Ложь); // Шрифт Arial, размер 8, жирный
ТабДокумент.ВерхнийКолонтитул.Шрифт = НовыйШрифт;

Также не забывайте о возможности использования свойства ТекстЦентр. Это позволяет разделить информацию на три логических блока: слева — название документа, по центру — дата, справа — нумерация страниц. Это делает печатную форму профессиональной и удобной для архивирования.

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

← На главную