Как распечатать нестандартный штрихкод EAN-13 с неверной контрольной цифрой в 1С

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

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

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

Выясним причину: почему типовая компонента 1С искажает нестандартный EAN-13

Стандарт EAN-13 строго регламентирует структуру штрихового кода. Последний, тринадцатый символ не является свободным полем для данных — это контрольная сумма, которая вычисляется по строгому математическому алгоритму Modulo 10 на основании первых 12 цифр. Более того, выбор таблиц кодирования штрихов (наборов A и B) для левой половины штрихкода напрямую зависит от самого первого разряда.

Внешняя компонента 1С:Печать штрихкодов (компонента ActiveX или библиотека 1C:BarCode) жестко контролирует соответствие стандарту:

  1. Если переданный в компоненту 13-значный код содержит контрольную цифру, отличную от расчетной, компонента считает данные поврежденными.
  2. В зависимости от версии компоненты она либо принудительно пересчитывает 13-й символ по алгоритму Modulo 10, перезаписывая значение поставщика, либо завершает генерацию с ошибкой и выводит на печать тестовый шаблон (например, 1234567890128), перетасовывая цифры.
  3. Отключить внутреннюю валидацию контрольной суммы для типа EAN-13 в свойствах самой компоненты технически невозможно.

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

Способ 1. Печать через специализированный TTF-шрифт штрихкода

Если требуется сохранить визуальный вид штрихкода EAN-13 именно с цифрами поставщика, наиболее надежным способом является отказ от использования компоненты 1С в пользу табличного документа со специализированным шрифтом (например, eangnivc.ttf или аналогичными шрифтами TrueType для EAN-13).

Рассмотрим важную особенность: нельзя просто отправить 13 исходных цифр в ячейку со шрифтом штрихкода. Шрифт штрихкода содержит штрихи, привязанные к определенным символам кодовой таблицы ASCII. Чтобы сформировать корректный рисунок полос (включая боковые и центральные разделительные знаки), строку необходимо предварительно преобразовать специальной функцией перекодирования.

Посмотрим на алгоритм формирования строки для шрифта:

  1. Программа берет первые 12 цифр кода и определяет комбинацию наборов штрихов (таблицы A и B) в соответствии с первой цифрой.
  2. Для формирования штрихов подставляются соответствующие ASCII-символы левой и правой частей.
  3. Вместо расчета контрольной суммы алгоритм трансляции просто подставляет 13-ю цифру поставщика по таблице правого набора (C).
  4. Добавляются служебные символы начала, центрального разделителя и конца штрихкода.

Такой подход позволяет сформировать и напечатать штриховой код с любыми цифрами. Однако необходимо учитывать поведение сканеров: многие сканеры штрихкодов аппаратно проверяют контрольную цифру EAN-13. Чтобы сканер прочитал такой штрихкод, на самом считывающем устройстве потребуется отключить проверку контрольного символа EAN-13 через настроечные штрихкоды из инструкции к сканеру.

Способ 2. Переход на символику Code 128 (подтип Code 128C)

Если жесткой привязки к внешнему виду EAN-13 нет, а главное — обеспечить считывание исходной 13-значной строки, оптимальным решением является использование формата Code 128.

Разберем преимущества формата Code 128:

  1. Поддержка любых символов: символика позволяет закодировать произвольную последовательность цифр любой длины без навязывания специфических алгоритмов контрольных цифр.
  2. Компактность в режиме Code 128C: в подтипе «C» цифры кодируются парами, что делает штрихкод практически сопоставимым по ширине со стандартным EAN-13, в отличие от Code 39, который получается слишком широким и часто не помещается на компактные термоэтикетки.
  3. Отсутствие ошибок сканирования: сканеры распознают Code 128 по умолчанию и считывают все 13 символов без отбраковки.

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

Способ 3. Использование формата Interleaved 2 of 5 (ITF / 2 из 5 чередующийся)

Символика Interleaved 2 of 5 (ITF) разработана специально для высокой плотности кодирования только цифровых данных. Цифры кодируются парами (одна цифра штрихами, вторая — промежутками между ними).

Если 13 цифр поставщика требуется уместить на маленькой этикетке, формат ITF прекрасно справится с задачей. Для нечетного количества знаков (13 цифр) в начале последовательности обычно добавляется лидирующий ноль (получается 14 знаков), что позволяет плотно упаковать данные.

Способ 4. Прямая печать командами принтера (ZPL, TSPL, ESC/POS)

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

  1. В макете формируется текстовый файл команд (например, на языке ZPL или TSPL).
  2. В команду генерации штрихкода передается нужный тип (Code 128 или ITF) и исходная 13-значная последовательность.
  3. Принтер аппаратно отрисовывает штрихкод с максимальной четкостью и заданной плотностью.

Рекомендуемая архитектура хранения штрихкодов в базе 1С

Чтобы избежать путаницы в типовых конфигурациях (например, в Управление торговлей 10.3), проанализируем правильную организацию учета нестандартных кодов:

  1. Не менять тип EAN-13 на некорректные данные: штатные типовые механизмы конфигурации рассчитывают на стандартную длину и валидность контрольной суммы EAN-13.
  2. Хранение кода поставщика: записывать нестандартный 13-значный код в регистр сведений Штрихкоды (или ШтрихкодыНоменклатуры) с типом Code 128 либо сохранять его в отдельном реквизите («Артикул поставщика», «Код поставщика»).
  3. Внутренняя перемаркировка: если требуется использовать именно стандарт EAN-13 для работы склада и розницы, целесообразно сгенерировать собственный внутренний штрихкод EAN-13 с префиксом из диапазона 20–29 с корректной контрольной цифрой. Это избавит от необходимости перенастраивать сканеры, терминалы сбора данных (ТСД) и типовые обработки печати.
← На главную