Периодически при пакетной или частой печати документов пользователи сталкиваются с неприятной ситуацией: несколько печатных форм выводятся корректно, а на очередной странице вместо логотипа компании отображается перечеркнутый прямоугольник или большой крест. При этом макет документа не меняется, а сам графический файл остается на месте. Разберем детально, почему возникает такое поведение платформы и графической подсистемы Windows, а также рассмотрим проверенные способы устранения проблемы.
Появление креста вместо изображения сигнализирует о том, что механизм визуализации печатных форм не смог обработать, декодировать или передать растровые данные в спулер печати. Проанализируем ключевые факторы, приводящие к этому сбою:
PNG с 32-битной глубиной цвета (ARGB) и полупрозрачным фоном нередко вызывает сбои при растеризации в драйверах принтеров. Также проблемы вызывают файлы с цветовым пространством CMYK (предназначенным для полиграфии) или чересстрочной разверткой (Interlaced/Progressive).Картинка не может выделить непрерывный блок оперативной памяти для распаковки растра.Первый и наиболее эффективный шаг — подготовка изображения под требования механизмов вывода 1С. Рассмотрим по шагам, какие параметры файла необходимо изменить:
PNG (RGB) без чересстрочности (Non-Interlaced) либо в стандартный JPG (Baseline RGB). Обязательно убедимся, что цветовая модель переведена из CMYK в sRGB.Если оптимизация файла не помогла полностью избавиться от сбоя при массовой печати, изменим параметры обработки заданий в операционной системе:
При работе в терминальном режиме (RDP) или на рабочих местах с интенсивным документооборотом целесообразно поднять системную квоту на количество графических дескрипторов. Выполним следующие действия:
regedit от имени администратора.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows.GDIProcessHandleQuota (по умолчанию его значение составляет 10000).Проанализируем формирование печатной формы на уровне встроенного языка 1С. Если логотип подставляется в макет динамически в цикле, избегайте постоянного создания новых объектов Картинка из двоичных данных или файлов, так как это быстро забивает память сеанса.
Посмотрим на пример правильной инициализации изображения перед циклом формирования строк или документов:
// Неправильно: создание картинки внутри цикла
Для Каждого СсылкаНаДокумент Из МассивДокументов Цикл
ТабДокумент = Новый ТабличныйДокумент;
Рисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = Новый Картинка("C:\Logos\CompanyLogo.png"); // Утечка памяти и дескрипторов
// ... дальнейший вывод макета
КонецЦикла;
// Правильно: однократная инициализация объекта
ЛоготипОрганизации = Новый Картинка("C:\Logos\CompanyLogo.png");
Для Каждого СсылкаНаДокумент Из МассивДокументов Цикл
ТабДокумент = Новый ТабличныйДокумент;
Рисунок = ТабДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = ЛоготипОрганизации; // Повторное использование существующего объекта
// ... дальнейший вывод макета
КонецЦикла;
Также для устранения проблем с памятью при пакетной печати рекомендуется использовать 64-разрядный клиент 1С:Предприятия (x86-64), который не подвержен ограничениям адресного пространства 32-битных процессов.