Как напечатать две копии документа на одном листе в 1С и проверить это в предпросмотре?

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

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

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

Выясняем причину: почему настройка «Копий: 2» не объединяет их на одном листе?

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

Когда мы открываем печатную форму и в системном диалоге печати выставляем параметр «Число копий: 2», платформа 1С генерирует один табличный документ (одну страницу) и отправляет его в спулер печати операционной системы с флагом двоекратного повторения. Драйвер принтера воспринимает эту команду буквально: «напечатай этот документ два раза подряд». Для принтера это абсолютно независимые задания, поэтому он честно распечатает два отдельных листа А4.

Чтобы заставить 1С или принтер объединить эти две копии на одном физическом листе, нам нужно использовать другие механизмы. В 1С за это отвечает свойство табличного документа ЭкземпляровНаСтранице, а в драйвере принтера — функция многостраничной компоновки (N-up).

Решение 1. Настройка параметров страницы в 1С (Для пользователей)

Если нам нужно быстро распечатать документ в двух экземплярах на одном листе и убедиться через предпросмотр, что всё поместилось, выполним следующие шаги:

  1. Откроем необходимый документ в 1С и нажмем кнопку «Печать», чтобы сформировать табличный документ на экране.
  2. Перейдем в главное меню 1С (круглая кнопка со стрелкой в левом верхнем углу или меню «Файл») и выберем пункт «Параметры страницы».
  3. В открывшемся окне найдем параметр «Экземпляров на страницу». По умолчанию там установлено значение Авто или 1. Изменим его, выбрав значение 2.
  4. Здесь же обязательно проверим, чтобы был установлен флаг «Ландшафт» (для широких документов) или «Портрет» (для узких), а также включена опция «По ширине листа» в поле масштаба. Это позволит платформе автоматически сжать документ, чтобы обе копии поместились без обрезки полей.
  5. Нажмем кнопку «ОК» для сохранения настроек.

Теперь откроем предварительный просмотр печати. Мы увидим один виртуальный лист А4, разделенный визуально пополам, на каждой половине которого будет отображаться наш документ. Если под документом в строке состояния написано «1 из 1» — значит, оба экземпляра успешно поместились на одном листе. Если же написано «1 из 2», это сигнализирует о том, что высота нашего документа слишком велика, и часть второго экземпляра перенеслась на следующий лист. В этом случае мы можем вручную уменьшить высоту строк в табличном документе или установить количество экземпляров обратно в 1, чтобы не испортить бланк. Для настройки и корректировки макетов без доработки конфигурации пригодится инструкция по редактированию печатных форм в типовых программах 1С.

Решение 2. Использование настроек драйвера принтера

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

  1. В окне печатной формы 1С нажмем кнопку «Печать...» (или сочетание клавиш Ctrl + P) для вызова диалогового окна печати Windows.
  2. Выберем нужный принтер из списка и нажмем кнопку «Свойства» (или «Настройка»).
  3. В открывшемся окне настроек драйвера принтера найдем вкладку, отвечающую за компоновку страниц. В зависимости от марки принтера (HP, Canon, Kyocera, Brother) этот параметр может называться по-разному: «Страниц на листе», «Макет страницы», «N-up» или «Мультистраничность».
  4. Установим значение этого параметра равным «2 на листе» (2-up).
  5. В поле «Порядок страниц» укажем направление вывода (например, слева направо или сверху вниз).
  6. В самом диалоговом окне печати 1С укажем «Количество копий: 2» и нажмем кнопку «Печать».

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

Решение 3. Программная реализация в конфигураторе (Для разработчиков)

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

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


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

// Получаем область макета нашего акта
ОбластьМакета = Макет.ПолучитьОбласть("Акт");

// Заполняем параметры первой копии
ОбластьМакета.Параметры.Заполнить(ДанныеДокумента);
ТабДок.Вывести(ОбластьМакета);

// Принудительно вставляем горизонтальный разделитель страниц
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

// Выводим вторую копию того же макета
ТабДок.Вывести(ОбластьМакета);

// Настраиваем параметры отображения на одном листе
ТабДок.ЭкземпляровНаСтранице = 2;
ТабДок.АвтоМасштаб = Истина;

// Выводим заполненный документ на экран
ТабДок.Показать("Печать акта оказанных услуг");

Использование метода ВывестиГоризонтальныйРазделительСтраниц() принципиально важно. Именно благодаря ему 1С формирует внутреннюю структуру документа из двух страниц. А свойство ТабДок.ЭкземпляровНаСтранице = 2 дает команду платформе объединить эти две страницы при выводе на печать или в предпросмотре. При создании подобных решений с нуля можно опереться на готовый пример внешней печатной формы на актуальной версии БСП.

Решение 4. Как вывести копии с разным текстом (например, «Оригинал» и «Копия»)

Часто бизнес-процессы компании требуют, чтобы на первом экземпляре документа было написано «Оригинал», а на втором — «Копия» или «Экземпляр для покупателя» / «Экземпляр для поставщика». Обычными средствами принтера этого сделать нельзя, так как принтер просто дублирует картинку. Но мы можем легко решить эту задачу в коде 1С с помощью цикла.

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


// Инициализируем табличный документ
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетАкта");
ОбластьМакета = Макет.ПолучитьОбласть("ТелоАкта");

КоличествоКопий = 2;

Для НомерКопии = 1 По КоличествоКопий Цикл
    
    // Заполняем основные реквизиты документа
    ОбластьМакета.Параметры.Заполнить(ДанныеПечати);
    
    // Управляем текстом пометки в зависимости от номера итерации
    Если НомерКопии = 1 Тогда
         ОбластьМакета.Параметры.ТекстПометкиКопии = "Оригинал (Экземпляр №1)";
    Иначе
         ОбластьМакета.Параметры.ТекстПометкиКопии = "Копия (Экземпляр №" + НомерКопии + ")";
    КонецЕсли;
    
    // Выводим заполненную область в документ
    ТабДок.Вывести(ОбластьМакета);
    
    // Если это не последний экземпляр, добавляем разделитель страниц
    Если НомерКопии < КоличествоКопий Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    
КонецЦикла;

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

// Показываем пользователю готовый результат
ТабДок.Показать("Печать документов с маркировкой копий");

В данном примере мы использовали параметр макета ТекстПометкиКопии. Перед выводом каждой области мы проверяем текущую итерацию цикла и подставляем соответствующую строку. В результате пользователь получает документ, идеально скомпонованный на одном листе А4, где один экземпляр четко обозначен как оригинал, а второй — как копия.

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

← На главную