При переходе на обязательную маркировку товаров (обувь, одежда, табак, парфюмерия и др.) пользователи устаревших конфигураций на обычных формах, таких как «1С:Управление торговлей 10.3», часто сталкиваются с аппаратными и программными трудностями при подключении 2D-сканеров. Модель Mertech Superlead представляет собой отличное и производительное устройство для считывания двумерных кодов типа GS1 DataMatrix, однако его интеграция требует точной последовательности действий. При переходе на современную версию программы для облегчения работы с маркировкой можно выполнить разовый перенос данных из УТ 10.3 в УТ 11.
В этой статье мы подробно разберем, почему сканер может не работать «из коробки», как правильно перевести его в нужный режим, настроить генерацию внешнего события в 1С и избежать методологических ошибок при заполнении справочника номенклатуры.
По умолчанию большинство сканеров поставляются настроенными в режиме эмуляции клавиатуры (USB-HID). В таком режиме устройство имитирует быстрый ввод символов пользователем с клавиатуры. Если вы отсканируете штрихкод в Блокнот, данные отобразятся там, где установлен курсор.
Однако при работе с маркированными товарами «Честного ЗНАКа» клавиатурный режим непригоден по следующим причинам:
GS (ASCII-символ 29). При работе в режиме клавиатуры операционная система Windows интерпретирует этот символ как управляющую команду и прерывает передачу данных. В результате в Блокнот или в 1С вместо полной марки (длиной около 85 символов) попадает только ее первая часть (GTIN и серийный номер), например: 010290000073010621YB. Полный код с криптохвостом (заканчивающийся на ==) передать не удается.Для корректной работы сканер Mertech Superlead необходимо перевести в режим эмуляции COM-порта (USB-COM). В этом режиме данные передаются напрямую в виде сырого байтового потока, игнорируя раскладку клавиатуры и полностью сохраняя спецсимволы GS. Для подключения оборудования в типовых конфигурациях можно использовать обработку обслуживания сканеров на NativeAPI.
Рассмотрим ситуацию, когда сканер переведен в режим COM-порта, виртуальный порт определился в системе, специальная утилита (например, Hercules или Portmon) видит поток данных при сканировании, а в 1С ничего не происходит.
Выясним причину этого поведения. Платформа «1С:Предприятие» взаимодействует с торговым оборудованием по событийно-ориентированному принципу. Драйвер торгового оборудования (например, «1С:Сканер штрихкода») постоянно опрашивает порт в фоновом режиме. Он не передает данные в конфигурацию посимвольно. Драйвер накапливает приходящие байты в буфере и ожидает специального сигнала окончания посылки — суффикса.
Обычно в качестве суффикса выступает символ возврата каретки — CR (Carriage Return, десятичный код 13, кнопка Enter). Как только драйвер обнаруживает этот символ в потоке, он «схлопывает» пакет данных и генерирует в платформе стандартное ВнешнееСобытие. Если на самом сканере суффикс не настроен (или настроен неверно), драйвер 1С будет бесконечно ждать окончания посылки, и программа никак не отреагирует на сканирование.
Рассмотрим пошагово процесс аппаратной настройки оборудования:
COM5).Для того чтобы сканер отправлял символ окончания посылки в порт, выполните следующее:
0x0D).Теперь перейдем к программной настройке конфигурации 1С. Поскольку «Управление торговлей 10.3» работает на обычных (неуправляемых) формах, путь настройки выглядит следующим образом:
1CScan唬Skt.epf (или выберите встроенный Native-драйвер «1С:Сканер штрихкода» в зависимости от релиза вашей конфигурации).COM5).Если ваша база 1С развернута на удаленном сервере, а сканер подключен к локальному компьютеру, виртуальный COM-порт необходимо «пробросить» в сессию RDP:
COM5 (перенаправлено 3)). Именно его нужно будет выбрать в настройках торгового оборудования в 1С на сервере.Проанализируем частую ошибку пользователей: попытку отсканировать код маркировки DataMatrix непосредственно в карточку номенклатуры на вкладку «Штрихкоды».
Важно понимать:
Правильный алгоритм работы в 1С:УТ 10.3 выглядит следующим образом:
Посмотрим, как на уровне кода в конфигурации УТ 10.3 реализован прием данных от сканера штрихкода. Обработка сигналов происходит в процедуре ВнешнееСобытие модуля формы документа или модуля управляемого приложения.
Приведем пример упрощенного кода, который демонстрирует логику работы драйвера при получении данных из COM-порта:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
// Проверим, что событие пришло именно от сканера штрихкода
Если ПолучитьПолучателяСобытия(Источник) = "СканерШтрихкода" Тогда
// Очистим полученную строку от возможных пробелов и спецсимволов по краям
СчитанныйКод = СокрЛП(Данные);
// Проанализируем длину и структуру считанного кода
Если СтрДлина(СчитанныйКод) > 20 Тогда
// Предполагаем, что это двумерный код DataMatrix
ОбработатьКодМаркировки(СчитанныйКод);
Иначе
// Обычный линейный штрихкод EAN-13
ОбработатьЛинейныйШтрихкод(СчитанныйКод);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция ОбработатьКодМаркировки разбирает структуру полученной строки, находит идентификаторы применения (AI), отделяет GTIN от индивидуального серийного номера и проверяет корректность криптографической подписи. Именно поэтому при работе по COM-порту критически важно сохранение структуры байт-в-байт.
Если ваш сканер Mertech Superlead не сканирует коды в 1С:УТ 10.3, воспользуйтесь следующим экспресс-чек-листом:
Выполнение этих шагов гарантирует стабильную и корректную работу сканера Mertech Superlead с любыми кодами маркировки в среде 1С:Предприятие.