При работе с печатными формами в системе 1С:Предприятие часто возникает ситуация, когда на второй и последующих страницах документа должен отображаться заголовок с номером документа и номером текущего листа. Иногда эта информация выводится некорректно: номер может быть старым, содержать лишние префиксы или вовсе отсутствовать. В рамках данной статьи мы подробно разберем, как найти место управления этими данными и как программно изменить текст в верхнем колонтитуле.
Первым делом проанализируем, каким именно способом формируется колонтитул в вашей печатной форме. В платформе 1С существует два основных способа задания параметров печати:
Макет (файл .mxl). Если в программном коде нет явных указаний по заполнению колонтитулов, система берет настройки отсюда. Чтобы проверить их, необходимо открыть макет, перейти в главное меню Таблица — Настройка печати — Колонтитулы.Проанализируем ситуацию, когда заголовок в верхней части страницы формируется динамически. Если вы не видите нужного текста в макете, значит, его нужно искать в тексте модуля.
Рассмотрим детально, как выглядит типовой блок кода, отвечающий за вывод информации в верхней части страницы. В объекте ТабличныйДокумент существует свойство ВерхнийКолонтитул, которое само является объектом с набором свойств. Посмотрим на пример реализации:
Если ВыводитьКолонтитул Тогда
// Определяем, с какой страницы начинать вывод (обычно со второй)
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
// Указываем вертикальное выравнивание текста внутри области колонтитула
ТабДокумент.ВерхнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
// Формируем строку заголовка с использованием типовой функции
ЗаголовокДляПечати = ОбщегоНазначения.СформироватьЗаголовокДокумента(ДанныеДляПечати, "Счет-фактура") + " г.";
// Назначаем текст для левой и правой части колонтитула
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = ЗаголовокДляПечати;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "Лист [&НомерСтраницы]";
КонецЕсли;
Разберем по шагам, что делает каждый параметр в этом фрагменте кода:
1. НачальнаяСтраница: Установка значения 2 крайне важна. Это позволяет избежать дублирования информации. На первой странице документа обычно уже выведен большой заголовок (например, «Счет-фактура №...»), поэтому занимать место колонтитулом там не имеет смысла. Программа начнет печатать колонтитул только тогда, когда документ перейдет на второй лист.
2. ВертикальноеПоложение: Используя свойство ВертикальноеПоложение.Низ, мы прижимаем текст к нижней границе отведенной под колонтитул области. Это помогает визуально отделить служебную информацию от основного «тела» документа.
3. ТекстСлева и ТекстСправа: Это основные поля для вывода данных. В ТекстСлева мы передаем сформированную строку с названием документа и его номером. В ТекстСправа мы используем специальную конструкцию [&НомерСтраницы] — это системный шаблон, который платформа 1С автоматически заменяет на порядковый номер листа при печати.
Выясним, какие еще возможности предоставляет платформа для автоматизации вывода данных в колонтитулах без написания сложных алгоритмов вычисления страниц. Помимо [&НомерСтраницы], вы можете использовать следующие теги:
Эти теги можно комбинировать с произвольным текстом. Например, установка свойства ТабДокумент.ВерхнийКолонтитул.ТекстЦентр = "Напечатано: [&Дата] [&Время]"; позволит всегда знать, когда была создана бумажная копия документа.
Проанализируем ситуацию, когда номер документа выводится не так, как ожидается. Рассмотрим основные причины:
Проблема с префиксами: Если в колонтитуле выводится номер вида «0000-00123», а бухгалтер хочет видеть просто «123», значит, функция ОбщегоНазначения.СформироватьЗаголовокДокумента() отрабатывает с типовыми настройками. Чтобы получить «чистый» номер, можно воспользоваться функцией ПрефиксацияОбъектовКлиентСервер.НомерНаПечать() или вручную обработать строку номера, удалив лидирующие нули.
Текст «наползает» на таблицу: Если основной текст документа перекрывает колонтитул, это означает, что высота области колонтитула задана недостаточно. Проверьте свойство ВерхнийКолонтитул.Высота. Значение измеряется в миллиметрах. По умолчанию оно может быть равно 0, если настройки берутся из системных параметров принтера, поэтому лучше задать его явно, например 10 или 15.
Колонтитул не отображается: Проверьте условие НачальнаяСтраница. Если ваш документ уместился на одну страницу, а в коде стоит НачальнаяСтраница = 2, то колонтитул и не должен появиться. Также убедитесь, что свойство ВыводитьВерхнийКолонтитул (или аналогичный флаг в коде) установлено в значение Истина.
Посмотрим на возможности программного изменения шрифта. Если стандартный шрифт кажется слишком крупным и отвлекает от данных, мы можем создать объект Шрифт и применить его:
НовыйШрифт = Новый Шрифт("Arial", 8, Истина, Ложь); // Шрифт Arial, размер 8, жирный
ТабДокумент.ВерхнийКолонтитул.Шрифт = НовыйШрифт;
Также не забывайте о возможности использования свойства ТекстЦентр. Это позволяет разделить информацию на три логических блока: слева — название документа, по центру — дата, справа — нумерация страниц. Это делает печатную форму профессиональной и удобной для архивирования.
Таким образом, для исправления номера документа в колонтитуле вам необходимо найти в коде формирование объекта ТабличныйДокумент, отыскать работу со свойством ВерхнийКолонтитул и либо подправить строку, передаваемую в ТекстСлева, либо изменить логику работы функции формирования заголовка.