Как правильно печатать штрихкоды Code 128 с помощью шрифтов в 1С, чтобы они читались сканером?

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

При разработке систем складского учета или маркировки в 1С часто возникает задача массовой печати штрихкодов. Использование внешних компонент для генерации графических изображений штрихкодов удобно, но при больших объемах (от 500-1000 этикеток) процесс формирования табличного документа может занимать значительное время — иногда до нескольких минут. Переход на использование специализированных шрифтов (например, Code 128 TTF) позволяет ускорить печать в десятки раз, так как принтеру передается не тяжелая картинка, а текстовая строка. Однако простое изменение шрифта в ячейке 1С не приведет к желаемому результату: сканер не сможет прочитать такой код. Разберем по шагам, как правильно реализовать эту задачу.

Почему штрихкод, напечатанный простым шрифтом, не читается?

Выясним причину основной ошибки новичков. Штрихкод Code 128 — это не прямая замена цифр на «палочки». Это сложный стандарт, который включает в себя:

Проанализируем ситуацию: если вы просто напишете в ячейке «229000...» и выберете шрифт Code128, вы увидите полоски, но они не будут содержать ни стартового символа, ни контрольной суммы. Для сканера это будет просто набор «мусора».

Алгоритм преобразования строки в штрихкод

Для того чтобы шрифт отобразился корректно, нам необходимо программно подготовить строку. Рассмотрим процесс формирования строки для набора Subset C, который идеально подходит для чисто цифровых данных (как в примере автора: 2290000000001). Этот набор кодирует две цифры одним символом шрифта, что делает штрихкод очень компактным.

Разберем этапы формирования строки:

  1. Выбор стартового символа: Для Subset C это символ с определенным кодом ASCII (обычно это зависит от конкретного файла шрифта).
  2. Разбиение на пары: Строка «229000» разбивается на «22», «90», «00».
  3. Преобразование пар в символы шрифта: Каждой паре соответствует свой символ из таблицы шрифта.
  4. Расчет контрольной суммы: Суммируются весовые коэффициенты всех символов, и берется остаток от деления на 103.
  5. Добавление стоп-символа: Завершающий штрих, сигнализирующий об окончании кода.

Посмотрим на пример логики функции преобразования (псевдокод):


Функция СформироватьСтрокуCode128(ИсходныеДанные)
    ПеременнаяРезультат = СимволСтартаC; // Например, Символ(211)
    КонтрольнаяСумма = ЗначениеСтартаC;
    
    Для Индекс = 1 По СтрДлина(ИсходныеДанные) / 2 Цикл
        ПараЦифр = Сред(ИсходныеДанные, (Индекс-1)*2 + 1, 2);
        ЧисловоеЗначение = Число(ПараЦифр);
        
        // Добавляем символ в строку
        ПеременнаяРезультат = ПеременнаяРезультат + ПолучитьСимволПоКоду(ЧисловоеЗначение);
        
        // Считаем контрольную сумму по алгоритму Modulo 103
        КонтрольнаяСумма = КонтрольнаяСумма + (ЧисловоеЗначение * Индекс);
    КонецЦикла;
    
    СимволКонтрольнойСуммы = ПолучитьСимволПоКоду(КонтрольнаяСумма % 103);
    Возврат ПеременнаяРезультат + СимволКонтрольнойСуммы + СимволСтопа;
КонецФункции

Технические нюансы печати и настройки макета

Даже при правильном алгоритме формирования строки, сканер может не считывать код из-за настроек макета 1С или принтера. Проанализируем важные моменты:

1. «Тихие зоны» (Quiet Zones): Штрихкод должен иметь пустые белые поля слева и справа. Если штрихи упираются в рамку ячейки или соседний текст, сканер не сможет их распознать. Рекомендуется добавлять несколько пробелов обычным шрифтом по краям от штрихкода в макете.

2. Масштабирование в 1С: В свойствах ячейки табличного документа параметр РазмещениеТекста должен быть установлен в значение Переносить или Авто, но крайне важно избегать настройки Размещать (сжатие), так как это искажает пропорции тонких и толстых линий. Штрихкод должен выводиться с фиксированным размером (например, 24 или 36 пунктов).

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

Как проверить корректность работы?

Рассмотрим метод проверки без использования принтера. Если вы сформировали строку, скопируйте её из отладчика 1С и вставьте в обычный Блокнот (Notepad). Выделите строку и примените к ней установленный в системе шрифт Code 128. Если ваш сканер поддерживает считывание с экрана монитора, попробуйте считать код. Если с монитора читается, а с бумаги нет — проблема в качестве печати или масштабировании макета. Если не читается даже с экрана — ошибка в алгоритме формирования контрольной суммы или стартовых/стоповых символов.

Важное замечание: Разные файлы шрифтов (например, code128.ttf от разных разработчиков) могут иметь разные карты символов. Всегда используйте алгоритм преобразования, предназначенный именно для вашего файла шрифта. Чаще всего в сообществе 1С используют шрифты, где стартовые символы и контрольные суммы вынесены в расширенную таблицу ASCII (символы с кодами 192–255).

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

← На главную