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

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

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

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

Суть проблемы: почему искажаются линии штрихкода?

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

Здесь в силу вступают три критических фактора:

  1. Округление пикселей при низком DPI. Специализированные принтеры этикеток (например, Zebra, TSC, Godex) чаще всего имеют физическое разрешение печати 203 DPI (точек на дюйм), что составляет примерно 8 точек на миллиметр. Когда компонента 1С рассчитывает ширину линий штрихкода в миллиметрах и переводит их в пиксели для принтера, могут получаться дробные значения (например, ширина линии должна быть 1.4 пикселя). Драйвер принтера округляет это значение: одну линию он делает шириной в 1 пиксель, а соседнюю — в 2 пикселя. Визуально штрихкод кажется ровным, но для сканера, который считывает соотношение ширины полос с точностью до долей миллиметра, этот баланс нарушается, и код становится нечитаемым.
  2. Масштабирование в движке табличного документа 1С. При прямой печати из 1С платформа пытается подогнать макет под область печати принтера. В результате происходит интерполяция (сжатие или растяжение) картинки. В процессе масштабирования тонкие черные линии могут сливаться с соседними белыми промежутками, либо их границы "замыливаются" промежуточными серыми пикселями.
  3. Почему Excel печатает нормально? При экспорте документа в Excel и последующей ручной настройке полей, внутренний рендерер Microsoft Excel выполняет сглаживание и масштабирование объектов OLE/ActiveX по собственным векторным алгоритмам. Он более корректно рассчитывает физическую сетку принтера и распределяет пиксели без фатальных искажений пропорций штрихкода.

Метод 1. Переустановка и перерегистрация компоненты «1С:Печать штрихкодов»

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

Разберем процесс перерегистрации компоненты вручную по шагам:

  1. Закроем все запущенные сеансы 1С:Предприятия.
  2. Скачаем актуальный дистрибутив компоненты 1С:Печать штрихкодов (обычно это файл 1CBarCode.exe) из личного кабинета портала ИТС или возьмем его из каталога шаблонов конфигурации.
  3. Установим компоненту от имени Администратора.
  4. Если автоматическая регистрация библиотеки в реестре Windows не сработала, зарегистрируем её вручную. Для этого откроем командную строку от имени администратора и выполним команду регистрации библиотеки (путь к файлу может отличаться в зависимости от разрядности ОС):

regsvr32 "C:\Program Files (x86)\1C\1CBarCode\1cbarcode.dll"

В случае успешной регистрации система выдаст диалоговое окно с подтверждением: "Успешное выполнение DllRegisterServer в...". После этого запустим 1С и проверим печать этикетки.


Метод 2. Борьба с EasyPrint при работе через удаленный рабочий стол (RDP)

Если ваша база 1С находится на удаленном сервере (в облаке или на офисном сервере терминалов), а принтер этикеток подключен к локальному компьютеру, ключевым виновником проблемы почти всегда выступает технология TS EasyPrint.

По умолчанию Windows Server использует EasyPrint для быстрого проброса принтеров без установки драйверов на сервере. При этом документ преобразуется в промежуточный формат XPS/EMF, сжимается, передается на клиентский ПК и там распаковывается. В процессе этого сжатия тонкие линии штрихкодов необратимо деформируются.

Проанализируем алгоритм отключения TS EasyPrint на сервере:

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

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


Метод 3. Отключение сглаживания и полутонов в драйвере принтера

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

Проанализируем, какие настройки необходимо изменить в свойствах принтера в операционной системе Windows:

  1. Перейдем в Панель управления — Устройства и принтеры.
  2. Кликнем правой кнопкой мыши по вашему принтеру этикеток и выберем пункт "Настройка печати" (Printing Preferences).
  3. Найдем вкладку, отвечающую за графику (она может называться "Графика", "Параметры документа" или "Graphics").
  4. Установим параметр "Дизеринг" (Dithering) или "Полутона" в положение "Нет" (None) или "Порог" (Threshold). Это запретит принтеру использовать серые точки на границах черных полос. Печать должна производиться строго в режиме "Черно-белое" (Monochrome / Line Art).
  5. В параметрах масштабирования страницы выберем режим "1:1" или "Исходный размер". Категорически избегаем галочек "Подогнать под размер страницы" (Fit to page) или "Автомасштабирование", так как они сдвигают шаг пикселей штрихкода.

Метод 4. Программный обход проблемы с помощью шрифтов штрихкодов (Code39 / EAN13)

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

Для этого используются шрифты семейства Code39, EAN13 или IDAutomation. В этом случае штрихкод формируется операционной системой как векторный текст. Он идеально масштабируется под любое разрешение принтера (хоть 203 DPI, хоть 600 DPI) без деформации линий.

Разберем программный алгоритм реализации печати штрихкода шрифтом:

  1. Установим в операционную систему Windows шрифт (например, файл Code39.ttf).
  2. В макете 1С для ячейки, где должен выводиться штрихкод, укажем этот шрифт и зададим необходимый размер.
  3. Напишем код преобразования обычного числового штрихкода в текстовую строку, понятную шрифту (для Code39 код должен обрамляться символом "звездочка" *).

Посмотрим на пример кода в 1С для подготовки данных к печати:


Функция СформироватьСтрокуШтрихкодаДляШрифта(ИсходныйШтрихкод) Экспорт
    // Для шрифта Code39 начало и конец штрихкода должны помечаться символом "*"
    Возврат "*" + СокрЛП(ИсходныйШтрихкод) + "*";
КонецФункции

Процедура ВывестиШтрихкодВТабличныйДокумент(ТабДок, ОбластьМакета, ТекущийШтрихкод)
    СтрокаДляПечати = СформироватьСтрокуШрифта(ТекущийШтрихкод);
    
    // Заполняем параметр в области макета
    ОбластьМакета.Параметры.ЯчейкаШтрихкода = СтрокаДляПечати;
    
    // Выводим область в результирующий табличный документ
    ТабДок.Вывести(ОбластьМакета);
КонецПроцедуры

Данный подход полностью решает проблему нечитаемости на любых моделях принтеров и не требует установки сторонних ActiveX компонент на рабочие станции пользователей.


Метод 5. Переход на БПО (Библиотеку подключаемого оборудования)

В современных конфигурациях 1С (начиная с версий платформы 8.3.12 и выше) разработчики отказались от использования устаревших ActiveX-компонент в пользу Native-технологий, поставляемых в составе 1С:Библиотеки подключаемого оборудования (БПО).

Если вы работаете в устаревшей конфигурации, настоятельно рекомендуем рассмотреть возможность обновления подсистемы печати ценников и этикеток до стандартов БПО. Современные Native-компоненты БПО умеют автоматически определять DPI целевого принтера и генерировать растровое изображение штрихкода с "попиксельным" выравниванием (pixel snapping), исключающим появление дробных пикселей при рендеринге полос.

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


&НаКлиенте
Процедура ПодключитьИнициализироватьКомпонентуШтрихкодов()
    ИмяПути = "ОбщийМакет.КомпонентаПечатиШтрихкодовИспользоватьNative";
    
    // Попытка асинхронного подключения компоненты генерации штрихкодов
    ПодключитьВнешнююКомпонентуАсинх(ИмяПути, "BarcodeRenderer", ТипВнешнейКомпоненты.Native)
        .ПолучитьРезультат();
        
    // Теперь мы можем использовать объект генерации векторных штрихкодов в памяти
    Генератор = Новый("АддитивныйГенераторИзображенийШтрихкодов");
    // Настройка параметров генерации под DPI принтера
    Генератор.Разрешение = 203; 
КонецПроцедуры

Использование Native-компонент гарантирует стабильность работы как на 32-разрядных (x86), так и на 64-разрядных (x64) версиях платформы 1С:Предприятие, избавляя системных администраторов от необходимости поддерживать совместимость устаревших библиотек в среде Windows 10/11.

← На главную