Почему сканер ТСД не распознает штрихкод складской ячейки, сформированный из GUID?

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

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

Анализ алгоритма генерации

Давайте разберем, как происходит формирование штрихкода. Обычно используется стандартная логика преобразования 16-ричного представления GUID в десятичное число. Рассмотрим функцию, которая выполняет это преобразование:


Функция ЧисловойКодПоСсылке(Ссылка) Экспорт
    ШестнадцатиричноеЧисло = СтрЗаменить(Строка(Ссылка.УникальныйИдентификатор()), "-", "");
    Возврат ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(ШестнадцатиричноеЧисло);
КонецФункции

Функция ПреобразоватьИзШестнадцатиричнойСистемыСчисленияВДесятичноеЧисло(Знач Значение)
    Значение = НРег(Значение);
    ДлинаСтроки = СтрДлина(Значение);
    Результат = 0;
    Для НомерСимвола = 1 По ДлинаСтроки Цикл
        Результат = Результат * 16 + СтрНайти("0123456789abcdef", Сред(Значение, НомерСимвола, 1)) - 1;
    КонецЦикла;
    Возврат Формат(Результат, "ЧГ=0");
КонецФункции

Эта функция на выходе дает длинную строку цифр. На этапе поиска ячейки в базе используется обратная функция ПолучитьСсылкуПоШтрихкодуТабличногоДокумента, которая восстанавливает GUID из числа и ищет объект. Если в отладчике обе функции работают корректно и находят нужную ссылку, значит, проблема кроется не в программной части 1С, а в физической реализации или настройках сканирования.

Возможные причины сбоя

Рассмотрим основные факторы, которые мешают сканеру распознать штрихкод:

  1. Физическое качество печати: Длинный цифровой код, преобразованный из GUID, создает очень плотный рисунок штрихов. При печати на термопринтере с низким разрешением или при чрезмерном сжатии изображения тонкие линии «слипаются». Сканер ТСД физически не может различить границы между ними, что приводит к ошибке считывания.
  2. Ограничения формата Code128: Типовые этикетки часто используют формат Code128. Хотя он поддерживает большое количество символов, его надежность при печати сверхдлинных последовательностей значительно ниже, чем у двухмерных кодов.
  3. Особенности ПО ТСД: Стороннее программное обеспечение (например, решения на базе Cleverence) может иметь встроенные фильтры или шаблоны. Если длина считанной строки не попадает в ожидаемый диапазон, система может отсекать часть данных или блокировать ввод.
  4. Проблема лидирующих нулей: При конвертации типов Число может терять незначащие нули в начале строки. Если база ожидает 32-значный идентификатор, а из-за потери нуля строка стала короче, алгоритм восстановления GUID не сработает корректно.

Рекомендации по исправлению

Чтобы окончательно решить проблему, рекомендуем предпринять следующие шаги:

1. Смена формата штрихкода на DataMatrix. Это наиболее надежный путь. DataMatrix — это двухмерный код, который гораздо компактнее линейных форматов. Он позволяет закодировать тот же объем данных в маленьком квадрате, который легко считывается практически любым современным сканером, даже при неидеальной печати.

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


// Пример дополнения строки до 32 символов
Пока СтрДлина(ШтрихкодВШестнадцатиричномВиде) < 32 Цикл
    ШтрихкодВШестнадцатиричномВиде = "0" + ШтрихкодВШестнадцатиричномВиде;
КонецЦикла;

3. Тестирование «сырого» ввода. Если вы подозреваете программный сбой, попробуйте отсканировать проблемный штрихкод в «Блокнот» на ТСД или ПК. Если в блокноте вы видите полную и верную строку цифр — значит, сканер работает исправно, и искать причину нужно в настройках обработки Cleverence или другой системы, которая обрабатывает событие сканирования.

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

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

← На главную