При работе в крупных торговых и логистических компаниях часто возникает задача быстрой печати огромных массивов первичной документации. Когда счет идет на тысячи листов (например, 300 накладных по 7-10 страниц в комплекте, что дает 5000 страниц в час), стандартные методы печати 1С становятся узким местом. В этой статье мы подробно разберем, как сократить время подготовки и вывода документов, проанализируем технические нюансы драйверов и предложим конкретные программные решения для автоматизации процесса.
Прежде чем приступать к оптимизации, разберем основные факторы, замедляющие процесс:
ТабличныйДокумент. Чем больше документов, тем выше нагрузка на процессор одного рабочего места.Для ускорения подготовки документов мы рекомендуем использовать ФоновыеЗадания. Вместо того чтобы ждать, пока один сеанс сформирует 300 комплектов, мы разделим задачу на несколько потоков. Рассмотрим пример логики: создадим обработку, которая делит массив ссылок на части и запускает их выполнение на сервере.
// Пример запуска фоновых заданий для формирования печатных форм
Процедура ЗапуститьПечатьПотоками(МассивДокументов)
КоличествоПотоков = 5;
РазмерПорции = Цел(МассивДокументов.Количество() / КоличествоПотоков);
Для НомерПотока = 1 По КоличествоПотоков Цикл
ПорцияДокументов = Новый Массив;
// Заполняем порцию документов для текущего потока
// ... (логика выделения подмножества массива)
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(ПорцияДокументов);
ФоновыеЗадания.Выполнить("МодульПечати.СформироватьИОтправитьНаПринтер", ПараметрыЗадания);
КонецЦикла;
КонецПроцедуры
Проанализируем этот подход: выполнение на сервере происходит быстрее за счет прямого доступа к данным, а использование нескольких потоков позволяет полностью загрузить многоядерный процессор сервера.
Если в офисе установлено несколько одинаковых производительных принтеров, эффективнее распределять задания между ними программно. Для получения списка доступных принтеров и динамической отправки заданий можно использовать WScript.Network. Рассмотрим код, который позволяет пользователю выбрать принтеры из системы и сохранить их для дальнейшей автоматической рассылки порций документов.
Функция ПолучитьСписокПринтеров()
Список = Новый СписокЗначений;
Попытка
КОМОбъект = Новый COMОбъект("WScript.Network");
Принтеры = КОМОбъект.EnumPrinterConnections();
Сч = 0;
Пока Сч < Принтеры.Count() - 1 Цикл
// Индексы идут парами: порт и имя принтера
ИмяПринтера = Принтеры.Item(Сч + 1);
Список.Добавить(ИмяПринтера, ИмяПринтера);
Сч = Сч + 2;
КонецЦикла;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат Список;
КонецФункции
Выясним, как это применить на практике: вы можете настроить систему так, чтобы УПД уходили на принтер №1, а ТТН — на принтер №2. Однако, как показывает опыт участников обсуждения, при очень больших объемах лучше отправлять полные комплекты на разные принтеры (например, первые 150 заказов на один, вторые 150 — на другой). Это исключает ошибки при ручной сортировке документов по клиентам.
Одним из самых действенных методов является предварительная сборка всех документов в один большой файл перед отправкой на печать. Это позволяет принтеру работать в режиме «непрерывного потока» без пауз между заданиями. Разберем шаги:
ТабличныйДокумент.Вывести() с установкой разделителя страниц.Напечатать().Важный нюанс: метод Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать) на стороне сервера требует, чтобы принтер был установлен как системный для пользователя, под которым запущен агент службы 1С.
Проанализируем влияние системных настроек на скорость. Часто стандартные драйверы используют язык описания страниц GDI, который сильно нагружает процессор компьютера. Переход на PCL6 или PostScript (PS) может существенно ускорить обработку заданий самим принтером.
Рассмотрим рекомендации по настройке Windows Spooler:
Иногда документ не влезает на одну страницу буквально на пару строк, что вынуждает принтер тратить время на печать второго листа (и его переворот в дуплексе). Проанализируем ситуацию: уменьшение масштаба до 95-90% в настройках ТабличныйДокумент может сократить общее количество физических листов в 1.5 раза. Используйте свойство АвтоМасштаб = Истина.
// Оптимизация вывода табличного документа
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // если ТТН широкая
ТабДок.РазмерСтраницы = "A4";
Если программные методы исчерпаны, а скорость печати все еще неудовлетворительна, стоит рассмотреть переход на технику другого класса. Для объемов свыше 500 000 страниц в месяц лазерные принтеры становятся дорогими в обслуживании из-за частого износа печек (фьюзеров).
Хорошим решением являются ризографы или промышленные струйные принтеры (например, серии RISO ComColor). Они используют технологию холодного переноса чернил, что позволяет достигать скорости до 150-160 страниц в минуту. Отсутствие нагревательных элементов исключает риск замятия бумаги от перегрева при длительной непрерывной работе.
Подведем итог нашему разбору. Для достижения цели «5000 страниц за час» необходимо реализовать комплекс мер:
Применяя эти методы, мы сможем сократить время печати с двух часов до целевых 45-50 минут, обеспечив своевременную отгрузку товаров.