Почему отличается штрихкод на экране и при печати на принтере этикеток через RDP из 1С?

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

Разработчики и системные администраторы 1С часто сталкиваются с крайне неприятной проблемой: штрихкод, который на экране компьютера выглядит идеально ровным и четким, после отправки на термопринтер этикеток (например, Argox, TSC или Zebra) печатается с явными искажениями. В результате линии штрихкода сливаются, их пропорции нарушаются, а сканер отказывается считывать информацию. При этом печать того же макета на обычном офисном лазерном принтере проходит без сбоев.

В этой статье мы подробно проанализируем причины возникновения этой проблемы при работе в терминальном режиме (RDP) и разберем по шагам наиболее эффективные методы ее решения.

Выясняем причину: почему RDP искажает штрихкоды?

Главным виновником искажения пропорций штрихкода является встроенная технология Microsoft для перенаправления печати в терминальных сессиях — TS Easy Print (EasyPrint). Она разработана для упрощения администрирования: сервер не требует установки драйверов под каждый локальный принтер пользователя, а использует универсальный виртуальный драйвер.

Служба Easy Print работает следующим образом: она преобразует отправленный из 1С документ в векторный графический формат (XPS или EMF), сжимает его для экономии пропускной способности сети (часто используя алгоритмы сжатия с потерями качества, схожие с JPEG) и отправляет на локальную машину. Для обычного текстового документа это сжатие незаметно. Однако для штрихкода, где критически важна ширина каждого штриха с точностью до сотых долей миллиметра, такое сжатие оказывается фатальным. Границы черных полос "размываются", пиксели округляются, и геометрия штрихкода безвозвратно нарушается.

Ниже рассмотрим подробные практические способы решения этой проблемы.

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

Это наиболее надежный и правильный системный подход. Мы заставим сервер терминалов использовать оригинальный драйвер принтера этикеток вместо универсального Easy Print, что исключит промежуточное сжатие графики.

Проанализируем шаги по настройке групповых политик сервера:

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

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

Способ 2. Исключение RDP-перенаправления через сетевой общий доступ

Если изменить групповые политики на сервере невозможно, мы можем пойти другим путем — полностью исключить службу перенаправления печати RDP. Для этого настроим прямую сетевую печать:

  1. На локальном компьютере, к которому физически подключен принтер этикеток, откройте свойства принтера и перейдите на вкладку «Доступ».
  2. Установите флажок «Общий доступ к данному принтеру» и задайте ему простое сетевое имя латиницей (например, Argox2300).
  3. Если между офисом и сервером настроена единая сеть (например, через VPN-туннель), добавьте этот принтер на сервере как сетевой, указав путь вида \\IP-клиента\Argox2300.
  4. Установите данный сетевой принтер в качестве принтера по умолчанию в настройках печати 1С для данного пользователя.

В этом случае данные отправляются на печать напрямую в порт принтера по сети, минуя виртуальные драйверы терминального сервера.

Способ 3. Использование специализированного ПО для проброса принтеров

В крупных компаниях со сложной сетевой инфраструктурой стандартный функционал Windows по пробросу принтеров часто заменяют на специализированный софт. Рассмотрим наиболее популярные решения — TSPrint и ScrewDrivers.

Эти программы перехватывают поток печати на сервере терминалов и передают его на клиентскую машину в собственном оптимизированном формате, который гарантирует сохранение точного масштаба векторных элементов и шрифтов. Использование сторонних утилит полностью решает проблему "замыливания" штрихкодов без необходимости тонкой настройки политик операционной системы.

Способ 4. Переход на использование шрифтов штрихкодов вместо картинок

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

Мы можем обойти это ограничение, если перенастроим макет этикетки в 1С на использование специализированных шрифтов TrueType (например, Code128 или EanGnivc). В этом случае штрихкод формируется как обычная текстовая строка, буквы которой при отображении заменяются на соответствующие комбинации штрихов.

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

Рассмотрим пример кода на встроенном языке 1С для программного управления параметрами вывода штрихкода в табличном документе:


// Отключаем автоматическое масштабирование табличного документа,
// чтобы избежать программного искажения размеров линий штрихкода
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.АвтоМасштаб = Ложь;

// Явно задаем реальный размер страницы, соответствующий размеру этикетки в мм
ТабДокумент.РазмерСтраницы = "Custom";
ТабДокумент.ШиринаСтраницы = 58;
ТабДокумент.ВысотаСтраницы = 40;

// Пример переопределения шрифта области штрихкода для исключения графического вывода
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкода");
ОбластьМакета.Области.Штрихкод.Шрифт = Новый Шрифт("Code128", 16, Ложь, Ложь);

Способ 5. Корректировка параметров масштабирования в 1С

Иногда искажение происходит еще до отправки в очередь печати RDP — на этапе формирования табличного документа в самой платформе 1С. Если в параметрах страницы установлен масштаб «По ширине листа» или включена опция АвтоМасштаб = Истина, платформа принудительно сжимает или растягивает макет, подгоняя его под размеры области печати драйвера.

Для предотвращения этой проблемы в настройках печати принтера на сервере и в параметрах страницы 1С всегда устанавливайте масштаб «Реальный размер» (или 100%). Категорически избегайте любых программных корректировок размеров макета.

Способ 6. Отключение сглаживания шрифтов на сервере

В современных операционных системах (начиная с Windows Server 2016/2019) включенные по умолчанию технологии улучшения отображения текста (ClearType и Font Smoothing) могут негативно влиять на графический поток RDP, вызывая микроискажения на границах контрастных переходов штрихкода.

Рекомендуется отключить сглаживание шрифтов для терминальных сессий через групповые политики сервера в разделе «Среда удаленных сеансов», активировав параметр «Не разрешать сглаживание шрифтов» (Do not allow font smoothing). Это позволит передавать графические границы линий штрихкода максимально резко и без размытия соседних пикселей.

← На главную