Как в 1С:УПП сохранить сразу несколько печатных форм в один PDF-файл?

Пользователь 1С v8.3 (Обычные формы) Управленческий учет
← На главную

При работе в конфигурации «Управление производственным предприятием» (УПП) пользователи часто сталкиваются с необходимостью массовой печати или сохранения документов. Стандартная «Групповая обработка справочников и документов» позволяет вывести документы на печать, но при попытке сохранения она либо открывает каждое окно отдельно, либо требует ручного подтверждения для каждого файла. Если документов сотни, процесс превращается в рутину. В этой статье мы подробно разберем, как автоматизировать этот процесс и объединить все печатные формы в один удобный PDF-файл.

Метод 1: Использование виртуального PDF-принтера

Это самый простой и доступный способ для обычного пользователя, не требующий изменения программного кода 1С. Суть метода заключается в установке специальной программы, которая имитирует физический принтер, но вместо печати на бумаге «собирает» все входящие задания в один электронный документ.

Рассмотрим алгоритм действий при использовании виртуального принтера (на примере pdfFactory или PDFCreator):

  1. Установка ПО: Сначала необходимо скачать и установить виртуальный принтер (например, pdfFactory, Bullzip PDF Printer или PDFCreator). После установки он появится в списке принтеров вашей операционной системы.
  2. Настройка очереди: Откроем настройки установленного принтера. Важно убедиться, что включена опция накопления заданий или автоматического слияния (Merge).
  3. Групповая печать из 1С:
    • Запустим в 1С:УПП «Групповую обработку справочников и документов».
    • Отберем нужные документы (например, «Заказы покупателей» или «Реализации товаров и услуг»).
    • В списке действий выберем «Печать документов».
    • В появившемся диалоге выбора принтера выберем наш виртуальный принтер.
  4. Объединение: После того как 1С отправит все формы на печать, виртуальный принтер перехватит их. Программа покажет список всех страниц. Нам остается лишь нажать кнопку «Сохранить» или «Save PDF», и программа создаст один общий файл из всех переданных документов.

Метод 2: Программное объединение через «Табличный документ»

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

Проанализируем ситуацию: платформа 1С, начиная с версии 8.2.14, умеет сохранять объект ТабличныйДокумент напрямую в формат PDF. Главная задача — «склеить» несколько печатных форм в одну общую таблицу.

Разберем по шагам пример кода для реализации этой задачи:

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


// Создаем общий контейнер для всех печатных форм
ОбщийТабДок = Новый ТабличныйДокумент;

Для Каждого СсылкаИзСписка Из МассивСсылок Цикл
    
    // Получаем печатную форму конкретного документа
    // Обычно это функция Печать() в модуле менеджера или объекта
    ТекущийТабДок = СсылкаИзСписка.ПолучитьОбъект().Печать();
    
    // Добавляем текущую форму в конец общего документа
    ОбщийТабДок.Вывести(ТекущийТабДок);
    
    // Вставляем разрыв страницы, чтобы каждый документ начинался с нового листа
    ОбщийТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    
КонецЦикла;

// Настраиваем параметры сохранения (опционально)
ОбщийТабДок.АвтоМасштаб = Истина;
ОбщийТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

// Сохраняем итоговый результат в один файл PDF
ПутьКФайлу = "C:\MyDocuments\AllDocuments.pdf";
ОбщийТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

Сообщить("Файл успешно сохранен: " + ПутьКФайлу);

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

Метод 3: Использование внешних утилит (Post-processing)

Иногда возникают ситуации, когда документы уже сохранены как отдельные PDF-файлы (например, сторонним сервисом). Чтобы не объединять их вручную, мы можем воспользоваться консольными утилитами, такими как PDFtk.

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

Пример использования команды в среде Windows через 1С:


КомандаСклейки = "pdftk C:\Temp\*.pdf cat output C:\Temp\Result.pdf";
ЗапуститьПриложение(КомандаСклейки, , Истина);

В данном примере pdftk берет все файлы PDF из временной папки и объединяет их в один файл Result.pdf. Параметр Истина в функции ЗапуститьПриложение заставляет 1С дождаться завершения процесса склейки.

Особенности платформы 8.3.15 и выше

Посмотрим на развитие функционала платформы. Если ваша база УПП работает на современной версии платформы 8.3 (даже в режиме совместимости), вы можете воспользоваться обновленным системным диалогом печати. В некоторых случаях при выделении нескольких строк в списке заданий на печать, система предлагает опцию «Сохранить как PDF», которая может поддерживать объединение в зависимости от настроек драйвера печати и версии операционной системы.

Рекомендации по оптимизации процесса

При массовом сохранении (например, более 500 документов за раз) проанализируем возможные проблемы:

Подводя итог, можно сказать, что для быстрого решения «здесь и сейчас» оптимально использовать виртуальный принтер. Для создания надежного и повторяемого инструмента внутри системы 1С:УПП лучше всего реализовать небольшую доработку с использованием метода Вывести() для объекта ТабличныйДокумент.

← На главную