Проблема некорректного считывания кодов маркировки (DataMatrix) для обуви — одна из самых частых задач при внедрении системы «Честный ЗНАК». Типичная ситуация: сканер при считывании выдает строку странной длины (например, 130 или 138 символов вместо ожидаемых), либо данные «склеиваются», теряя важные разделители. В этой статье мы подробно разберем, почему это происходит, и рассмотрим пошаговые инструкции по настройке оборудования для работы с 1С.
Прежде чем переходить к настройкам, проанализируем причину сбоев. В кодах маркировки GS1 DataMatrix используются специальные непечатаемые символы-разделители — GS (Group Separator), имеющие код ASCII 29. Эти символы отделяют друг от друга идентификаторы применения (AI), такие как серийный номер и код проверки (криптохвост).
Когда сканер работает в режиме эмуляции клавиатуры (HID), он пытается передать эти символы как нажатия клавиш. Поскольку символа с кодом 29 на стандартной клавиатуре нет, операционная система или драйвер 1С могут интерпретировать его неверно, игнорировать или заменять на случайные знаки. Это приводит к тому, что 1С не может корректно «разобрать» марку на составляющие, и мы получаем «сырую» строку данных некорректной длины.
Это самый надежный способ, который специалисты называют «золотым стандартом» автоматизации. Рассмотрим, почему это работает лучше. В режиме COM-порта данные передаются не как последовательность нажатых клавиш, а как единый пакет данных в буфер порта. Это полностью исключает влияние таких факторов, как:
Для настройки выполним следующие шаги:
Если по каким-то причинам вы вынуждены оставить сканер в режиме эмуляции клавиатуры (Native 1С драйвер), необходимо заставить устройство корректно передавать разделитель ASCII 29. Проанализируем два способа настройки самого сканера:
Метод эмуляции Alt+029: Многие современные сканеры поддерживают режим, при котором символ GS передается как зажатая клавиша Alt и последовательный ввод цифр 0-2-9 на малой цифровой клавиатуре. Проверьте инструкцию вашего устройства на наличие опции "Alt Mode" или "Enable Alt Code".
Замена на печатный символ: Мы можем настроить сканер так, чтобы он заменял невидимый GS на любой редкий печатный символ, например #. В этом случае в 1С придет строка вида 01...21...#91...#92.... После этого в коде 1С будет легко выполнить обратную замену или корректно распарсить строку.
Если настроить оборудование физически невозможно (например, сканеры старые или работают в терминальной сессии), можно прибегнуть к программному методу, который использовал автор темы. Рассмотрим пример кода, который нормализует считанную строку, добавляя скобки для идентификаторов применения.
Проанализируем ситуацию: код маркировки обуви часто содержит лишние префиксы или некорректную длину из-за особенностей криптохвоста. Посмотрим на пример функции, которую можно внедрить через расширение:
&Вместо("ВнешнееСобытиеПреобразоватьДанныеСоСканераВСтруктуру")
Функция оса_ВнешнееСобытиеПреобразоватьДанныеСоСканераВСтруктуру(Форма, Источник, Событие, Данные) Экспорт
// Проверяем, что событие связано со сканированием и строка данных имеет аномальную длину
Если (Событие = "Штрихкод" Или Событие = "ПолученШтрихкод") И СтрДлина(Данные) > 100 Тогда
// Проверяем наличие разделителя GS (Символ 29) в определенной позиции
Если Сред(Данные, 33, 1) = Символ(29) Тогда
// Формируем корректную структуру GS1 с идентификаторами (01) и (21)
Данные = "(" + Сред(Данные, 2, 2) + ")" + Сред(Данные, 4, 14) + "(" + Сред(Данные, 18, 2) + ")" + Сред(Данные, 20, 13);
КонецЕсли;
КонецЕсли;
// Передаем управление стандартной обработке с уже скорректированными данными
Значение = ПродолжитьВызов(Форма, Источник, Событие, Данные);
Возврат Значение;
КонецФункции
Важный момент: Использование расширений для «исправления» работы сканера — это крайняя мера. Как отмечают эксперты в обсуждении, правильнее использовать актуальные драйверы (например, 1С:Сканеры штрихкода (NativeApi) последних версий), которые уже умеют обрабатывать DataMatrix корректно.
Выясним причину, по которой 1С иногда определяет DataMatrix как Code 128. Это происходит, когда драйвер не получает от сканера информацию о типе считанного кода. Чтобы решить эту проблему, в настройках сканера нужно включить параметр "Transmit AIM ID".
При включении этой опции сканер будет добавлять к каждой строке трехсимвольный префикс. Для GS1 DataMatrix это префикс ]d2. Современные библиотеки 1С умеют распознавать этот префикс и мгновенно определять, что перед ними — марка «Честного ЗНАКа», а не обычный товарный штрихкод или серийный номер.
Рассмотрим дополнительные параметры, которые могут влиять на качество чтения обувных марок:
Подводя итог, скажем: если вы столкнулись с некорректной длиной кода маркировки в 1С, первым делом попробуйте перевести сканер в режим эмуляции COM-порта. Это решит 90% проблем с передачей спецсимволов и раскладкой клавиатуры. И только если этот метод недоступен, приступайте к тонкой настройке префиксов или программной корректировке через Вместо в расширении.