При автоматизации торгового и складского учета разработчики часто сталкиваются с задачей генерации и печати штрихкодов. В процессе работы возникают вопросы о том, какую именно информацию можно поместить в стандартный штрихкод EAN-13 и как правильно сформировать его средствами платформы 1С. Разберем подробно, как устроена система кодирования EAN-13, развенчаем популярный миф о хранении текстовых данных в штрихкоде и рассмотрим алгоритмы генерации внутренних и весовых кодов в 1С.
Среди пользователей и начинающих разработчиков распространено заблуждение, что в штрихкоде EAN-13 зашифрована вся информация о товаре: наименование, наименование производителя, страна, состав, сорт и прочие характеристики. Проанализируем, так ли это на самом деле.
Штрихкод EAN-13 представляет собой строго 13 цифровых символов и не содержит никаких текстовых данных. По своей сути это простой числовой идентификатор (ссылка или ключ), который сопоставляется с карточкой товара в базе данных (1С, внешнем каталоге или глобальном реестре GS1). Все сведения о товаре хранятся исключительно в учетной системе, а сканер штрихкода лишь считывает 13 цифр и передает их в программу для поиска нужной позиции.
Рассмотрим стандартную структуру глобального кода EAN-13 (он же GTIN):
460–469 — GS1 Russia, 690–699 — Китай). Важно учитывать: префикс обозначает страну регистрации компании-владельца бренда, а не страну фактического изготовления товара.Если для продаваемой продукции не требуется выходить на международный или мелкооптовый рынок с зарегистрированным кодом GS1, предприятие имеет право использовать диапазон внутренних префиксов. Согласно международному стандарту, префиксы с 20 по 29 зарезервированы для внутреннего использования внутри одной организации. Эти коды не могут пересекаться с товарами из внешнего мира.
Выясним, как формируются структуры внутренних штрихкодов для штучных и весовых товаров:
Формат: 20 + XXXXXXXXXX (10 цифр кода товара в базе 1С) + C (контрольный символ).
Формат: PP (префикс веса, например 22 или 28) + XXXXX (5 цифр PLU или кода товара) + WWWWW (5 цифр массы товара в граммах) + C (контрольный символ).
Например, код 220012301500C будет означать: весовой товар с кодом 00123 и весом 1,500 кг (1500 грамм).
Чтобы сгенерированный штрихкод был валидным и успешно считывался оборудованием, необходимо правильно вычислить 13-й контрольный символ. Рассчитаем его по шагам:
Рассмотрим пример реализации функции расчета контрольного символа на языке 1С:
Функция РассчитатьКонтрольныйСимволEAN13(Знач Код12Цифр) Экспорт
СуммаЧетных = 0;
СуммаНечетных = 0;
Для Индекс = 1 По 12 Цикл
Цифра = Число(Сред(Код12Цифр, Индекс, 1));
Если Индекс % 2 = 0 Тогда
СуммаЧетных = СуммаЧетных + Цифра;
Иначе
СуммаНечетных = СуммаНечетных + Цифра;
КонецЕсли;
КонецЦикла;
ОбщаяСумма = (СуммаЧетных * 3) + СуммаНечетных;
Остаток = ОбщаяСумма % 10;
Если Остаток = 0 Тогда
КонтрольныйСимвол = 0;
Иначе
КонтрольныйСимвол = 10 - Остаток;
КонецЕсли;
Возврат Строка(КонтрольныйСимвол);
КонецФункции
Теперь разберем практическую функцию для создания готового 13-значного внутреннего штрихкода для номенклатуры в 1С:
Функция СформироватьВнутреннийШтрихкод(КодНоменклатуры) Экспорт
// Префикс внутреннего штучного товара - 20
Префикс = "20";
// Приводим код номенклатуры к 10 цифрам, дополняя нулями слева
КодЧисло = СокрЛП(КодНоменклатуры);
Пока СтрДлина(КодЧисло) < 10 Цикл
КодЧисло = "0" + КодЧисло;
КонецЦикла;
Первые12 = Префикс + КодЧисло;
КонтрольнаяЦифра = РассчитатьКонтрольныйСимволEAN13(Первые12);
Возврат Первые12 + КонтрольнаяЦифра;
КонецФункции
После того как строка штрихкода сформирована, ее требуется вывести в печатную форму (наклейку, ценник или накладную). В платформах 1С применяются два основных подхода:
В конфигурациях 1С (например, «Торговля и Склад 7.7» или современная «Управление торговлей») применяется внешняя компонента печати штрихкодов (например, 1C:BarCode или barcode.ocx). В табличный документ добавляется рисунок типа «ActiveX объект». Этому объекту передается сформированное значение штрихкода, а компонента самостоятельно рассчитывает ширину полос, отображает цифры и прорисовывает графическое изображение.
При данном подходе вывод штрихкода выполняется в обычную ячейку таблицы 1С с установленным шрифтом EAN13. Однако выгрузить напрямую 13 цифр нельзя: шрифт использует специфическую таблицу символов для кодирования левой и правой частей штрихкода, а также стартовых, центральных и стоповых защитных полос. Предварительно необходимо перекодировать 13 цифр в специальную текстовую строку символов по таблице паритета EAN-13.
Если специфика вашего бизнеса требует наносить на упаковку информацию о товаре (наименование, серийный номер, дату производства, срок годности или вес) непосредственно в штрихкод без обращения к базе данных, стандарт EAN-13 не подойдет. Проанализируем двумерные (2D) варианты решений:
Современный стандарт, активно используемый в государственной системе маркировки «Честный ЗНАК». При небольших физических размерах позволяет кодировать GTIN товара, серийный номер, партии и коды проверки. Легко считывается 2D-сканерами и терминалами сбора данных.
Позволяет зашифровать произвольный объем текстовой информации на русском и английском языках (включая наименование, состав, артикул, дату и URL-ссылку на сайт). Поддерживается большинством современных сканеров и мобильных устройств.
Подводя итог: для работы с обычными товарами в 1С достаточно генерировать валидный внутренний код формата EAN-13 с префиксом 20 и правильным контрольным символом. Если же требуется передать в коде текстовые атрибуты номенклатуры, следует использовать двумерные штрихкоды QR или DataMatrix.