В процессе внедрения маркировки («Честный Знак») многие пользователи и технические специалисты сталкиваются с неприятной ситуацией. Этикетка, распечатанная напрямую из личного кабинета «Честного Знака», без проблем сканируется любыми терминалами сбора данных (ТСД) и 2D-сканерами. Однако точно такая же этикетка, отправленная на печать из локальной базы 1С (особенно из старых или доработанных релизов, таких как «Управление торговлей 10.3»), намертво блокирует работу ТСД — сканер либо вообще не реагирует, либо выдает ошибку неопознанного штрихкода. При этом визуально на этикетке из 1С могут присутствовать круглые скобки вокруг идентификаторов применения, например: (01)04600073....
В этой статье мы подробно разберем техническую суть данной проблемы, выясним, почему так происходит, и рассмотрим пошаговые практические методы ее решения в системе 1С.
Для начала проанализируем, как устроен международный стандарт кодирования GS1 DataMatrix, который является обязательным для маркировки товаров в РФ. Нам необходимо четко разделять два понятия:
(01) для GTIN или (21) для серийного номера) используются исключительно для удобства чтения человеком. Они помогают визуально отделить одну группу данных от другой.<FNC1> (символ с кодом 232), указывающий сканеру, что перед ним именно стандарт GS1. А между группами данных переменной длины должен располагаться специальный символ-разделитель группы <GS> (ASCII-символ с кодом 29).Выясним причину сбоя при печати из 1С. Когда учетная система формирует картинку штрихкода через устаревшие механизмы или стандартную компоненту без правильных настроек, она передает в генератор строку "как есть" — вместе со скобками. В результате компонента печати воспринимает скобки как обычные текстовые символы и буквально кодирует символы открывающейся и закрывающейся скобок внутрь графической картинки.
Когда ТСД считывает такой некорректно сформированный штрихкод, его внутреннее программное обеспечение (например, Cleverence, Mobile SMARTS или утилиты сканирования Android) пытается распознать структуру GS1 DataMatrix. Не обнаружив обязательного префикса <FNC1> и наткнувшись на физические символы скобок внутри закодированной строки, ТСД расценивает этот штрихкод как невалидный и отказывается его обрабатывать.
Рассмотрим подробнее, как мы можем исправить эту ситуацию и научить 1С генерировать правильные этикетки.
Прежде чем вносить изменения в конфигурацию или шаблоны 1С, убедимся, что проблема действительно кроется в "зашитых" скобках. Проведем простой тест:
Если в Блокноте появилась строка, которая начинается непосредственно с физических символов скобок, например: (01)04600073..., то наш диагноз подтвердился. На правильно сформированной этикетке скобок при сканировании в Блокнот быть не должно (вместо них в начале может отображаться невидимый символ или специальный префикс, а сами цифры будут идти подряд).
Также для проверки рекомендуем воспользоваться бесплатными мобильными приложениями на смартфоне для анализа штрихкодов. Качественные сканеры штрихкодов покажут тип считанного кода: для правильной этикетки это будет GS1 DataMatrix, а для некорректной — обычный DataMatrix со скобками внутри строки.
В большинстве типовых конфигураций 1С (включая более свежие релизы «Управление торговлей», «Розница» или «УНФ») проблема решается правильным выбором типа штрихкода в макете этикетки. Выполним следующие действия:
DataMatrix!При выборе правильного типа GS1 DataMatrix внешняя компонента печати 1С сама проанализирует входящую строку. Она автоматически распознает скобки, удалит их из формируемой графической сетки кода, подставит необходимый управляющий символ <FNC1> на первое место и корректно сформирует изображение. При этом текстовая подпись под кодом останется со скобками для удобства складских работников. При необходимости можно также использовать расширение с готовым шаблоном печати этикеток с DataMatrix.
Что делать, если в списке доступных типов штрихкодов в вашей 1С нет варианта GS1 DataMatrix? Это означает, что на вашем компьютере установлена устаревшая версия внешней компоненты генерации штрихкодов от 1С.
Поддержка полноценного стандарта GS1 DataMatrix (тип кода 24) появилась в компоненте 1CBarCode.exe начиная с версии 9.0.6.4. Если у вас установлена более ранняя версия, выполните обновление:
Если вы столкнулись с ситуацией, когда печать этикеток в вашей конфигурации (например, в сильно измененной УТ 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 из текстовых данных.
Применяя указанные методики настройки и доработки, мы сможем гарантировать стабильную работу оборудования на складе и избежать задержек при приемке и отгрузке маркированной продукции.