Лишние разрывы страниц при печати из 1С 8.3: откуда берутся и как от них избавиться
Содержание
Чтобы убрать лишний разрыв страниц в 1С, откройте печатную форму, вызовите главное меню (значок ≡ в левом верхнем углу) и выберите Файл → Параметры страницы. Включите масштаб «по ширине страницы», уменьшите поля до 5–10 мм, при широкой таблице поставьте альбомную ориентацию. Если причина в ширине или высоте документа, этого хватает, чтобы он перестал «разъезжаться» на две страницы.
Если разрыв стоит посреди таблицы на одном и том же месте при любых настройках, он зашит в макет или в код печати. Тогда исправление делают в Конфигураторе или через расширение. Всё описанное относится к платформе 1С:Предприятие 8.3 и работает одинаково в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других конфигурациях: печать табличных документов — механизм платформы.
Как понять, откуда взялся разрыв: предварительный просмотр
Не начинайте с настроек принтера. Сначала посмотрите, как 1С сама режет документ на листы.
- Сформируйте печатную форму: например,
Печать → Счет на оплатув документе. - В открывшемся окне нажмите главное меню ≡ и выберите
Файл → Предварительный просмотр. - Пролистайте страницы и посчитайте их. Обратите внимание, где именно проходит граница.
После просмотра в самом табличном документе появляются пунктирные линии — это границы листов, которые рассчитала платформа. По их положению видно тип проблемы.
| Что видно в просмотре | Тип разрыва | Где исправлять |
|---|---|---|
| Правый край таблицы ушёл на отдельный лист | Вертикальный, документ шире страницы | Параметры страницы: масштаб, поля, ориентация |
| Таблица обрывается на 2–3 строки раньше конца листа | Горизонтальный, не хватает высоты | Поля, масштаб, высота строк |
| Разрыв всегда в одном месте, даже на почти пустом листе | Принудительный разделитель | Макет или модуль печати |
| На экране одна страница, на бумаге две | Расхождение с драйвером | Драйвер принтера, размер бумаги |
| Каждый документ из списка начинается с нового листа | Штатное поведение пакетной печати | Обычно не требует исправления |
Если в просмотре всё хорошо, а принтер печатает иначе, проблема почти наверняка не в 1С. Переходите сразу к разделу про драйверы.
Параметры страницы и поля: исправление без Конфигуратора
Окно Файл → Параметры страницы доступно любому пользователю. Изменения применяются к текущей печатной форме.
Масштаб
Здесь два варианта:
- ✅ По ширине страницы — платформа сама подбирает масштаб так, чтобы все колонки уместились на лист. Это главный способ убрать вертикальный разрыв.
- 🔢 Процент масштаба — ручное значение. Ставьте 90–95%, если нужно «подтянуть» на лист две-три последние строки. Ниже 80% текст становится мелким, особенно в счетах-фактурах.
Поля
По умолчанию поля часто стоят 10–20 мм с каждой стороны. Уменьшение левого и правого до 5 мм даёт около 20 мм дополнительной ширины. Для документа шириной 200 мм на листе A4 (210 мм) это решает проблему без изменения масштаба.
Не ставьте поля в 0 мм. У большинства принтеров есть непечатаемая зона 3–5 мм по краю. Текст, попавший в неё, просто обрежется.
Ориентация
Широкие формы — товарную накладную ТОРГ-12, УПД, счет-фактуру — разработчики конфигураций уже делают альбомными. Если такая форма печатается книжной, проверьте ориентацию: её могли случайно переключить.
Повтор строк и экземпляры на странице
В этом же окне задают строки, которые повторяются на каждом листе (обычно шапка таблицы). Если повтор захватывает лишние строки, на каждой странице «съедается» место, и разрыв наступает раньше.
Ещё одна настройка — число экземпляров на странице. Значение 2 печатает две копии на одном листе. Если форма в две копии не влезает, 1С переносит вторую на новый лист.
Правка макета печатной формы
Когда разрыв зашит в шаблон, настройки страницы не помогут. Макет можно поправить двумя путями.
Пользовательский макет в режиме 1С:Предприятие
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) есть список Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм.
- Найдите нужный макет поиском по названию.
- Откройте его на изменение. Макет откроется как табличный документ.
- Найдите пунктирную линию разделителя страниц внутри области и удалите её через меню
Таблицаили контекстное меню ячейки. - Заодно проверьте высоту строк и ширину колонок, сохраните изменения.
Изменённый макет хранится в информационной базе и при печати подменяет стандартный. Вернуть исходный вариант можно командой использования стандартного макета в том же списке.
После обновления конфигурации ваш изменённый макет продолжит использоваться, даже если в новом релизе форма изменилась. Если после обновления печать «поплыла», сравните свою версию со стандартной.
Макет в Конфигураторе
Если форма нетиповая или вы дорабатываете конфигурацию, откройте макет в дереве объектов. Обычно он лежит в разделе Макеты документа или в общих макетах.
Что искать в макете:
- 📏 Разделители страниц — горизонтальные или вертикальные пунктирные линии внутри областей. Удалите их.
- ↔️ Колонки за правым краем — пустые, но с ненулевой шириной. Платформа учитывает их при расчёте ширины, и появляется вертикальный разрыв.
- ↕️ Строки с автовысотой — при длинном наименовании номенклатуры строка растягивается на 3–4 высоты и выталкивает итоги на следующий лист.
- 📐 Суммарная ширина колонок — если она больше ширины листа за вычетом полей, разрыв будет всегда.
Не правьте макеты типовой конфигурации на поддержке напрямую. Снятие с поддержки усложняет каждое следующее обновление. Начиная с платформы 8.3.6 изменённый макет можно положить в расширение конфигурации — типовая часть останется нетронутой.
Области печати и строки с переменной высотой
Печатная форма собирается из областей макета: «Шапка», «Строка», «Подвал», «Итоги». Код выводит строку табличной части столько раз, сколько в документе позиций. Отсюда две типичные проблемы.
Подвал отрывается от таблицы. Последние строки остаются на первом листе, а итоги и подписи уходят на второй. Хорошая форма проверяет, влезет ли следующий блок, и переносит вместе с ним хотя бы одну строку таблицы.
Область печати задана слишком узко или широко. У табличного документа есть свойство «область печати». Если она задана, печатается только она. Неудачно заданная область обрезает документ или, наоборот, тянет за собой пустые ячейки.
Причины «гуляющей» высоты строк:
- 🔤 длинные наименования товаров и услуг переносятся по словам;
- 🔤 в комментарии документа вставлен текст с переводами строк;
- 🔤 шрифт макета отсутствует на компьютере, и 1С подставила более широкий.
Последний пункт часто всплывает на терминальных серверах: у пользователя дома документ печатается на одном листе, в офисе через RDP — на двух. Сверьте набор шрифтов на обеих машинах.
Драйвер принтера и системные настройки Windows
1С строит разбивку на страницы, опираясь на параметры принтера по умолчанию. Если драйвер сообщает неверные размеры листа или полей, разрыв появится там, где его не ждут.
Проверьте по порядку:
- Размер бумаги. В настройках принтера Windows должен стоять A4, а не Letter. Letter на 6 мм шире и на 18 мм короче — таблица на A4-разметке перестанет влезать по высоте.
- Масштабирование в драйвере. Опции вроде «Вписать в страницу» или «Уменьшить до размера бумаги» накладываются на масштаб 1С. Двойное масштабирование даёт непредсказуемый результат. Оставьте в драйвере 100%.
- Универсальный драйвер. Драйверы вида «Generic» или «PCL6 Universal» иногда отдают неточные данные о непечатаемой области. Поставьте драйвер конкретной модели с сайта производителя.
- Принтер по умолчанию. Сформируйте форму, когда выбран нужный принтер. Разбивка, посчитанная под один принтер, может не совпасть с другим.
- Проверка через PDF. Напечатайте документ на «Microsoft Print to PDF». Если в PDF одна страница, а на бумаге две — виноват драйвер или сам принтер.
На терминальном сервере принтеры часто пробрасываются через перенаправление с упрощённым драйвером. Если проблема только в RDP-сеансе, поставьте на сервер полноценный драйвер этого принтера или печатайте через PDF.
Как убрать разрывы страниц программно
Для своих печатных форм и внешних обработок разбивку на листы задают в коде. Здесь три приёма.
Найти принудительный разделитель
Принудительный разрыв в коде ставят методом ВывестиГоризонтальныйРазделительСтраниц(), реже ВывестиВертикальныйРазделительСтраниц(). Откройте модуль печати и найдите эти вызовы поиском Ctrl+F. По всей конфигурации удобнее глобальный поиск Ctrl+Shift+F.
В пакетной печати типовых форм разделитель стоит между документами — так каждый документ начинается с нового листа. Это штатное поведение, его не нужно убирать.
Задать параметры страницы при формировании
Чтобы пользователю не приходилось каждый раз лезть в параметры страницы, задайте их в коде сразу после создания табличного документа:
ТабДок = Новый ТабличныйДокумент;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина; // вписать по ширине страницы
ТабДок.ПолеСлева = 10; // поля в миллиметрах
ТабДок.ПолеСправа = 5;
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу = 10;
Свойство АвтоМасштаб делает то же, что флажок «по ширине страницы» в интерфейсе. При нём ручной МасштабПечати не используется.
Не отрывать подвал от таблицы: ПроверитьВывод
Метод ПроверитьВывод() принимает массив областей и возвращает Истина, если они помещаются на текущую страницу. С его помощью переносят строку вместе с подвалом и повторяют шапку таблицы на новом листе:
Для Сч = 1 По ТабличнаяЧасть.Количество() Цикл
ОбластьСтроки.Параметры.Заполнить(ТабличнаяЧасть[Сч - 1]);
МассивПроверки = Новый Массив;
МассивПроверки.Добавить(ОбластьСтроки);
Если Сч = ТабличнаяЧасть.Количество() Тогда
// последнюю строку переносим только вместе с подвалом
МассивПроверки.Добавить(ОбластьПодвала);
КонецЕсли;
Если Не ТабДок.ПроверитьВывод(МассивПроверки) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкиТаблицы);
КонецЕсли;
ТабДок.Вывести(ОбластьСтроки);
КонецЦикла;
ТабДок.Вывести(ОбластьПодвала);
Здесь разделитель ставится осознанно: только тогда, когда следующий блок точно не влезет. Без такой проверки платформа режет таблицу по месту, где кончился лист, — иногда посередине строки с автовысотой.
ПроверитьВывод() считает по параметрам текущего принтера. Поэтому ориентацию, поля и масштаб задавайте до цикла вывода, иначе расчёт будет вестись по настройкам по умолчанию.
Повтор шапки средствами платформы
Вместо ручного вывода шапки можно указать строки для повтора на каждом листе:
ТабДок.ПовторятьПриПечатиСтрок = ТабДок.Область("R5:R6");
Номера строк подставьте свои — те, где в готовом документе стоит шапка таблицы. Платформа сама выведет их на каждой странице и учтёт при разбивке.
Как внедрить правку в типовую конфигурацию
Модуль печати типовой формы лучше не менять напрямую. Рабочие варианты:
- 🧩 Расширение конфигурации — перехват процедуры формирования печатной формы и замена макета. Типовая часть остаётся на поддержке.
- 📄 Внешняя печатная форма — копия формы в виде дополнительной обработки, подключается в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Подходит, если менять нужно много.
Частые вопросы
Можно ли удалить разрыв страницы прямо в окне печати, не трогая макет?
Почему параметры страницы сбрасываются при каждом новом формировании?
Файл → Параметры страницы относятся к текущему табличному документу. При новом формировании форма создаётся заново с параметрами из кода или макета. Для постоянного результата задайте их в макете или в коде формы.