Документы и Печать · 11 мин
Как программно задать параметры печати в 1С
Как программно настроить параметры печати в 1С: ориентация, поля, масштаб, колонтитулы табличного документа, сохранение через КлючПараметровПечати.
Программная настройка параметров печати в 1С сводится к работе со свойствами объекта ТабличныйДокумент: ориентация страницы, поля, масштаб, разбиение на страницы и колонтитулы задаются напрямую в коде перед выводом на печать или в файл. Это позволяет гарантировать, что счёт, акт или накладная всегда выйдут на принтер в нужном виде, независимо от настроек конкретного пользователя.
Отдельный механизм — сохранение параметров печати через свойство КлючПараметровПечати: платформа запоминает настройки, которые пользователь выбрал в диалоге печати, и применяет их при следующем выводе того же макета. Понимание обоих подходов позволяет решить практически любую задачу: от жёсткого задания альбомной ориентации для широкого отчёта до аккуратного масштабирования печатной формы под один лист.
Ниже разобраны конкретные свойства табличного документа, типовой код установки параметров, особенности сохранения настроек, печать без диалога и типичные ошибки, из-за которых документ печатается «не так».
Какие параметры печати доступны у табличного документа
Объект ТабличныйДокумент содержит полный набор свойств, влияющих на вывод на принтер. Основные из них: ОриентацияСтраницы (книжная или альбомная), поля страницы (ПолеСлева, ПолеСправа, ПолеСверху, ПолеСнизу в миллиметрах), МасштабПечати в процентах, флаг АвтоМасштаб, который подгоняет документ под ширину страницы, и РазмерСтраницы для явного указания формата бумаги.
Дополнительно управляются колонтитулы: объекты ВерхнийКолонтитул и НижнийКолонтитул позволяют задать текст слева, в центре и справа, размер шрифта, а также вывод номера страницы и общего количества страниц через шаблоны [&НомерСтраницы] и [&СтраницВсего]. Свойство НомерПервойСтраницы задаёт стартовый номер, а ВыводитьКолонтитулы (в составе колонтитула — свойство Выводить) включает или отключает их печать.
Для контроля разбиения на страницы используются методы ПроверитьВывод() и ПроверитьПрисоединение(): они позволяют заранее проверить, поместится ли очередная область на текущую страницу, и при необходимости вставить разрыв методом ВывестиГоризонтальныйРазделительСтраниц(). Свойства ПовторятьПриПечатиСтроки и ПовторятьПриПечатиКолонки задают сквозные заголовки, повторяемые на каждом листе.
Базовый код установки параметров перед печатью
Типовой сценарий: сформировать табличный документ, установить свойства и только потом вызвать печать. Важно задавать параметры после заполнения документа, но до вызова диалога или команды печати — иначе часть настроек может быть перекрыта сохранёнными пользовательскими значениями.
ТабДок = Новый ТабличныйДокумент;
// ... вывод областей макета ...
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
ТабДок.ПолеСверху = 15;
ТабДок.ПолеСнизу = 15;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ЧерноБелаяПечать = Истина;
ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.ТекстСправа = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ТабДок.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.Использовать);
Метод Напечатать() с параметром РежимИспользованияДиалогаПечати.НеИспользовать отправляет документ на принтер по умолчанию без диалога — это удобно для пакетной печати из регламентных заданий или обработок. Перед такой печатью стоит убедиться, что все параметры заданы явно, потому что интерактивно пользователь ничего скорректировать не сможет.
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.МасштабПечати = 90;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);Сохранение настроек пользователя через КлючПараметровПечати
Если пользователь в диалоге печати меняет ориентацию или поля, платформа может запомнить эти настройки и применить их при следующем открытии того же документа. Для этого у табличного документа должно быть заполнено свойство КлючПараметровПечати — произвольная строка, уникальная для конкретной печатной формы, например "СчетНаОплату_Основной".
Пока ключ не задан, настройки диалога печати не сохраняются, и при каждом выводе применяются значения, установленные в коде или в макете. После заполнения ключа платформа сохраняет параметры в хранилище общих настроек и восстанавливает их автоматически. Если нужно принудительно сбросить устаревшие настройки пользователей, достаточно изменить значение ключа — старые сохранённые параметры перестанут подхватываться.
Практический нюанс: если код жёстко устанавливает свойства после того, как платформа применила сохранённые настройки, код побеждает. Поэтому порядок действий имеет значение — сначала платформа восстанавливает параметры по ключу, затем выполняется ваш программный код. Если нужно отдать приоритет пользователю, задавайте свойства только условно, когда сохранённых настроек ещё нет.
Управление масштабом и размещением на странице
Две взаимоисключающие стратегии — фиксированный масштаб и автомасштаб. Свойство МасштабПечати принимает значение в процентах: 100 — печать без изменений, 80 — уменьшение. Свойство АвтоМасштаб заставляет платформу самостоятельно подобрать масштаб так, чтобы документ уместился по ширине страницы; при включённом автомасштабе значение МасштабПечати игнорируется.
Для широких отчётов и реестров обычно выбирают альбомную ориентацию плюс автомасштаб. Для юридически значимых форм (счета, акты) автомасштаб применяют осторожно: слишком мелкий шрифт делает документ нечитаемым, поэтому лучше контролировать ширину макета ещё на этапе разработки и не допускать выхода за разумные пределы.
Проверить, как документ ляжет на страницы, можно программно: метод КоличествоСтраниц() возвращает число листов с учётом текущих параметров печати. Это удобно для проверки «документ должен занимать ровно одну страницу» — если страниц больше, можно уменьшить масштаб или выдать предупреждение.
Как выбрать подход к масштабу
Печать из типовых конфигураций: подмена параметров макета
В типовых конфигурациях (БСП) печатные формы формируются через менеджер печати: функция СформироватьПечатнуюФорму возвращает структуру с табличным документом. Параметры печати при этом обычно берутся из макета — свойства, заданные в макете конфигуратора, автоматически переходят в результирующий табличный документ.
Поэтому первый способ повлиять на печать в типовой — отредактировать свойства самого макета в конфигураторе: у макета табличного документа есть те же свойства ориентации, полей и колонтитулов. Второй способ — доработать модуль менеджера печати объекта и после получения табличного документа установить нужные свойства кодом. Третий, самый безопасный для обновлений, — внешняя печатная форма, где вы полностью контролируете формирование документа.
При доработке типовых модулей помните о риске обновлений: изменённый типовой модуль менеджера печати придётся сопоставлять при каждом обновлении конфигурации. Внешняя печатная форма или расширение конфигурации изолируют ваши изменения и считаются предпочтительными вариантами.
Проверка результата и типичные ошибки
После установки параметров результат проверяется предварительным просмотром: вызовите ТабДок.Показать() или напечатайте тестовый документ и сверьте ориентацию, поля, колонтитулы и число страниц. Если параметры «не применяются», чаще всего причина в сохранённых пользовательских настройках по КлючПараметровПечати — они перекрывают значения макета.
Ещё одна частая ситуация — разное поведение на тонком и веб-клиенте: диалог печати и предварительный просмотр могут отличаться, а часть настроек принтера недоступна в веб-клиенте без установленного расширения работы с файлами. Печать без диалога через Напечатать(НеИспользовать) на веб-клиенте может быть ограничена политиками браузера.
Как проверить результат
Совпадают с заданными в коде значениями
Применяются старые настройки — проверьте КлючПараметровПечати
Номер страницы и текст выводятся на каждом листе
Колонтитул пуст — не включён Выводить или неверный шаблон
КоличествоСтраниц() соответствует ожиданию
Лишние страницы — ширина макета превышает область печати
FAQ
Как задать поля страницы программно?
Используйте свойства табличного документа ПолеСлева, ПолеСправа, ПолеСверху и ПолеСнизу. Значения указываются в миллиметрах, например: ТабДок.ПолеСлева = 20. Устанавливайте их до вызова Напечатать() или Показать().
Почему мои настройки печати игнорируются?
Наиболее вероятная причина — заполненное свойство КлючПараметровПечати: платформа восстанавливает сохранённые пользователем параметры, и они применяются до выполнения вашего кода. Либо задавайте свойства кодом после восстановления настроек, либо измените ключ, чтобы сбросить старые значения.
Как вывести номер страницы в колонтитуле?
Заполните текст колонтитула с шаблоном [&НомерСтраницы], например: ТабДок.НижнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]". Не забудьте установить ТабДок.НижнийКолонтитул.Выводить = Истина.
Как напечатать документ без диалога печати?
Вызовите метод Напечатать с параметром РежимИспользованияДиалогаПечати.НеИспользовать. Документ уйдёт на принтер по умолчанию, поэтому все параметры (ориентацию, поля, масштаб, копии) нужно задать заранее в коде. На веб-клиенте такая печать может быть ограничена настройками браузера.
Чем АвтоМасштаб отличается от МасштабПечати?
МасштабПечати — фиксированный процент уменьшения или увеличения. АвтоМасштаб заставляет платформу сама подобрать масштаб так, чтобы документ поместился по ширине страницы; при включённом автомасштабе значение МасштабПечати не учитывается.
Как повторять шапку таблицы на каждой странице?
Используйте свойство ПовторятьПриПечатиСтроки, указав область строк с заголовком, например: ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(1, , 3, ). Тогда строки 1–3 будут выводиться вверху каждого листа.
Что важно запомнить
Параметры печати в 1С задаются свойствами ТабличныйДокумент до вызова печати: ориентация, поля в миллиметрах, масштаб, колонтитулы. КлючПараметровПечати включает сохранение пользовательских настроек и должен быть уникальным. Изменения типовых модулей печати безопаснее делать через расширения или внешние печатные формы.