При работе с торговым оборудованием в среде 1С:Предприятие часто возникает специфическая проблема: при попытке распечатать стандартный 12-значный штрихкод (обычно это формат UPC-A), система или принтер автоматически добавляет в конец тринадцатый символ. В результате визуальное представление штрихкода меняется, и сканеры перестают его распознавать или считывают некорректное значение, которого нет в базе данных. Проанализируем причины этой ситуации и разберем по шагам, как привести печать к эталонному виду.
Первым делом нам необходимо понять природу появления лишней цифры. В международной практике существует два очень похожих стандарта: американская символика UPC-A (12 цифр) и европейская EAN-13 (13 цифр). По сути, UPC-A является подмножеством EAN-13.
Разберем механику процесса: когда компонента 1С:Печать штрихкодов получает на вход 12 цифр, но в настройках макета или программного кода указан тип EAN13, алгоритм считает, что ему передали «полезную нагрузку» без контрольного числа. Система автоматически вычисляет 13-й символ по алгоритму Modulo 10 и дописывает его в конец. Именно так ваш код 748927024524 превращается в 7489270245244.
Важный технический нюанс: графическое изображение (полоски) кода UPC-A абсолютно идентично коду EAN-13, если перед 12-ю цифрами добавить ведущий ноль. Например, код 0748927024524 в формате EAN-13 будет выглядеть в точности так же, как оригинальный американский код на банке.
Если мы работаем в конфигурации 1С:Розница 2.0 или 1С:Управление торговлей, нам нужно найти место, где формируются данные для макета этикетки. Рассмотрим вариант модификации кода в модуле печати. Нам нужно принудительно добавить «0» в начало штрихкода, если его длина составляет 12 символов. Это позволит компоненте печати воспринять код как полноценный EAN-13, где последняя цифра (которая была 12-й) станет контрольной, и новые символы добавляться не будут.
Проанализируем пример кода, который можно внедрить в процедуру подготовки данных для печати:
// Пример корректировки штрихкода перед передачей в компоненту печати
Если СтрДлина(ТекШтрихкод) = 12 Тогда
// Добавляем ведущий ноль для корректной интерпретации как EAN-13
ТекШтрихкод = "0" + ТекШтрихкод;
КонецЕсли;
// Устанавливаем параметры компоненты
ОбластьМакета.Рисунки.Штрихкод.Объект.Сообщение = ТекШтрихкод;
ОбластьМакета.Рисунки.Штрихкод.Объект.ТипКода = 1; // Соответствует EAN13
Используя такой подход, мы гарантируем, что рисунок штрихкода останется неизменным, а сканер при считывании (в зависимости от настроек) вернет либо 13 знаков с нулем, либо исходные 12 знаков.
Посмотрим на ситуацию с точки зрения настроек самого объекта штрихкода в 1С. Если вы используете стандартную компоненту 1С:Печать штрихкодов, у неё есть ряд свойств, доступных через контекстное меню в режиме редактирования макета (или программно).
Выясним, какие параметры влияют на отображение:
UPC-A, следует выбрать именно его. Однако, как отмечают пользователи, в типовой Рознице этот тип не всегда доступен в выпадающем списке. В этом случае используйте EAN13 в сочетании с методом «ведущего нуля».Проанализируем программную установку свойств объекта:
// Настройка объекта штрихкода на макете
ОбъектШК = ОбластьМакета.Рисунки.Штрихкод.Объект;
ОбъектШК.ТипКода = 1; // EAN13
ОбъектШК.ОтображатьКонтрольныйСимвол = Ложь; // Отключаем лишнюю цифру в подписи
ОбъектШК.Сообщение = "0748927024524"; // Передаем 13 знаков
Если ваша система позволяет использовать другие форматы, рассмотрим применение CODE128 или CODE39. Эти форматы являются универсальными и не имеют жесткой привязки к количеству символов и алгоритмам вычисления контрольных цифр Modulo 10, специфичных для ритейла.
Однако стоит учитывать, что CODE128 создаст совершенно другой рисунок полосок. Если ваша задача — сделать этикетку «как на упаковке производителя», то этот вариант не подойдет. Если же вам просто нужно обеспечить уникальную идентификацию и стабильное чтение, то CODE128 — отличный выбор, так как он более компактный и надежный.
Даже если мы добьемся идеальной печати, остается вопрос: что увидит 1С при сканировании? Большинство современных сканеров (например, Zebra или Honeywell) имеют внутреннюю настройку Convert UPC-A to EAN-13.
Разберем сценарии работы сканера:
Рекомендуем привести всё к единому стандарту EAN-13. Для этого выполним групповую обработку справочника Штрихкоды (или регистра сведений, в зависимости от версии программы), добавив ведущие нули ко всем 12-значным кодам. Это самый стабильный путь для исключения ошибок в будущем.
Подводя итог, можно сказать, что «лишний символ» — это не ошибка принтера, а автоматическая работа алгоритма EAN-13. Чтобы решить проблему, выполним следующие действия:
ShowChecksum (Отображать контрольный символ) в свойствах компоненты.Такой комплексный подход позволит вам добиться корректной печати и бесперебойной работы склада или магазина.