...или как не добавлять яблоки в кучу к апельсинам
Нет- нет, вы по прежнему на нашем канале про штрих коды, но откуда такой странный заголовок? А ведь примерно то же происходит, когда при попытке создать в генераторе* код маркировки GS1 DataMatrix к печатным символам (тем, которые можно ввести с клавиатуры) добавляют непечатные, управляющие (например, известный всем разделитель GS). Вот прямо буковками с клавиатуры последовательно вводят: «G», «S». А потом удивляются – почему код получается не валидным.
Давайте разберемся, почему так происходит, а для этого разберем - из каких "кирпичиков"-элементов собирается штрих код GS1 DataMatrix.
Предположим, у вас есть некая уникальная последовательность символов, которая формируется оператором и называется кодом маркировки. Например, вот такая, применительно к молоку: 0112345678901231215w9EJp93abc1.
Если эту последовательность забить в генератор, в том виде, как она есть, в надежде получить черно-белый графический значок 2D код DataMatrix, чтобы затем напечатать его и наклеить на упаковку с продуктом, то таким планам не суждено сбыться. То есть код DataMatrix вы получите, и он даже будет считываться сканером, но не будет являться средством идентификации для системы «Честный ЗНАК» (официальное приложение, ТСД будут «ругаться» на такой код).
Каких важных элементов не хватает коду?
Во-первых, нужно помнить, что 2D код для системы маркировки должен быть не просто DataMatrix, а GS1 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 пользователям системы.
**Необходимо подчеркнуть, что вышесказанное применимо только для этого генератора. В других – может быть иначе.
Есть вопросы по качеству печати штрих кодов?
Можете задать их нам на нашем сайте
#честныйзнак #обязательная маркировка #штриховое кодирование