Верхний и нижний колонтитул в печатных формах 1С 8.3: от диалога печати до кода макета
Содержание
Чтобы настроить колонтитулы в 1С 8.3 для одного документа, откройте печатную форму и вызовите Параметры страницы (в форме печати это команда в меню Ещё, в главном меню — Файл → Параметры страницы). На вкладке колонтитулов включите верхний или нижний колонтитул и впишите текст слева, по центру или справа. Номер страницы вставляется шаблоном [&НомерСтраницы], общее число страниц — [&СтраницВсего], дата и время печати — [&Дата] и [&Время].
Так меняется только текущая распечатка. Если колонтитул нужен в каждом счёте или акте, его задают в макете печатной формы или в коде формирования. Механизм общий для платформы: одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и любой другой конфигурации на 8.3, потому что колонтитул — свойство табличного документа, а не конкретной программы.
Где в 1С живут колонтитулы и чем они отличаются от шапки макета
Любая печатная форма в 1С — это табличный документ. У него есть два служебных блока: ВерхнийКолонтитул и НижнийКолонтитул. Каждый делится на три зоны: слева, в центре, справа.
Колонтитул — это не строка таблицы. Он печатается в поле листа, вне сетки ячеек. Отсюда три следствия:
- 📄 на экране в обычном режиме колонтитула не видно — он появляется только в предварительном просмотре и на бумаге;
- 🔤 в колонтитул можно вывести только текст и шаблоны подстановки, без картинок и рамок;
- 📏 его высота задаётся отдельно от полей страницы.
Шапка макета — наоборот, обычные ячейки таблицы. В ней можно разместить логотип, реквизиты, рамки и формулы. Поэтому почти все задачи «колонтитулов» в 1С решают одним из трёх способов:
| Способ | Где настраивается | Что умеет | Когда выбирать |
|---|---|---|---|
| Колонтитул через «Параметры страницы» | В открытой печатной форме | Текст, номера страниц, дата | Разовая распечатка |
| Колонтитул в коде формирования | Модуль печати или расширение | Текст, шаблоны, условия | Нужно в каждом документе |
| Повторяемые строки макета | Макет + свойство документа | Картинки, реквизиты, рамки | Логотип или шапка на каждом листе |
Как настроить колонтитулы в 1С через параметры страницы
Это самый быстрый путь, программировать ничего не нужно.
- Сформируйте печатную форму: например, откройте документ и нажмите
Печать → Счет на оплату. - В окне печати откройте
Ещё → Параметры страницы. Если команды там нет, вызовите её из главного меню:Файл → Параметры страницы. - Перейдите на вкладку с колонтитулами.
- Поставьте флажок вывода верхнего или нижнего колонтитула.
- Заполните нужную зону: слева, в центре или справа.
- При необходимости укажите шрифт и страницу, с которой колонтитул начинает выводиться.
- Нажмите
ОКи откройте предварительный просмотр, чтобы проверить результат.
Какие шаблоны вставлять в текст
Шаблоны пишутся в квадратных скобках с амперсандом. Платформа подставляет вместо них значения в момент печати.
| Шаблон | Что подставится | Пример строки |
|---|---|---|
[&НомерСтраницы] | Номер текущего листа | Лист [&НомерСтраницы] |
[&СтраницВсего] | Сколько листов в документе | Стр. [&НомерСтраницы] из [&СтраницВсего] |
[&Дата] | Дата печати | Распечатано [&Дата] |
[&Время] | Время печати | [&Дата] [&Время] |
Шаблоны можно смешивать с обычным текстом в одной зоне. Например, в правой зоне нижнего колонтитула: Стр. [&НомерСтраницы] из [&СтраницВсего], а в левой — ООО «Вектор», экз. для бухгалтерии.
В диалоге есть кнопки, которые сами вставляют шаблоны номера страницы, числа страниц, даты и времени. Ими удобнее пользоваться, чем набирать текст руками: опечатка в имени шаблона — и на листе напечатается сама строка в скобках.
Настройка из диалога действует только на эту распечатку. Закрыли форму, сформировали её заново — колонтитулов нет. Для постоянного результата переходите к следующим разделам.
Текст и реквизиты документа в колонтитуле: настройка в коде печати
Если колонтитул нужен всегда, его задают при формировании табличного документа. В типовых конфигурациях это делают в расширении, а не правкой основной конфигурации: так доработка переживёт обновление.
Пример: в верхний колонтитул выводим организацию и номер документа, в нижний — нумерацию и момент печати.
// ТабДок — сформированный табличный документ,
// ДанныеДокумента — выборка или ссылка на печатаемый документ
ТабДок.ВерхнийКолонтитул.Выводить = Истина;
ТабДок.ВерхнийКолонтитул.ТекстСлева = Строка(ДанныеДокумента.Организация);
ТабДок.ВерхнийКолонтитул.ТекстСправа = СтрШаблон("Документ № %1 от %2",
ДанныеДокумента.Номер, Формат(ДанныеДокумента.Дата, "ДЛФ=D"));
ТабДок.ВерхнийКолонтитул.Шрифт = Новый Шрифт("Arial", 8);
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.ТекстСлева = "Распечатано [&Дата] [&Время]";
ТабДок.НижнийКолонтитул.ТекстСправа = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт("Arial", 8);
Реквизиты документа (номер, дату, организацию) подставляет ваш код. Шаблоны [&...] подставляет платформа при печати. Их можно комбинировать в одной строке, как в примере.
Как внедрить это в типовую печатную форму
Практический порядок для Бухгалтерии 3.0 и других конфигураций на БСП:
- Создайте расширение: в Конфигураторе
Конфигурация → Расширения конфигурации → Добавить. - Заимствуйте общий модуль или модуль менеджера, где формируется нужная печатная форма.
- Перехватите процедуру печати аннотацией
&Послеи допишите установку колонтитулов в уже сформированный табличный документ. - Сохраните расширение и проверьте печать в копии базы.
Расширения доступны с платформы 8.3.6. Не правьте модули типовой конфигурации напрямую: после этого она снимается с полной поддержки, и каждое обновление превращается в ручное сравнение и объединение.
Логотип, печать и картинки на каждой странице
Картинку в колонтитул табличного документа вставить нельзя — он принимает только текст. Логотип выводят иначе: кладут его в верхние строки макета и заставляют эти строки повторяться на каждом листе.
Готовый механизм в Бухгалтерии 3.0
Для счёта на оплату ничего программировать не нужно. В карточке организации есть раздел для логотипа и факсимиле: туда загружают логотип, изображение печати и подписи руководителя и главного бухгалтера. После этого в меню Печать счёта появляется вариант с печатью и подписями, а логотип выводится в шапке бланка.
Своя картинка в макете
Если нужен логотип в другой форме:
- Откройте макет в Конфигураторе или в режиме редактирования макета (раздел ниже).
- Выделите ячейки в верхней области и вставьте рисунок через
Таблица → Рисунки → Картинка. - Выровняйте рисунок по ячейкам, чтобы он не «уезжал» при изменении ширины колонок.
Чтобы эти строки печатались на каждом листе, укажите их как повторяемые:
// строки 1–4 результата содержат логотип и реквизиты
ТабДок.ПовторятьПриПечатиСтрок = ТабДок.Область("R1:R4");
Аналогично ПовторятьПриПечатиКолонок повторяет колонки, если таблица печатается на нескольких листах по ширине.
Повторяемые строки печатаются внутри полей страницы, а не в колонтитуле. Если вывести и логотип через повтор строк, и текстовый колонтитул, они не мешают друг другу: колонтитул остаётся в поле листа, логотип — над таблицей.
Нумерация страниц и разрывы листов
Нумерация через [&НомерСтраницы] идёт от первого листа. Если первая страница — титульная и номер на ней не нужен, задайте начальную страницу:
ТабДок.НижнийКолонтитул.НачальнаяСтраница = 2;
Колонтитул начнёт выводиться со второго листа. То же поле есть в диалоге параметров страницы.
Разрывы страниц
Платформа сама режет документ на листы по высоте. Проблема в том, что разрез может прийти посреди строки таблицы или оставить итоги и подписи одних на последнем листе. Решение — проверять, помещается ли блок, и при необходимости вставлять разрыв вручную:
ВыводимыеОбласти = Новый Массив;
ВыводимыеОбласти.Добавить(ОбластьСтрока);
ВыводимыеОбласти.Добавить(ОбластьПодвал);
Если Не ТабДок.ПроверитьВывод(ВыводимыеОбласти) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкаТаблицы); // повторяем шапку таблицы на новом листе
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
Метод ПроверитьВывод учитывает текущие параметры страницы, включая колонтитулы. Поэтому сначала задайте колонтитулы, ориентацию и поля, а уже потом выводите строки с проверкой. Иначе расчёт пойдёт по одним размерам, а печать — по другим.
Параметры листа, которые влияют на нумерацию
| Свойство табличного документа | Что задаёт |
|---|---|
ОриентацияСтраницы | Книжная или альбомная, меняет число листов |
ПолеСверху, ПолеСнизу | Поля страницы в миллиметрах |
РазмерКолонтитулаСверху, РазмерКолонтитулаСнизу | Место под колонтитулы в миллиметрах |
АвтоМасштаб | Вписывает таблицу в ширину листа |
Если включить АвтоМасштаб для широкой таблицы, листов станет меньше, и [&СтраницВсего] изменится. Это нормально: значение считается при печати.
Условный вывод: колонтитул не на всех листах и не во всех документах
Колонтитул можно включать по условию. Типичные сценарии:
- 📝 пометка
ЧЕРНОВИКдля непроведённых документов; - 🏢 разный текст для разных организаций в одной базе;
- 🔒 гриф «Для служебного пользования» только для определённых видов операций;
- 📑 номер страницы только в многостраничных документах.
Пример для черновика:
Если Не ДанныеДокумента.Проведен Тогда
ТабДок.ВерхнийКолонтитул.Выводить = Истина;
ТабДок.ВерхнийКолонтитул.ТекстВЦентре = "ЧЕРНОВИК — документ не проведен";
КонецЕсли;
Для разных организаций удобно хранить текст колонтитула не в коде, а в дополнительном реквизите или сведении организации. Тогда бухгалтер меняет его сам, без программиста. В Бухгалтерии 3.0 дополнительные реквизиты включаются в Администрирование → Общие настройки.
Ограничение платформы: у колонтитула одна настройка на весь документ. Отдельный текст для чётных и нечётных листов или разный текст на каждом листе сделать нельзя. Можно только сдвинуть начало вывода через НачальнаяСтраница. Если нужен разный текст на разных листах, выводите его строками макета перед разрывом страницы.
Ещё → Параметры страницы, включите нижний колонтитул и вставьте [&НомерСтраницы]. В макете ничего не меняется.ПовторятьПриПечатиСтрок.Как сохранить настройки колонтитулов и макета после обновления
Здесь чаще всего теряют результат. Разберём, что где сохраняется.
Параметры печати пользователя
Если в коде печатной формы задан ключ параметров печати, платформа запоминает параметры страницы для каждого пользователя:
ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплату";
После этого настроенные в диалоге поля, ориентация и масштаб подхватываются при следующей печати этой формы. Типовые печатные формы на БСП ключ обычно задают. Своим обработкам его стоит прописать явно.
Изменённые макеты в пользовательском режиме
В конфигурациях на БСП макет можно поправить без Конфигуратора: Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Выберите макет, откройте его на редактирование, внесите правки (например, вставьте логотип в шапку) и запишите.
Такой макет хранится в базе отдельно от конфигурации и используется вместо типового. Что учесть:
- После обновления типовой макет может измениться, а ваш останется старым. Новые поля формы в распечатку не попадут.
- После каждого обновления сравните свой макет с поставляемым. Если в форме появились новые реквизиты, сбросьте свою версию на поставляемую и повторите правки.
- Колонтитулы, заданные в коде, в макет не входят. Правка макета их не отменит и не добавит.
Перед правкой макетов и установкой расширения в рабочей базе сделайте резервную копию. Проверяйте печать в копии на двух-трёх реальных документах, включая многостраничный.
Типовые проблемы с колонтитулами и что с ними делать
ПроверитьВывод для последней строки таблицы вместе с подвалом.Отдельно о принтерах. Если колонтитул обрезан по краю, проверьте минимальные поля принтера: у многих моделей непечатаемая зона составляет 4–5 мм. Колонтитул, поставленный ближе к краю, принтер просто не пропечатает, хотя в просмотре он виден.
Частые вопросы
Можно ли вывести в колонтитул имя пользователя, который печатает?
ИмяПользователя() или представление текущего пользователя, склеенное с текстом колонтитула.Попадут ли колонтитулы в PDF?
Почему число страниц в колонтитуле отличается от того, что я вижу на экране?
Можно ли настроить колонтитулы в отчёте, а не в документе?
[&НомерСтраницы] и [&СтраницВсего].