Почему макет печати в 1С выводит пустые страницы и как это исправить

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

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

В этой статье мы подробно разберем, почему возникает этот эффект, проанализируем неочевидные причины растягивания табличных документов и рассмотрим пошаговые методы устранения этой проблемы раз и навсегда.

Причина 1. Скрытая разметка и невидимые границы на краях макета

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

Как показывает практика практикующих разработчиков, часто виновником становится едва заметная вертикальная пунктирная линия разметки (граница страницы), которая может находиться в 100-й или 150-й колонке макета. Ее практически невозможно заметить при обычном открытии макета, так как она сливается с краем окна Конфигуратора или скрыта за областью прокрутки.

Разберем по шагам, как очистить макет от скрытого форматирования:

  1. Откроем проблемный макет в Конфигураторе.
  2. Прокрутим таблицу вправо до самого конца (нажмите клавишу End или воспользуйтесь горизонтальной полосой прокрутки). Обратите внимание на наличие тонких пунктирных линий разметки страниц у правой границы рабочего поля.
  3. Выделим все «лишние» колонки, расположенные справа от нашей реальной печатной формы. Для этого кликнем по заголовку первой пустой колонки справа от макета, зажмем комбинацию клавиш Ctrl + Shift + Стрелка вправо, чтобы выделить абсолютно все неиспользуемые колонки до самого конца таблицы.
  4. Нажмем правой кнопкой мыши на заголовок любой выделенной колонки и выберем команду Удалить.
  5. Для гарантии очистки метаданных выделим ту же область пустых ячеек и перейдем в главное меню: Таблица — Очистить — Все. Это действие сбросит любые невидимые свойства ячеек, включая шрифты, рамки и цвета.
  6. Повторим аналогичную процедуру для строк снизу: выделим все пустые строки ниже нашей печатной формы до самого низа таблицы и удалим их через контекстное меню, после чего выполним команду очистки.

Причина 2. Отсутствие автоматического масштабирования табличного документа

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

Чтобы избежать подобных ситуаций, мы должны явно указать платформе, что документ необходимо масштабировать под ширину печатного листа.

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


ТабличныйДокумент = Новый ТабличныйДокумент;
// ... Код заполнения областей макета ...
ТабличныйДокумент.АвтоМасштаб = Истина;

Установка свойства АвтоМасштаб в значение Истина заставит платформу пропорционально сжать содержимое макета так, чтобы оно целиком поместилось по ширине листа бумаги, предотвращая образование пустых страниц справа.

Причина 3. Использование сохраненных параметров печати пользователя

Бывает так: разработчик исправил макет, проверил его под своей учетной записью — все выводится на одну страницу. Однако у конкретного пользователя в режиме «1С:Предприятие» при печати того же самого документа по-прежнему вылезает куча пустых страниц. Причина кроется в механизме сохранения индивидуальных настроек принтера и страницы в системном кэше 1С.

Когда в коде формирования печатной формы задано свойство ИмяПараметровПечати, платформа сохраняет масштаб, поля и ориентацию страницы, которые пользователь выбрал при первой печати. Если когда-то ранее пользователь случайно изменил поля или масштаб, эти некорректные настройки будут применяться к его печатной форме постоянно, игнорируя изменения самого макета в Конфигураторе.

Рассмотрим, как решить эту проблему:

Вариант А. Интерактивный сброс настроек пользователем:

  1. Пользователю необходимо открыть печатную форму документа в режиме «1С:Предприятие».
  2. Перейти в меню Файл — Параметры страницы.
  3. В открывшемся окне проверить установленный масштаб. Если там стоит фиксированный масштаб (например, 100%), необходимо переключить переключатель в положение По ширине листа.
  4. Нажать кнопку ОК, чтобы сохранить настройки в системном кэше.

Вариант Б. Программный сброс параметров разработчиком:

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


// Было: ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг";
// Изменяем имя параметров печати, чтобы сбросить кэш у всех пользователей:
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Новый";

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

Причина 4. Некорректная программная вставка разделителей страниц

Если пустые страницы появляются строго внизу документа (после вывода всех данных), стоит внимательно проанализировать алгоритм компоновки табличного документа в цикле. Распространенной ошибкой является безусловный вывод горизонтального разделителя страниц.

Рассмотрим пример ошибочного кода:


Для Каждого СтрокаДанных Из ТаблицаТоваров Цикл
    // Вывод области строки
    ТабличныйДокумент.Вывести(ОбластьСтрока);
    // Ошибочный безусловный вывод разделителя страниц
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЦикла;

В данном примере на последней итерации цикла, когда все полезные данные уже выведены, программа все равно добавит в табличный документ команду ВывестиГоризонтальныйРазделительСтраниц(). В результате в самом конце печатной формы образуется пустой лист. Чтобы этого избежать, всегда добавляйте условие проверки окончания обхода коллекции:


ВсегоСтрок = ТаблицаТоваров.Количество();
Для Индекс = 0 По ВсегоСтрок - 1 Цикл
    СтрокаДанных = ТаблицаТоваров[Индекс];
    ТабличныйДокумент.Вывести(ОбластьСтрока);
    
    // Выводим разделитель только если это не последняя строка
    Если Индекс < ВсегоСтрок - 1 Тогда
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
КонецЦикла;

Причина 5. Сбои драйверов принтеров при работе в терминальном режиме (RDP)

В редких случаях макет сверстан идеально, в коде прописан АвтоМасштаб, но при работе пользователей через удаленный рабочий стол (RDP) на печать выводятся пустые листы. Это связано с тем, что 1С запрашивает параметры области печати (минимально допустимые поля) у драйвера принтера, установленного по умолчанию в сессии пользователя.

Если драйвер передан некорректно (например, при использовании стандартного Easy Print в Windows Server без установки родных драйверов на сервере), платформа может получить неверные физические размеры полей принтера (например, нулевые или слишком большие границы). 1С ошибочно считает, что макет не помещается на стандартный лист, и принудительно дробит его на части.

Для решения этой проблемы системному администратору необходимо обновить драйверы принтеров на терминальном сервере до актуальных версий или использовать универсальные драйверы печати (Universal Printer Driver) от производителя печатного оборудования.

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

← На главную