При интенсивной отгрузке со склада несколько операторов одновременно отправляют на печать комплекты документов: накладные (ТОРГ-12, УПД), счета-фактуры и прикрепленные к номенклатуре или характеристикам файлы сертификатов качества (в форматах PDF, JPG, TIFF). Если внешние файлы открываются и отправляются на печать стандартными средствами операционной системы отдельно от печатных форм 1С, задания в очереди Windows (Print Spooler) перемешиваются. В результате операторы получают общую стопку бумаги, где сертификаты одной реализации перепутаны с накладными другой.
Разберем основные архитектурные и программные способы решения этой задачи в среде 1С:Предприятие.
Самый прозрачный способ избежать путаницы — отказаться от вызова сторонних программ просмотра и выводить графические файлы непосредственно в результирующий ТабличныйДокумент рядом с накладной. Это позволяет формировать единый документ на каждую реализацию.
Рассмотрим по шагам реализацию этого механизма:
РисунокТабличногоДокумента.Посмотрим на пример программного добавления скана в табличный документ:
ТабДок = Новый ТабличныйДокумент;
// Заполняем основные печатные формы (ТОРГ-12, счет-фактура)
СформироватьПечатнуюФормуНакладной(ТабДок, СсылкаНаРеализацию);
// Добавляем страницу-разделитель для сертификата
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
// Получаем рисунок из файла
КартинкаСертификата = Новый Картинка(ПутьКФайлуСертификата);
ОбластьСертификата = Макет.ПолучитьОбласть("ОбластьСертификат");
ОбластьСертификата.Параметры.НомерНакладной = "К реализации № " + СокрЛП(СсылкаНаРеализацию.Номер) + " от " + Формат(СсылкаНаРеализацию.Дата, "ДФ=dd.MM.yyyy");
// Помещаем картинку в область макета
Рисунок = ОбластьСертификата.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаСертификата;
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Расположить(ОбластьСертификата.Область("R3C1:R40C10"));
ТабДок.Вывести(ОбластьСертификата);
ТабДок.АвтоМасштаб = Истина;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);
Если сертификаты изначально хранятся в формате многостраничных PDF-файлов, преобразование их в картинки внутри 1С может вызывать сложности (штатно платформа 1С не парсит PDF как растровые изображения без внешних библиотек). В таком случае целесообразно формировать единый неделимый спул печати (Print Job) на уровне операционной системы.
Проанализируем алгоритм объединения:
ТабличныйДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF).-print-to или PDFtoPrinter).В результате в очередь печати Windows поступает ровно одно задание на весь комплект реализации. Листы других пользователей физически не смогут вклиниться внутрь пачки документов.
В крупных оптовых компаниях эффективным подходом является помаршрутная или пакетная печать через специальное рабочее место оператора:
При массовой печати графических материалов часто возникают сбои драйверов и переполнение памяти. Выясним основные причины проблем и методы их устранения:
ТабличныйДокумент процесс 1cv8.exe быстро достигает предела дескрипторов GDI (10 000 объектов) или лимита оперативной памяти (~2 ГБ). Рекомендуется перед вставкой в макет сжимать сканы до 150–200 DPI в оттенках серого, либо дробить вывод на пачки по 1–5 реализаций.ТабДок.ОриентацияСтраницы и ТабДок.ИмяПараметровПечати) либо использовать автоповорот страниц при формировании общего PDF-пакета.