- Подготовка производственной площадки к маркировке
- Сроки внедрения маркировки для производителей: что нужно знать малым, средним и крупным?
- Оборудование для маркировки: какое нужно и что пригодится из того, что у вас уже есть?
- Состав кода маркировки молочной продукции
Как "собирается" код DataMatrix
Иногда пользователи системы "Честный ЗНАК" при попытке создать и напечатать штрих код GS1 DataMatrix где-то вне системы* получают неработающий код. Обращаем внимание сообщества на то, что для генерации штрих кодов и печати средств идентификации лучше использовать сценарии, предусмотренные Честным ЗНАКОМ. Статья написана с целью объяснения некоторых правил образования двухмерных кодов.
Итак, почему же код может "не работать"? Наиболее распространенная ошибка - когда в стороннем генераторе к печатным символам (тем, которые можно ввести с клавиатуры) добавляют непечатные, управляющие (например, известный всем разделитель GS). То есть последовательно вводят с клавиатуры «G», «S», а потом удивляются – почему код получается не валидным.
Понимание правил о том, как "собирается" штрих код DataMatrix поможет избежать этой и других ошибок.
Предположим, есть некая последовательность символов, код маркировки, которую формирует оператор системы: 0112345678901231215w9EJp93abc1. Данная последовательность применима к молоку, но в других товарных группах действуют те же правила.
Если эту последовательность забить в генератор, в том виде, как она есть, в надежде получить графический значок из черных и белых квадратиков (2D код DataMatrix), чтобы затем напечатать его и наклеить на упаковку с продуктом, то таким планам не суждено сбыться. То есть значок-код вы получите, и он будет считываться сканером, но не будет являться средством идентификации системы "Честный ЗНАК", а значит и ТСД, и официальное приложение будут ругаться на такой код.
Разберем - почему. Каких важных элементов здесь не хватает.
Во-первых, применительно для системы маркировки используют двухмерный код GS1 DataMatrix, а не просто DataMatrix. Различия между этими двумя сущностями - тема отдельной статьи. Здесь мы лишь отметим, что GS1 DataMatrix получается из «обычного DataMatrix» путем добавления префикса <FNC1> в самом начале строки данных кода
Во-вторых, в данную последовательность символов включены несколько групп (блоков) данных. Это: GTIN, серийный номер, ключ проверки (применительно для последовательности, указанной выше).
Сканер разделяет эти блоки данных друг от друга при помощи специальных указателей:
- т.н. идентификаторов применения, которые располагаются в начале каждого блока;
- разделителей, которые указывают на то, что блок данных закончился (и, соответственно, следом начинается другой).
При этом, если идентификаторы применения, как индикаторы начала и идентификаторы вида каждого блока будут в составе кода всегда, то разделители - нет, не каждый блок заканчивается разделителем. Разделитель нужен только в блоках данных переменной длины, и при этом только в том случае, если блок не является последним в строке данных.
Таким образом, в нашем «молочном» примере кода маркировки нужен только один разделитель, который отделяет группу с идентификатором применения 21 – серийный номер, от группы с идентификатором 93 – ключ проверки. А вот в кодах маркировке для фармы или шин или обуви – таких разделителей будет уже два.
Возвращаясь к примеру кода, с учетом добавлений признака GS1 DataMatrix и разделителя, наша последовательность уже будет выглядеть так: <FNC1>0112345678901231215w9EJp<GS>93abc1.
Отлично. А как теперь это напечатать?
Наблюдательный читатель уже заметил скобки-галочки, окружающие символы <FNC1> и <GS>. Это и есть непечатные символы, о которых мы говорили выше, а скобки-галочки в данном случае визуально показывают, что FNC1 и разделитель GS отличаются от всего остального ряда символов нашей строки данных.
Обратите внимание:
FNC1 ≠ последовательность букв и цифр F,N,C,1. GS ≠ паре букв G и S, которые мы могли бы набрать на клавиатуре! Это - управляющие символы, и потому они не являются частью «полезной нагрузки» нашего кода маркировки. И поэтому при печати, добавлять их в строку данных нужно не как печатные символы, а как байты.
В ASCII таблице в байтах символ FNC1 в десятичном виде представлен как 232, в hex - E8.
Разделитель GS – соответственно 29 и 1D.
Но эта информация скорее ознакомительного плана, нежели практического т.к. мы опять же не можем просто набрать эти представления с клавиатуры. Добавить FNC1 и GS в строку данных кода маркировки может только генератор.
Рассмотрим получение кода маркировки на примере известного многим генератора**
https://barcode.tec-it.com.
При выборе типа кода «просто DataMatrix», префикс FNC1 в самом начале кода добавляется вводом в начале строки данных символов \F. Разделитель же добавляем вводом с клавиатуры в нужном месте его HEX представлением в следующем виде: \x1D. При этом, необходимо убедиться в наличии отметки «Определить управляющие последовательности».
Если же выбрать для генерации код GS1 DataMatrix, то тут префикс FNC1 уже подразумевается, генератор его добавляет автоматически, поэтому \F в начале добавлять уже не нужно, ну а разделитель будет тем же, и на том же месте.
* Подчеркиваем: операции с кодами маркировки осуществляются только владельцами и в соответствии со сценариями, одобренными «Честным ЗНАКОМ». Их запрещено накапливать в базах данных и передавать третьим лицам. Статья написана с целью объяснения некоторых правил образования кода DataMatrix пользователям системы.
**Описанное выше применимо только для этого генератора. В других – может быть иначе.