Как задать печать страниц в обратном порядке в 1С?

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

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

Рассмотрим подробнее доступные проверенные способы реализации печати в обратном порядке — от изменения настроек драйвера до программных методов обхода ограничений платформы.

Способ 1. Настройка параметров принтера через диалог печати 1С

Выясним самый простой пользовательский способ. При вызове формы печати из 1С можно перейти в системные свойства выбранного принтера. В большинстве современных драйверов печати (HP, Kyocera, Canon и др.) присутствует специальная опция для обратной печати.

Разберем порядок действий:

  1. Откроем печатную форму в 1С и вызовем команду печати с отображением диалога.
  2. В появившемся окне выбора принтера перейдем в «Свойства» (или «Настройки печати») конкретного устройства.
  3. Найдем опцию «Печать в обратном порядке» (или «Reverse order» / «С последней страницы») и установим флажок.
  4. Подтвердим выбор и отправим документ на печать.

Этот способ идеален, если необходимость в обратной печати возникает эпизодически и настраивается вручную пользователем.

Способ 2. Использование дубликата принтера в операционной системе

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

Посмотрим на шаги реализации:

  1. В операционной системе добавим еще один принтер, использующий тот же драйвер, и дадим ему имя, например, «Принтер_Обратный».
  2. В настройках печати созданного принтера на уровне ОС по умолчанию включим флажок печати в обратном порядке.
  3. В коде 1С перед выводом на печать укажем имя подготовленного принтера с помощью свойства ИмяПринтера.

Рассмотрим пример кода на языке 1С:


ТабДок = Новый ТабличныйДокумент;
// Сформировать печатную форму...
ТабДок.ИмяПринтера = "Принтер_Обратный";
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

При таком подходе платформа передает документ штатно, а перестановку страниц берет на себя драйвер операционной системы.

Способ 3. Программная разбивка табличного документа на страницы

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

Проанализируем алгоритм с использованием метода ПроверитьВывод():


МассивСтраниц = Новый Массив;
ТабДокСтр = Новый ТабличныйДокумент;

// Заполняем массив отдельными страницами
Для Каждого Область Из МассивОбластей Цикл
    ТестМассив = Новый Массив;
    ТестМассив.Добавить(Область);
    
    Если Не ТабДокСтр.ПроверитьВывод(ТестМассив) Тогда
        МассивСтраниц.Добавить(ТабДокСтр);
        ТабДокСтр = Новый ТабличныйДокумент;
    КонецЕсли;
    
    ТабДокСтр.Вывести(Область);
КонецЦикла;

Если ТабДокСтр.ВысотаТаблицы > 0 Тогда
    МассивСтраниц.Добавить(ТабДокСтр);
КонецЕсли;

// Печатаем страницы в обратном порядке (от последней к первой)
Счетчик = МассивСтраниц.Количество() - 1;
Пока Счетчик >= 0 Цикл
    ТекущаяСтраница = МассивСтраниц[Счетчик];
    ТекущаяСтраница.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
    Счетчик = Счетчик - 1;
КонецЦикла;

Данный подход гарантирует абсолютную независимость от типа принтера и используемых драйверов.

Способ 4. Экспорт в PDF и печать через внешнюю утилиту

Рассмотрим еще один метод: сохранение табличного документа во временный PDF-файл с последующим вызовом командной строки или скрипта PowerShell для печати с нужными параметрами.

Посмотрим на пример кода сохранения и запуска внешнего приложения:


ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf");
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

// Запуск утилиты печати с ключом инверсии страниц
КомандаЗапуска = "pdf_print_utility.exe -print-reverse " + ПутьКФайлу;
ЗапуститьПриложение(КомандаЗапуска, , Истина);

Способ 5. Экспорт и печать через COM-объект MS Word

Если на рабочих местах установлен пакет Microsoft Office, разберем вариант передачи документа через COM-соединение. В MS Word встроен штатный параметр порядка вывода страниц при вызове метода PrintOut.

Посмотрим пример реализации:


ПутьКФайлу = ПолучитьИмяВременногоФайла("docx");
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.DOCX);

MSWord = Новый COMОбъект("Word.Application");
MSWord.Documents.Open(ПутьКФайлу);

// Вызов печати с параметром PrintReverse = Истина
MSWord.ActiveDocument.PrintOut(Ложь, , , , , , , , , , , , , , , , , Истина);
MSWord.Quit();

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

← На главную