При интеграции с внешними поставщиками нередко возникает ситуация, когда полученный товар снабжен 13-значным числовым штрихкодом, оформленным под EAN-13, но его последняя (13-я) контрольная цифра не соответствует стандарту. При попытке вывести такой штрихкод на печать через типовые механизмы и внешнюю компоненту 1С:Печать штрихкодов разработчики сталкиваются с тем, что код либо не печатается, либо числовой ряд под штрихами полностью искажается и подменяется произвольными символами.
Разберем по шагам, почему возникает такое поведение системы, как устроена валидация штрихкодов и какими практическими способами можно решить данную проблему.
Стандарт EAN-13 строго регламентирует структуру штрихового кода. Последний, тринадцатый символ не является свободным полем для данных — это контрольная сумма, которая вычисляется по строгому математическому алгоритму Modulo 10 на основании первых 12 цифр. Более того, выбор таблиц кодирования штрихов (наборов A и B) для левой половины штрихкода напрямую зависит от самого первого разряда.
Внешняя компонента 1С:Печать штрихкодов (компонента ActiveX или библиотека 1C:BarCode) жестко контролирует соответствие стандарту:
1234567890128), перетасовывая цифры.Проанализируем возможные варианты обхода этого ограничения для корректной печати и считывания нестандартных кодов.
Если требуется сохранить визуальный вид штрихкода EAN-13 именно с цифрами поставщика, наиболее надежным способом является отказ от использования компоненты 1С в пользу табличного документа со специализированным шрифтом (например, eangnivc.ttf или аналогичными шрифтами TrueType для EAN-13).
Рассмотрим важную особенность: нельзя просто отправить 13 исходных цифр в ячейку со шрифтом штрихкода. Шрифт штрихкода содержит штрихи, привязанные к определенным символам кодовой таблицы ASCII. Чтобы сформировать корректный рисунок полос (включая боковые и центральные разделительные знаки), строку необходимо предварительно преобразовать специальной функцией перекодирования.
Посмотрим на алгоритм формирования строки для шрифта:
Такой подход позволяет сформировать и напечатать штриховой код с любыми цифрами. Однако необходимо учитывать поведение сканеров: многие сканеры штрихкодов аппаратно проверяют контрольную цифру EAN-13. Чтобы сканер прочитал такой штрихкод, на самом считывающем устройстве потребуется отключить проверку контрольного символа EAN-13 через настроечные штрихкоды из инструкции к сканеру.
Если жесткой привязки к внешнему виду EAN-13 нет, а главное — обеспечить считывание исходной 13-значной строки, оптимальным решением является использование формата Code 128.
Разберем преимущества формата Code 128:
Для реализации достаточно в свойствах штрихкода номенклатуры или в настройках обработки печати переключить тип штрихкода на Code 128.
Символика Interleaved 2 of 5 (ITF) разработана специально для высокой плотности кодирования только цифровых данных. Цифры кодируются парами (одна цифра штрихами, вторая — промежутками между ними).
Если 13 цифр поставщика требуется уместить на маленькой этикетке, формат ITF прекрасно справится с задачей. Для нечетного количества знаков (13 цифр) в начале последовательности обычно добавляется лидирующий ноль (получается 14 знаков), что позволяет плотно упаковать данные.
При использовании термопринтеров этикеток (Zebra, TSC, Godex) можно полностью отказаться от графической генерации 1С и передавать команды на печать штрихкода напрямую в порт принтера:
Чтобы избежать путаницы в типовых конфигурациях (например, в Управление торговлей 10.3), проанализируем правильную организацию учета нестандартных кодов:
Штрихкоды (или ШтрихкодыНоменклатуры) с типом Code 128 либо сохранять его в отдельном реквизите («Артикул поставщика», «Код поставщика»).20–29 с корректной контрольной цифрой. Это избавит от необходимости перенастраивать сканеры, терминалы сбора данных (ТСД) и типовые обработки печати.