Почему сканер не считывает штрихкоды, напечатанные из 1С через RDP, и как это исправить?

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

Проблема плохого считывания штрихкодов при печати из 1С в терминальной сессии (RDP) является классической технической сложностью. Часто возникает ситуация, когда один и тот же штрихкод, напечатанный из Excel, сканируется мгновенно, а при печати из 1С сканер либо долго «думает», либо вообще не распознает код. Рассмотрим подробно причины этого явления и разберем по шагам методы решения задачи.

Анализируем причину: почему графика портится при печати через RDP?

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

Решение №1: Использование штатных методов БСП для формирования штрихкода

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

Наиболее надежный способ — использование менеджера оборудования. Выясним, как это реализовать в коде:


// Параметры для формирования штрихкода
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина",          150);
ПараметрыШтрихкода.Вставить("Высота",          50);
ПараметрыШтрихкода.Вставить("ТипКода",         1); // Например, Code128
ПараметрыШтрихкода.Вставить("ТекстКода",       "1234567890");
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
ПараметрыШтрихкода.Вставить("УголПоворота",    0);

// Получаем картинку через штатный менеджер оборудования
КартинкаШтрихкода = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

// Выводим в область макета
ОбластьМакета.Рисунки.Штрихкод.Картинка = КартинкаШтрихкода;

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

Решение №2: Настройка параметров табличного документа

Часто проблема кроется в свойстве макета 1С "Режим изменения размера колонки". Если установлено значение "Растянуть", 1С пытается подогнать содержимое под сетку документа, что неизбежно ведет к микро-искажениям графики. Проанализируем настройки табличного документа перед выводом на печать.

Рекомендуется устанавливать Реальный размер для области с картинкой штрихкода. Также важно обратить внимание на разрешение печати. По умолчанию 1С может использовать низкий DPI. Попробуем явно задать разрешение в коде:


ТабДок = Новый ТабличныйДокумент;
// Установка высокого разрешения для улучшения четкости графики
ТабДок.РазрешениеПечати = 600; 
ТабДок.АвтоМасштаб = Ложь;

Использование РазрешениеПечати = 600 или выше позволяет передать драйверу принтера более детальную информацию о линиях, что критически важно для 1D-сканеров типа Newland HR100.

Решение №3: Тонкая настройка сервера и протокола RDP

Если программные методы в 1С не помогают, значит, проблему создает сам канал передачи данных. Windows Server 2012 R2 по умолчанию оптимизирует трафик, сжимая изображения. Разберем, как это изменить через групповые политики (GPO):

  1. Откройте редактор групповых политик (gpedit.msc).
  2. Перейдите в раздел: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Среда удаленного сеанса.
  3. Найдите параметр "Настроить сжатие данных RemoteFX" и установите его в значение "Не использовать сжатие" или выберите алгоритм, оптимизированный для текста (Lossless).
  4. Также полезно отключить EasyPrint, так как этот универсальный драйвер часто некорректно обрабатывает векторные и растровые объекты 1С. Лучше установить родной драйвер принтера на сервер.

Решение №4: Проверка "Тихой зоны" и шрифтов

Иногда сканер не может считать код из-за отсутствия «тихой зоны» — белых полей по бокам штрихкода. В 1С программисты часто прижимают рамку штрихкода вплотную к границам ячейки. Выясним причину: сканеру необходимо зафиксировать начало и конец последовательности линий на контрастном белом фоне. Убедитесь, что вокруг штрихкода в макете есть свободное пространство (минимум 5 мм с каждой стороны).

Если вы используете шрифты (например, Code39), не забывайте про «звездочки» обрамления. Рассмотрим пример:

Для корректного считывания шрифтового кода 12345 в ячейку нужно передать строку *12345*. Без этих символов сканер не поймет, где начинается код.

Итоги и рекомендации

Подводя итог, можно сказать, что решение проблемы всегда комплексное. Сначала переходим на использование МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода, затем проверяем настройки разрешения ТабДок.РазрешениеПечати и, в последнюю очередь, настраиваем параметры сжатия в RDP сессии. Совместное применение этих методов гарантирует стабильную работу складского оборудования и высокую скорость считывания штрихкодов.

← На главную