На главнуюПроверить коды
12 октября 2026 г.

Материал подготовлен редакцией BarZnak.

Сканер не передаёт GS в DataMatrix Честного Знака: как найти и исправить проблему

Сканер не передаёт GS в DataMatrix Честного Знака: как найти и исправить проблему
BarZnak

Не хотите разбираться вручную? Откройте генератор и подготовьте этикетки в одном месте.

DataMatrix может уверенно считываться, подавать звуковой сигнал и вставлять длинную строку в поле — но Wildberries, Ozon или личный кабинет Честного Знака всё равно сообщает, что код неверный. Одна из частых причин: сканер распознал изображение, но при передаче строки потерял непечатаемый разделитель GS. Ниже разберём, чем GS отличается от FNC1, где именно ломается строка и как проверить оборудование без рискованных изменений самого кода маркировки.

Короткий ответ

GS — управляющий символ Group Separator с десятичным кодом 29 и шестнадцатеричным значением 0x1D. Он разделяет блоки переменной длины внутри данных GS1. На экране GS обычно не виден, поэтому отсутствие пробела между частями строки ещё ничего не доказывает.

Внутри GS1 DataMatrix используется служебный символ FNC1. Когда FNC1 выполняет роль разделителя, сканер должен передать принимающей программе символ GS. Именно на этом переходе часто возникает путаница: FNC1 нельзя набрать обычной клавиатурой, а GS может быть потерян режимом USB-клавиатуры, драйвером, браузером или настройкой форматирования сканера.

Не вставляйте пробел, вертикальную черту, текст «GS» или видимый символ-разделитель внутрь кода. Это другие байты. Для системы GS — именно управляющее значение ASCII 29.

Как устроена строка кода маркировки

Код маркировки состоит из нескольких элементных строк GS1. Каждая начинается с идентификатора применения — AI. Конкретный набор и длина полей зависят от товарной группы, поэтому нельзя без проверки переносить схему обуви на лекарства, молочную продукцию или другую категорию.

В распространённой структуре с AI 01, 21, 91 и 92 логика выглядит так:

  1. 01 сообщает, что дальше записан GTIN товара.
  2. 21 открывает серийный номер конкретного экземпляра.
  3. После поля переменной длины ставится разделитель <GS>, если затем идёт следующий блок.
  4. 91 обозначает ключ проверки.
  5. После него также может требоваться <GS> перед следующим блоком.
  6. 92 открывает значение кода проверки и обычно является последним блоком такой строки.

Для наглядности строку часто показывают так:

01 + GTIN + 21 + серийный номер + <GS> + 91 + ключ + <GS> + 92 + криптохвост

Это учебная запись. Знаки «+», пробелы и надпись <GS> в реальных данных отсутствуют. Разделитель занимает один управляющий байт. По правилам GS1 он нужен после элемента непредопределённой длины, если за ним закодирован ещё один элемент. После последнего элемента отдельный разделитель обычно не требуется.

FNC1, GS и ]d2 — три разных понятия

FNC1

FNC1 — функциональный символ внутри штрихкода. В первой позиции он показывает, что перед нами именно GS1 DataMatrix, а не произвольный Data Matrix. Кроме того, FNC1 может использоваться для разделения элементных строк.

GS, ASCII 29, 0x1D

GS — значение, которое получает программа после декодирования разделителя. Три записи ASCII 29, hex 1D и 0x1D обозначают один и тот же управляющий символ. Он непечатаемый: текстовое поле может хранить его, не показывая отдельного знака.

]d2

]d2 — идентификатор символики, который настроенный сканер может передать перед данными GS1 DataMatrix. Он помогает программе понять тип считанного носителя. Это не замена GS и не часть GTIN или серийного номера. Одни рабочие процессы ожидают этот префикс, другие отключают его — требования нужно проверять у принимающей системы.

Почему в Блокноте невозможно надёжно проверить GS

Блокнот полезен, чтобы увидеть общую строку и случайные переводы строк, но он не показывает управляющие байты понятным способом. В режиме эмуляции клавиатуры GS иногда превращается в сочетание Ctrl+], игнорируется приложением либо запускает действие вместо вставки символа. Визуально две разные строки могут выглядеть одинаково.

Надёжная проверка должна показывать код каждого символа или шестнадцатеричное представление. В исправной строке на месте разделителя будет значение 29 или 1D. Если между серийным номером и AI 91 символа нет, данные склеены. Если вместо него стоит пробел 20, знак | или два печатных символа G и S, это тоже неверная передача.

Где может потеряться разделитель

1. В исходном файле

CSV или TXT могли открыть и пересохранить программой, которая обработала управляющие символы. Табличные редакторы также меняют кавычки, разделители столбцов и кодировку. Поэтому исходную выгрузку Честного Знака лучше хранить отдельно и не пересохранять вручную.

2. При создании нового DataMatrix

Обычный генератор Data Matrix может закодировать строку как текст и не добавить начальный FNC1. Другой генератор автоматически включает GS1-режим, но ожидает собственную запись управляющих последовательностей. Настройка \x1D, ^1, макросы и специальные токены зависят от программы — универсального печатного обозначения для всех редакторов нет.

3. В настройках сканера

Сканер может быть запрограммирован удалять управляющие символы, заменять их на видимый текст, отправлять только отдельные поля или применять правило форматирования. Иногда это остаётся после настройки оборудования для другой программы.

4. В режиме USB HID Keyboard

Здесь устройство имитирует клавиатуру. Обычные буквы и цифры проходят легко, а управляющий код 29 приходится передавать как специальное событие клавиатуры. В документации Zebra для Android ему соответствует Ctrl+]. Не каждое поле браузера и не каждая операционная система одинаково обрабатывает такое событие.

5. В принимающем приложении

Строка может дойти до браузера правильно, но обработчик ввода очистит непечатаемые символы. Возможна и обратная ситуация: код не принимается из-за неправильной раскладки, добавленного Enter, префикса ]d2 или лишнего суффикса, хотя GS присутствует.

Диагностика за десять минут

  1. Сохраните исходник. Не работайте с единственной копией CSV или PDF.
  2. Возьмите один заведомо рабочий код. Лучше из исходной выгрузки, а не переписанный со старой этикетки.
  3. Проверьте код официальным приложением. Если изображение не распознаётся, сначала исправляйте качество печати, размер и контраст.
  4. Отсканируйте в программу, показывающую байты. Найдите 1D между переменными полями.
  5. Сравните два способа подключения. Если сканер поддерживает COM/Serial или передачу данных через SDK, сравните результат с USB-клавиатурой.
  6. Проверьте другой ввод. Сканирование в тестовую утилиту и в поле маркетплейса поможет понять, теряется символ в сканере или уже в браузере.
  7. Сбросьте только форматирование. Перед полным заводским сбросом сохраните текущую конфигурацию и руководство модели.
  8. Повторите тест на одном коде. Не меняйте одновременно раскладку, суффикс, задержку и замену GS.

Как отличить проблему печати от проблемы передачи

Если один сканер не распознаёт сам квадрат DataMatrix, проверяйте размер модулей, контраст, свободное поле, плотность печати и повреждение наклейки. Если сканер уверенно подаёт сигнал и возвращает длинную строку, но система отклоняет её, переходите к проверке структуры и управляющих символов.

Полезный контрольный эксперимент — считать один и тот же код двумя устройствами. Если мобильное приложение показывает корректный товар, а стационарный сканер передаёт укороченную или склеенную строку, изображение, скорее всего, исправно. Настраивать нужно канал вывода стационарного сканера.

Что искать в руководстве сканера

Названия пунктов отличаются, но обычно полезны следующие разделы:

  • USB HID Keyboard / Keyboard Wedge — режим клавиатуры;
  • USB CDC, COM или Serial — передача байтов через последовательный интерфейс;
  • GS1 DataMatrix — включение соответствующей символики;
  • Transmit AIM ID — передача префикса типа ]d2;
  • Control Character Output — вывод управляющих значений;
  • Group Separator Replacement — замена GS другим символом;
  • Data Formatting / ADF — правила удаления, вставки и замены;
  • Inter-character Delay — задержка между событиями клавиатуры.

Не сканируйте подряд случайные конфигурационные штрихкоды из чужих инструкций. Команды зависят от производителя и модели. Неверная команда может поменять интерфейс подключения, раскладку или суффикс, после чего устройство перестанет работать в привычной программе.

USB-клавиатура или COM-порт

Режим клавиатуры удобен: курсор ставят в поле и сканируют без отдельного ПО. Но управляющие символы проходят через слой клавиатурных событий. Для интеграций, где важно сохранить исходные байты, последовательный интерфейс, SDK производителя или программная передача данных часто надёжнее.

Это не означает, что любой USB HID обязательно удаляет GS. Правильно настроенный сканер может передавать управляющее значение. Выбор зависит от возможностей модели и приложения: браузерная форма обычно рассчитана на клавиатуру, учётная система может принимать COM, а терминал сбора данных передаёт результат через собственный сервис.

Почему нельзя «восстановить GS по длине» во всех случаях

Иногда программа знает точную структуру конкретной товарной группы и может определить границы полей. Но серийные номера и криптографические части отличаются по форматам, а GS1 содержит множество идентификаторов применения. Автоматическая вставка по одной фиксированной позиции без проверки категории способна создать внешне похожий, но неверный код.

Безопасный источник — исходная полная последовательность кода маркировки. Если она утеряна, лучше повторно получить файл из разрешённого сценария Честного Знака, чем собирать криптохвост вручную.

Что делать с PDF и CSV

PDF содержит уже отрисованные символы. При корректном извлечении полный код можно восстановить декодированием каждого DataMatrix. CSV содержит исходные строки и удобнее для массовой генерации, но чувствителен к пересохранению и обработке управляющих символов.

  • Не открывайте рабочий CSV в Excel с последующим сохранением поверх исходника.
  • Не копируйте код через мессенджер: сервис может изменить управляющие значения.
  • Не удаляйте символ только потому, что редактор показывает его квадратом или пробелом.
  • Сверяйте количество исходных кодов и количество созданных этикеток.
  • Перед тиражом проверяйте один напечатанный DataMatrix и фактическую строку после сканирования.

В конвертере PDF Честного Знака в CSV можно извлечь коды из исходного PDF, а затем использовать их в редакторе этикеток BarZnak. Работайте с копией файла и сохраняйте оригинал до завершения поставки.

Частые вопросы

Почему код читается телефоном, но не принимается в поле Ozon или Wildberries?

Телефон может декодировать символ и самостоятельно разобрать GS1-структуру. Стационарный сканер в режиме клавиатуры передаёт последовательность нажатий, среди которых управляющий GS способен потеряться. Сравните байты результата и проверьте настройки вывода.

Можно ли заменить GS клавишей Enter или Tab?

Только если конкретная принимающая система прямо описывает такую замену. По стандарту разделителем является ASCII 29, а Enter и Tab имеют другие значения. Произвольная замена меняет данные.

Нужно ли добавлять GS в самом конце строки?

GS1 указывает, что разделитель не требуется после последнего элементного поля. Однако точный формат кода определяется товарной группой и правилами системы маркировки. Не добавляйте символы к официальной строке без необходимости.

Что означает квадрат или непонятный знак между частями кода?

Так редактор может отображать непечатаемый символ. Проверьте его числовое значение: правильный GS — десятичное 29 или hex 1D. Внешний вид значка не является доказательством.

Поможет ли заводской сброс сканера?

Иногда, если старое правило форматирования удаляет GS. Но сброс также меняет интерфейс, раскладку и суффиксы. Сначала сохраните конфигурацию, найдите руководство своей модели и проверьте только параметры GS1 и управляющих символов.

Итоговый чек-лист

  1. DataMatrix физически считывается без задержки.
  2. В исходном файле сохранена полная последовательность кода.
  3. Между необходимыми переменными полями присутствует байт 1D.
  4. Сканер не заменяет GS пробелом, текстом или другим суффиксом.
  5. Раскладка клавиатуры не меняет буквы криптохвоста.
  6. Принимающее поле получает строку без лишнего Enter, префикса и обрезания.
  7. Проверка выполнена на одном коде до печати всей партии.

Источники

Сканер не передаёт GS в DataMatrix — настройка ASCII 29 | BarZnak