Как организовать пакетную печать накладных и сканов сертификатов в 1С без перемешивания листов?

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

При интенсивной отгрузке со склада несколько операторов одновременно отправляют на печать комплекты документов: накладные (ТОРГ-12, УПД), счета-фактуры и прикрепленные к номенклатуре или характеристикам файлы сертификатов качества (в форматах PDF, JPG, TIFF). Если внешние файлы открываются и отправляются на печать стандартными средствами операционной системы отдельно от печатных форм 1С, задания в очереди Windows (Print Spooler) перемешиваются. В результате операторы получают общую стопку бумаги, где сертификаты одной реализации перепутаны с накладными другой.

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

Способ 1. Вывод изображений сертификатов напрямую в макет 1С с маркировкой

Самый прозрачный способ избежать путаницы — отказаться от вызова сторонних программ просмотра и выводить графические файлы непосредственно в результирующий ТабличныйДокумент рядом с накладной. Это позволяет формировать единый документ на каждую реализацию.

Рассмотрим по шагам реализацию этого механизма:

  1. Извлекаем двоичные данные или путь к файлу сертификата, привязанному к строке номенклатуры документа реализации.
  2. Создаем область макета с объектом РисунокТабличногоДокумента.
  3. Загружаем изображение и выводим его в общий табличный документ пакета.
  4. Программно наносим в колонтитул или текстовое поле макета номер и дату документа реализации. Это гарантирует, что даже при случайном падении стопки бумаг каждый лист сертификата будет однозначно привязан к своей накладной.

Посмотрим на пример программного добавления скана в табличный документ:


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

// Заполняем основные печатные формы (ТОРГ-12, счет-фактура)
СформироватьПечатнуюФормуНакладной(ТабДок, СсылкаНаРеализацию);

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

// Получаем рисунок из файла
КартинкаСертификата = Новый Картинка(ПутьКФайлуСертификата);

ОбластьСертификата = Макет.ПолучитьОбласть("ОбластьСертификат");
ОбластьСертификата.Параметры.НомерНакладной = "К реализации № " + СокрЛП(СсылкаНаРеализацию.Номер) + " от " + Формат(СсылкаНаРеализацию.Дата, "ДФ=dd.MM.yyyy");

// Помещаем картинку в область макета
Рисунок = ОбластьСертификата.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаСертификата;
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Расположить(ОбластьСертификата.Область("R3C1:R40C10"));

ТабДок.Вывести(ОбластьСертификата);
ТабДок.АвтоМасштаб = Истина;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Способ 2. Объединение комплекта в единый PDF-файл перед печатью

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

Проанализируем алгоритм объединения:

  1. Штатные печатные формы 1С сохраняются во временный PDF-файл методом ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF).
  2. Консольной утилитой (например, PDFtk, QPDF или pdfunite) временный файл накладной склеивается с файлами сертификатов в один результирующий PDF-документ.
  3. Итоговый PDF отправляется на принтер единой командой через утилиту командной строки (например, SumatraPDF с ключом -print-to или PDFtoPrinter).

В результате в очередь печати Windows поступает ровно одно задание на весь комплект реализации. Листы других пользователей физически не смогут вклиниться внутрь пачки документов.

Способ 3. Пакетная печать по маршрутам и разделители заданий

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

  1. Оператор формирует маршрутный лист или реестр отгрузок за рейс.
  2. Обработка собирает все накладные и сертификаты по выбранным реализациям и отправляет их в печать пачкой.
  3. Перед каждым комплектом документов выводится страница-разделитель (крупный штрихкод реализации, номер маршрута, список вложенных сертификатов). Это позволяет кладовщикам и упаковщикам быстро идентифицировать границы заказов.
  4. Для разделения потоков разных операторов настраивается печать на разные физические принтеры либо разные лотки одного производительного сетевого МФУ.

Технические нюансы и устранение типичных ошибок

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

  1. Переполнение памяти 32-битного клиента 1С: При вставке десятков тяжелых несжатых изображений в один ТабличныйДокумент процесс 1cv8.exe быстро достигает предела дескрипторов GDI (10 000 объектов) или лимита оперативной памяти (~2 ГБ). Рекомендуется перед вставкой в макет сжимать сканы до 150–200 DPI в оттенках серого, либо дробить вывод на пачки по 1–5 реализаций.
  2. Ошибки драйверов принтера (PCL6 ReadImage Error, пустые листы): Сложная графика и растровые таблицы могут сбоить на драйверах PCL6. Переход на драйвер стандарта PCL5 или PostScript (PS) на сервере печати в большинстве случаев решает проблему зависания и пропуска картинок.
  3. Переворот страниц при двусторонней печати (Duplex): Если накладная имеет книжную ориентацию, а приложенный сертификат или счет-фактура — альбомную, драйвер принтера может напечатать оборотную сторону вверх ногами из-за смены длинной/короткой стороны переплета. Для исключения этой проблемы настройки ориентации следует жестко фиксировать в параметрах страницы табличного документа (ТабДок.ОриентацияСтраницы и ТабДок.ИмяПараметровПечати) либо использовать автоповорот страниц при формировании общего PDF-пакета.
← На главную