Как решить проблему нечитаемых штрихкодов при печати из 1С через RDP на принтерах Zebra

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

Рады приветствовать вас, коллеги! Сегодня мы детально разберем одну из самых коварных и часто встречающихся проблем в администрировании торговых систем — порчу качества штрихкодов при печати из терминальной сессии 1С на локальный принтер этикеток (чаще всего с этим сталкиваются владельцы принтеров Zebra TLP 2824, LP 2824 Plus и аналогичных).

Ситуация выглядит следующим образом: локально с клиентского компьютера под управлением Windows штрихкоды печатаются идеально и отлично считываются любыми сканерами. Но стоит пользователю зайти в терминальную сессию 1С на сервере (например, Windows Server 2008 R2 / 2012 / 2016 / 2019) и отправить этикетку на печать через проброшенный принтер RDP, как визуально штрихкод кажется нормальным, но лазерные сканеры наотрез отказываются его распознавать. При детальном рассмотрении выясняется, что происходит микроискажение линий: теряются отдельные пиксели, размываются границы штрихов, черные полосы слипаются. Выясним причину этого поведения и разберем по шагам все возможные методы решения.

Почему RDP портит штрихкоды? Анализируем причины

Главная причина кроется в технологии Remote Desktop Easy Print. По умолчанию при подключении к удаленному рабочему столу операционная система Windows использует универсальный драйвер Easy Print для перенаправления печати. Эта технология преобразует графические данные и текстовые документы в формат XPS на стороне сервера, передает их на клиентскую машину по виртуальному каналу RDP, а клиентский компьютер уже силами локального драйвера выводит документ на печать.

Для обычных офисных документов формата А4 это отличное решение, избавляющее администраторов от необходимости устанавливать сотни различных драйверов на сервер. Но для специализированных термопринтеров с физическим разрешением печати 203 DPI (dots per inch) такое промежуточное преобразование графики оказывается фатальным. Происходит интерполяция (масштабирование) картинки, из-за чего строго контрастные черные и белые линии штрихкода превращаются в размытые серые полутона, края штрихов становятся «рваными», а пропорции толщины линий нарушаются. Лазерный сканер, считывающий штрихкод по соотношению ширины черных и белых полос, выдает ошибку декодирования.

Рассмотрим подробнее эффективные способы решения этой проблемы — от простой настройки политик сервера до аппаратной печати.

Способ 1. Отключение Remote Desktop Easy Print и установка родных драйверов

Это классическое и наиболее правильное решение, которое помогает в 90% случаев. Мы заставим сервер использовать «родной» драйвер принтера Zebra вместо универсального Easy Print.

Шаг 1. Отключение Easy Print через групповые политики сервера:

  1. Нажмите на терминальном сервере комбинацию клавиш Win + R, введите gpedit.msc и нажмите Enter.
  2. В открывшемся редакторе локальной групповой политики перейдите по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.
  3. Найдите параметр «Использовать в первую очередь драйвер принтера Easy Print служб удаленных рабочих столов» (Use Remote Desktop Easy Print printer driver first).
  4. Дважды кликните по нему, переведите переключатель в положение «Отключено» (Disabled) и нажмите «ОК».

Шаг 2. Установка оригинального драйвера на сервер:

  1. Скачайте точно такую же версию драйвера Zebra (желательно использовать оригинальные драйверы ZebraDesigner или Seagull Scientific), которая установлена на локальном компьютере пользователя.
  2. Установите этот драйвер на терминальном сервере. Важно, чтобы имена драйверов на сервере и клиенте совпадали до каждого символа, иначе сервер не сможет сопоставить принтер и все равно попытается применить Easy Print или откажется подключать устройство.
  3. После установки драйверов перезапустите службу диспетчера печати (Spooler) на сервере или просто перезагрузите терминальную сессию пользователя. Теперь в списке принтеров в свойствах проброшенной Зебры в поле «Модель» должен отображаться оригинальный драйвер Zebra, а не «Microsoft Easy Print».

Способ 2. Подключение Zebra как сетевого принтера (в обход маппинга RDP)

Если пользователи работают в локальной сети компании или связаны стабильным VPN-каналом с сервером, отличным решением будет отказаться от проброса портов RDP (маппинга) и подключить принтер напрямую к серверу как сетевой.

Проанализируем этот процесс:

  1. На клиентском компьютере, к которому физически подключен принтер Zebra по USB, откройте свойства принтера и на вкладке «Доступ» установите галочку «Общий доступ к данному принтеру». Задайте простое сетевое имя латиницей, например, Zebra2824.
  2. На терминальном сервере откройте «Панель управления» -> «Устройства и принтеры» -> «Добавление принтера».
  3. Выберите пункт «Добавить сетевой, беспроводной или Bluetooth-принтер», найдите расшаренный принтер по сети (путь вида \\Имя_Компьютера_Клиента\Zebra2824) и установите для него драйверы на сервере.

В этом сценарии отправка заданий печати из 1С идет по сетевому протоколу Windows напрямую в драйвер принтера, минуя какие-либо преобразования графики каналами RDP. Печать штрихкодов становится идеально четкой.

Способ 3. Отключение дизеринга (сглаживания полутонов) в драйвере

Когда штрихкод формируется в 1С (особенно через объект КомпонентаПечатиШтрихкодов), он передается на печать как графический объект. Драйвер принтера по умолчанию может пытаться сгладить резкие переходы цветов (применить дизеринг), чтобы картинка выглядела «мягче». Для текстовых принтеров этикеток это губительно.

Настроим параметры графики в драйвере принтера (настройку нужно выполнить как на локальном ПК, так и на сервере в свойствах принтера):

  1. Зайдите в «Устройства и принтеры», кликните правой кнопкой мыши по принтеру Zebra и выберите «Настройка печати» (Printing Preferences).
  2. Перейдите на вкладку «Параметры устройства» или «Графика» (в зависимости от версии драйвера название может отличаться, например, «Graphics Setup»).
  3. Найдите параметр Dithering (Полутоновое сглаживание / Дитеринг) и установите значение None (Нет) или Threshold (Порог). Это заставит принтер обрабатывать картинку строго бинарно: либо абсолютно черный пиксель, либо абсолютно белый, убирая любые промежуточные серые точки на краях линий штрихкода.

Способ 4. Корректировка масштабирования экрана (DPI) в сессии RDP

Если на компьютере пользователя установлена современная ОС (Windows 10/11) с высоким разрешением экрана (например, Full HD на маленьком ноутбуке), в системе часто включено масштабирование интерфейса (125% или 150%). При подключении по RDP сервер пытается смасштабировать графический поток под требования клиента, что приводит к физическому искажению сетки пикселей выводимого штрихкода.

Выясним, как это исправить:

  1. Установите масштаб экрана на клиентском компьютере на значение 100% (хотя бы в качестве теста, чтобы подтвердить влияние масштабирования).
  2. Если штрихкоды начали читаться, настройте параметры совместимости клиента RDP. Для этого кликните правой кнопкой мыши по ярлыку подключения mstsc.exe, выберите «Свойства» -> вкладка «Совместимость» -> «Изменить параметры высокого DPI» и установите галочку «Переопределите режим масштабирования...», выбрав режим «Приложение».

Способ 5. Настройка свойств штрихкода в макете 1С

Обратите внимание на то, как элемент управления штрихкодом расположен в самом макете конфигурации 1С. Если вы используете управляемые формы или обычные формы, поведение вывода графики может отличаться.

Посмотрим на свойства рисунка штрихкода в макете этикетки:

  1. Откройте макет этикетки в конфигураторе 1С.
  2. Выделите область рисунка (или объект РисунокТабличногоДокумента), где генерируется штрихкод.
  3. В панели свойств найдите параметр «Режим размера» (Size Mode).
  4. Установите значение «Реальный размер» (Real Size) или «Пропорционально» (Proportional) вместо режима «Растянуть» (Stretch).

Когда включен режим «Растянуть», платформа 1С пытается принудительно вписать сгенерированную картинку штрихкода в границы ячейки таблицы, сжимая или растягивая ее на доли миллиметра. На термопринтере это моментально дает нечитаемый результат из-за «слипания» соседних линий.

Способ 6. Аппаратная печать на языке EPL/ZPL (для продвинутых внедрений)

Самым надежным, профессиональным и безотказным решением при работе в облачных сервисах и терминалах является отказ от печати штрихкода как графики (картинки). Принтеры Zebra — это интеллектуальные устройства, имеющие встроенный процессор и собственный язык разметки этикеток (для старых моделей Zebra — EPL, для новых — ZPL).

Мы можем отправлять текстовые команды напрямую в порт принтера. Принтер сам, используя свои аппаратные алгоритмы, сгенерирует штрихкод идеальной четкости с учетом своего физического разрешения термоголовки.

Рассмотрим пример кода на языке 1С, который формирует текстовый поток команд EPL для принтера Zebra и отправляет его на печать. Для работы этого метода на сервере принтер устанавливается с использованием стандартного Windows-драйвера Generic / Text Only (Только текст):


// Пример формирования файла печати на языке EPL2 для Zebra TLP 2824
ТекстДляПринтера = Новый ТекстовыйДокумент;

// Очистить буфер принтера
ТекстДляПринтера.ДобавитьСтроку("N"); 

// Установка плотности (температуры) печати (значение от 0 до 15)
ТекстДляПринтера.ДобавитьСтроку("D10"); 

// Установка скорости печати (2 дюйма в секунду)
ТекстДляПринтера.ДобавитьСтроку("S2"); 

// Формирование штрихкода типа Code 128
// Синтаксис: B[X],[Y],[Rotation],[Type],[Narrow Bar],[Wide Bar],[Height],[Readable],"Data"
ТекстДляПринтера.ДобавитьСтроку("B50,50,0,1,2,4,80,B,""2000000012345""");

// Печать текстового поля под штрихкодом
ТекстДляПринтера.ДобавитьСтроку("A50,140,0,3,1,1,N,""Товар: Шампунь детский""");

// Команда печати 1 копии этикетки
ТекстДляПринтера.ДобавитьСтроку("P1"); 

// Запись во временный файл и отправка напрямую в порт принтера
ИмяФайла = ПолучитьИмяВременногоФайла("txt");
ТекстДляПринтера.Записать(ИмяФайла, КодировкаТекста.OEM);

// Отправляем файл на принтер (в реальном коде можно использовать копирование в порт или внешнюю компоненту)
КомандаСистемы("copy /b """ + ИмяФайла + """ ""\\ИмяСервера\Zebra2824""");

При таком подходе качество штрихкода всегда будет составлять 100%, независимо от настроек сессии RDP, масштабирования экрана клиента, используемой операционной системы или облачного провайдера.

Резюме

Для быстрого устранения проблемы нечитаемых штрихкодов начните с отключения Easy Print в групповых политиках сервера и установки идентичных локальных драйверов Zebra на сервер. Если вы работаете в сложной облачной инфраструктуре, рассмотрите переход на прямую печать через EPL/ZPL команды, что навсегда избавит вас от проблем с графическими искажениями при передаче данных через RDP.

← На главную