Почему ТСД не считывает код маркировки, распечатанный из 1С со скобками, и как это исправить?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В процессе внедрения маркировки («Честный Знак») многие пользователи и технические специалисты сталкиваются с неприятной ситуацией. Этикетка, распечатанная напрямую из личного кабинета «Честного Знака», без проблем сканируется любыми терминалами сбора данных (ТСД) и 2D-сканерами. Однако точно такая же этикетка, отправленная на печать из локальной базы 1С (особенно из старых или доработанных релизов, таких как «Управление торговлей 10.3»), намертво блокирует работу ТСД — сканер либо вообще не реагирует, либо выдает ошибку неопознанного штрихкода. При этом визуально на этикетке из 1С могут присутствовать круглые скобки вокруг идентификаторов применения, например: (01)04600073....

В этой статье мы подробно разберем техническую суть данной проблемы, выясним, почему так происходит, и рассмотрим пошаговые практические методы ее решения в системе 1С.

В чем техническая суть проблемы?

Для начала проанализируем, как устроен международный стандарт кодирования GS1 DataMatrix, который является обязательным для маркировки товаров в РФ. Нам необходимо четко разделять два понятия:

  1. Визуальное представление кода для человека (HRI — Human Readable Interpretation): Это текстовая строка, которая печатается под или рядом со штрихкодом. В этой строке круглые скобки вокруг идентификаторов применения (например, (01) для GTIN или (21) для серийного номера) используются исключительно для удобства чтения человеком. Они помогают визуально отделить одну группу данных от другой.
  2. Внутреннее графическое содержимое штрихкода: Внутри самого квадратного кода DataMatrix (в его черных и белых пикселях) никаких скобок быть не должно! Роль разделителей в бинарном коде выполняют специальные служебные управляющие символы. В самом начале кода обязательно должен стоять невидимый префикс <FNC1> (символ с кодом 232), указывающий сканеру, что перед ним именно стандарт GS1. А между группами данных переменной длины должен располагаться специальный символ-разделитель группы <GS> (ASCII-символ с кодом 29).

Выясним причину сбоя при печати из 1С. Когда учетная система формирует картинку штрихкода через устаревшие механизмы или стандартную компоненту без правильных настроек, она передает в генератор строку "как есть" — вместе со скобками. В результате компонента печати воспринимает скобки как обычные текстовые символы и буквально кодирует символы открывающейся и закрывающейся скобок внутрь графической картинки.

Когда ТСД считывает такой некорректно сформированный штрихкод, его внутреннее программное обеспечение (например, Cleverence, Mobile SMARTS или утилиты сканирования Android) пытается распознать структуру GS1 DataMatrix. Не обнаружив обязательного префикса <FNC1> и наткнувшись на физические символы скобок внутри закодированной строки, ТСД расценивает этот штрихкод как невалидный и отказывается его обрабатывать.

Рассмотрим подробнее, как мы можем исправить эту ситуацию и научить 1С генерировать правильные этикетки.

Шаг 1. Диагностика и проверка штрихкода

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

  1. Подключим ТСД или обычный проводной 2D-сканер к компьютеру в режиме эмуляции клавиатуры (так, чтобы сканируемый текст вводился туда, где установлен курсор).
  2. Откроем на компьютере самый обычный текстовый редактор «Блокнот».
  3. Отсканируем проблемную этикетку, распечатанную из 1С.

Если в Блокноте появилась строка, которая начинается непосредственно с физических символов скобок, например: (01)04600073..., то наш диагноз подтвердился. На правильно сформированной этикетке скобок при сканировании в Блокнот быть не должно (вместо них в начале может отображаться невидимый символ или специальный префикс, а сами цифры будут идти подряд).

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

Шаг 2. Настройка шаблона этикетки в 1С (без программирования)

В большинстве типовых конфигураций 1С (включая более свежие релизы «Управление торговлей», «Розница» или «УНФ») проблема решается правильным выбором типа штрихкода в макете этикетки. Выполним следующие действия:

  1. Перейдем в режим редактирования шаблона (макета) этикетки в вашей информационной базе.
  2. Найдите элемент управления, который отвечает за отображение графического штрихкода DataMatrix.
  3. Откройте свойства этого элемента управления штрихкодом.
  4. В поле Тип кода (или Тип штрихкода) найдите и строго установите значение GS1 DataMatrix (в некоторых версиях этот тип может иметь числовое обозначение 24). Ни в коем случае не выбирайте обычный DataMatrix!

При выборе правильного типа GS1 DataMatrix внешняя компонента печати 1С сама проанализирует входящую строку. Она автоматически распознает скобки, удалит их из формируемой графической сетки кода, подставит необходимый управляющий символ <FNC1> на первое место и корректно сформирует изображение. При этом текстовая подпись под кодом останется со скобками для удобства складских работников. При необходимости можно также использовать расширение с готовым шаблоном печати этикеток с DataMatrix.

Шаг 3. Обновление компоненты «1С:Печать штрихкодов»

Что делать, если в списке доступных типов штрихкодов в вашей 1С нет варианта GS1 DataMatrix? Это означает, что на вашем компьютере установлена устаревшая версия внешней компоненты генерации штрихкодов от 1С.

Поддержка полноценного стандарта GS1 DataMatrix (тип кода 24) появилась в компоненте 1CBarCode.exe начиная с версии 9.0.6.4. Если у вас установлена более ранняя версия, выполните обновление:

  1. Зайдите на официальный портал поддержки 1С:ИТС в раздел обновлений и скачайте актуальный дистрибутив «1С:Печать штрихкодов».
  2. Закройте все запущенные сеансы 1С на компьютере, с которого производится печать этикеток.
  3. Установите новую версию компоненты, запустив скачанный установщик с правами администратора.
  4. После повторного запуска 1С в свойствах объектов печати появится нужный нам тип кода 24 (GS1 DataMatrix).

Шаг 4. Программное исправление для разработчиков (изменение кода 1С)

Если вы столкнулись с ситуацией, когда печать этикеток в вашей конфигурации (например, в сильно измененной УТ 10.3) полностью формируется программно, потребуется небольшая доработка кода. Рассмотрим два основных сценария, которые разработчик может применить на практике.

Вариант А. Программная установка типа штрихкода компоненты

Убедимся, что при программном формировании объекта компоненты печати мы явно указываем верный тип кодирования. Посмотрим на пример кода, который задает нужные свойства:


// Получаем рисунок штрихкода из макета и устанавливаем свойства компоненты
ОбластьМакета = Макет.ПолучитьОбласть("ОбластьШтрихкода");
РисунокШтрихкод = ОбластьМакета.Рисунки.Штрихкод;

// Указываем тип кода 24, который соответствует стандарту GS1 DataMatrix
РисунокШтрихкод.Объект.ТипКода = 24;

// Передаем исходную строку маркировки со скобками
// Компонента версии 9.0.6.4 и выше сама очистит ее и сформирует верный код
РисунокШтрихкод.Объект.Сообщение = СтрокаКодаМаркировки;

Вариант Б. Ручное формирование строки без скобок с разделителем GS

Если по какой-то причине на предприятии используются старые принтеры или специализированное ПО, не умеющее работать с типом кода 24, программисту придется очистить строку от скобок вручную и вставить правильные разделители. Разберем по шагам, как это реализовать.

В соответствии со стандартами, нам необходимо заменить скобки и внедрить управляющий символ <GS>, роль которого в кодировке ASCII выполняет символ с кодом 29. Посмотрим на пример функции, которая преобразует строку со скобками в правильный формат для кодирования через обычный DataMatrix:


Функция ПодготовитьКодМаркировкиДляОбычногоDataMatrix(ИсходныйКод) Экспорт
    
    // Очищаем строку от скобок идентификаторов применения
    // Например, преобразуем "(01)04600073123456(21)ABC12345" 
    // в "010460007312345621ABC12345" с добавлением разделителя GS
    
    Результат = ИсходныйКод;
    Результат = СтрЗаменить(Результат, "(01)", "01");
    Результат = СтрЗаменить(Результат, "(21)", "21");
    
    // Идентификатор (91) указывает на ключ проверки, перед ним должен стоять разделитель GS
    СимволGS = Символ(29); 
    
    // Если в строке присутствует идентификатор (91), заменяем его на разделитель GS + "91"
    Результат = СтрЗаменить(Результат, "(91)", СимволGS + "91");
    // Аналогично поступаем со вторым крипто-хвостом (92)
    Результат = СтрЗаменить(Результат, "(92)", СимволGS + "92");
    
    Возврат Результат;
    
КонецФункции

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

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

← На главную