Как в 1С:Предприятие напечатать только нечетные или только четные страницы

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

В повседневной работе бухгалтера или менеджера часто возникает необходимость сэкономить бумагу или подготовить документы для двусторонней печати на обычном принтере, который не поддерживает автоматический дуплекс. В популярных офисных пакетах, таких как Microsoft Word или Excel, печать через запятую (например, 1, 3, 5) является стандартной функцией. Однако в 1С:Предприятие 8.3 пользователи часто сталкиваются с досадным ограничением: встроенный диалог печати позволяет указать либо одну страницу, либо диапазон "с ... по ...", но не список произвольных номеров.

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

Почему в 1С нельзя просто указать страницы через запятую?

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

Выясним причину: количество страниц и их границы зависят от множества факторов: установленного принтера, размера полей, масштаба и даже версии драйвера. Если вы измените принтер в диалоге печати, 1С может пересчитать документ, и то, что было страницей №3, может стать частью страницы №2 или №4. Именно из-за этой динамической природы разработчики платформы ограничили выбор страниц простыми интервалами. Однако мы можем обойти это ограничение несколькими способами.

Способ 1: Настройка драйвера принтера (Ручной дуплекс)

Это самый быстрый способ, не требующий вмешательства программиста. Большинство современных принтеров (даже бюджетных) поддерживают режим двусторонней печати вручную.

  1. Откроем печатную форму в 1С и нажмем кнопку Печать (или вызовем диалог выбора принтера).
  2. В открывшемся окне нажмем кнопку Настройка или Свойства рядом с именем выбранного принтера.
  3. В интерфейсе драйвера (он будет разным для HP, Canon, Epson и т.д.) найдем вкладку "Макет" или "Окончательная обработка".
  4. Ищем параметр Двусторонняя печать и выбираем значение Вручную.
  5. После запуска печати принтер сначала выдаст все нечетные страницы, затем сделает паузу и выведет на экран инструкцию: "Переверните бумагу и положите обратно в лоток". После того как мы это сделаем и нажмем "Продолжить", будут напечатаны четные страницы на оборотах.

Полезный совет: Чтобы не менять настройки каждый раз, проанализируем возможность создания "дубликата" принтера в Windows. Установите тот же самый принтер еще раз, назовите его "МойПринтер (Нечетные)" и в его системных настройках по умолчанию закрепите печать только нечетных страниц. Тогда в 1С вам останется просто выбрать нужный принтер из списка.

Способ 2: Экспорт в PDF (Самый надежный вариант)

Если принтер совсем простой и не поддерживает ручной дуплекс, рассмотрим вариант использования стороннего просмоторщика. Формат PDF идеально подходит для фиксации страниц.

  1. В окне предварительного просмотра 1С выберем пункт меню Файл — Сохранить как....
  2. Выберем тип файла Лист PDF (.pdf) и сохраним его на рабочий стол.
  3. Откроем полученный файл через Adobe Acrobat Reader, Google Chrome или SumatraPDF.
  4. В диалоге печати этих программ почти всегда есть опция "Печатать: Только нечетные страницы".

Этот метод гарантирует, что верстка не "поедет", так как 1С при экспорте жестко фиксирует границы страниц.

Способ 3: Программное разделение документа (Для разработчиков)

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

Для реализации нам понадобится коллекция ГоризонтальныеРазделителиСтраниц. Рассмотрим пример логики:


// Создаем основной документ для расчета
ТабДокОригинал = СформироватьПечатнуюФорму();

// Создаем два документа-приемника
ТабДокНечетные = Новый ТабличныйДокумент;
ТабДокЧетные = Новый ТабличныйДокумент;

ТекущаяСтраница = 1;
КоличествоСтрок = ТабДокОригинал.ВысотаТаблицы;

Для НомерСтроки = 1 По КоличествоСтрок Цикл
    // Проверяем, не является ли текущая строка началом новой страницы
    Если ТабДокОригинал.Область(НомерСтроки, 1, НомерСтроки, 1).ГоризонтальныйРазделительСтраницы Тогда
        ТекущаяСтраница = ТекущаяСтраница + 1;
    КонецЕсли;
    
    ОбластьСтроки = ТабДокОригинал.Область(НомерСтроки, , НомерСтроки, );
    
    Если ТекущаяСтраница % 2 = 1 Тогда // Нечетная
        ТабДокНечетные.Вывести(ОбластьСтроки);
    Иначе // Четная
        ТабДокЧетные.Вывести(ОбластьСтроки);
    КонецЕсли;
КонецЦикла;

// Теперь можем вывести их на экран или сразу на печать
ТабДокНечетные.Показать("Нечетные страницы");
ТабДокЧетные.Показать("Четные страницы");

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

Способ 4: Использование внешних утилит печати

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

Посмотрим на пример кода:


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

// Команда для печати только нечетных страниц через SumatraPDF
// -print-settings "odd" - параметр для выбора страниц
Команда = """C:\Program Files\SumatraPDF\SumatraPDF.exe"" -print-to-default -print-settings ""odd"" " + ПутьКФайлу;
ЗапуститьПриложение(Команда, , Истина);

Такой подход позволяет пользователю нажать одну кнопку "Печать нечетных" прямо в интерфейсе 1С, не видя промежуточных окон PDF-вьюеров.

Способ 5: Работа через COM-объект Excel

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

  1. Сохраняем табличный документ во временный файл Excel.
  2. Инициализируем подключение: Excel = Новый COMОбъект("Excel.Application");.
  3. Используем метод PrintOut, который позволяет передать параметры страниц.

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

Подведем итоги

Мы рассмотрели различные подходы к решению проблемы печати четных и нечетных страниц. Подведем краткий итог:

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

← На главную