При работе в 1С часто возникает классическая проблема «конфликта устройств»: когда на одном рабочем месте установлены и обычный офисный принтер (например, Kyocera), и специализированный термопринтер этикеток (Zebra). Основные симптомы включают печать только одной копии этикетки вместо нескольких, внезапное смещение области печати или «залипание» настроек одного принтера на другом. В этой статье мы подробно разберем, как программно и системно развести эти потоки печати.
Проанализируем ситуацию: платформа 1С по умолчанию пытается сохранить последние настройки печати для каждого конкретного пользователя. Эти данные хранятся в кэше профиля и привязаны к имени отчета или обработки. Если мы печатаем на Kyocera (формат А4, высокое DPI), а затем переключаемся на Zebra (маленькая этикетка, низкое DPI), 1С может ошибочно применить параметры полей и масштаба от офисного принтера к термопринтеру.
Выясним причину смещения: термопринтеры Zebra крайне чувствительны к разрешению (точек на дюйм). Если принтером по умолчанию в Windows назначен Kyocera (600 или 1200 DPI), то 1С рассчитывает координаты вывода табличного документа, исходя из этой плотности. При отправке на Zebra (203 DPI) координаты пересчитываются некорректно, что и вызывает сдвиг текста или штрихкода за пределы этикетки.
Рассмотрим основной программный способ решения проблемы. Для того чтобы 1С не «путала» настройки разных принтеров, необходимо использовать свойства КлючПараметровПечати и ИмяПараметровПечати. Это позволяет системе сохранять настройки для каждого устройства в отдельные ветки реестра или файлы настроек пользователя.
Посмотрим на пример кода, который нужно внедрить в модуль печати этикеток:
// Создаем табличный документ для этикетки
ТабДок = Новый ТабличныйДокумент;
// Задаем уникальный ключ. Это заставит 1С хранить настройки Zebra
// отдельно от настроек Kyocera или других отчетов
ТабДок.КлючПараметровПечати = "УникальныйКлючДляЗебры_Размер58х40";
// Явно указываем имя принтера из настроек или констант
ТабДок.ИмяПринтера = "Zebra 2824";
// Устанавливаем количество экземпляров
ТабДок.КоличествоЭкземпляров = КолвоКопий;
Важно понимать различие: ИмяПараметровПечати обычно используется для сохранения глобальных настроек формы, а КлючПараметровПечати позволяет программно варьировать настройки внутри одного и того же алгоритма в зависимости от условий (например, для разных размеров этикеток).
Проанализируем ситуацию с полями. Обычный принтер всегда имеет «мертвые зоны» (отступы), и 1С по умолчанию добавляет поля в 10 мм. Для термопринтера это критично, так как ширина этикетки может быть всего 30-58 мм. Даже минимальное поле в 1 мм может заставить драйвер Zebra решить, что изображение не помещается, и пропустить этикетку или сдвинуть её.
Рекомендуем всегда программно обнулять поля перед выводом:
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;
// Отключаем автоматическое масштабирование, чтобы избежать искажений DPI
ТабДок.АвтоМасштаб = Ложь;
ТабДок.МасштабПечати = 100;
Если принтер Zebra при выборе 10 копий печатает только одну, это может быть связано с тем, что настройки «заблокировались» после печати на обычном принтере. Рассмотрим два способа решения:
v8spm.lst в папке профиля пользователя (AppData\Roaming\1C\...). Удаление этого файла сбрасывает все запомненные параметры печати и часто «оживляет» Зебру.КоличествоЭкземпляров игнорируется драйвером, можно использовать обходной путь в коде:
Для Итератор = 1 По КолвоКопий Цикл
ТабДок.Напечатать(РежимИспользованияПринтера.ПечатьБезПросмотра);
КонецЦикла;
Хотя этот метод создает больше заданий в очереди печати Windows, он гарантирует, что принтер выдаст нужное количество этикеток, независимо от конфликтов драйверов.
Иногда проблема кроется глубже уровня 1С. Разберем шаги по настройке самой ОС Windows:
Подведем итог: для стабильной работы связки Zebra и Kyocera мы должны обеспечить полную изоляцию их настроек друг от друга. Это достигается за счет:
КлючПараметровПечати для всех термоэтикеток.ИмяПринтера в коде.Соблюдение этих правил позволит вам избежать ситуации, когда кладовщику приходится вручную менять принтер по умолчанию или перезагружать 1С для восстановления корректной печати ценников.