С введением обязательной маркировки товаров («Честный ЗНАК», табачные изделия, обувь, лекарства) перед пользователями классических «клюшек» (1С 7.7) встал вопрос: как заставить старую добрую систему корректно считывать двумерные коды DataMatrix. Проблема заключается не только в физической способности сканера увидеть код, но и в том, как эти данные передаются в программу. В этой статье мы подробно разберем, почему старые методы «в разрыв клавиатуры» больше не эффективны и как правильно настроить современный сканер, такой как Datalogic QW2400, для стабильной работы.
Рассмотрим ситуацию, когда сканер подключен просто как USB-клавиатура. Проанализируем основные проблемы, с которыми вы столкнетесь:
GS (Group Separator, ASCII 29). В клавиатурном режиме операционная система или RDP-клиент могут его просто проигнорировать, «склеив» части штрихкода, что сделает его невалидным для проверки.Выясним причину: 1С 7.7 ожидает данные через механизм «Внешнее событие», который лучше всего работает с COM-портами. Поэтому единственно верным решением является перевод сканера в режим эмуляции COM-порта (USB-COM).
Разберем по шагам процесс настройки на примере Datalogic QW2400. Почти все современные USB-сканеры поддерживают виртуальный COM-порт.
Datalogic Scanner (COM3). Запомним номер порта.Важный нюанс: После смены режима сканер может «пропасть» из системы на несколько секунд. Если порт не появился, попробуйте физически переподключить кабель USB.
Если ваша 1С 7.7 развернута на сервере, проанализируем, как пробросить наш локальный COM-порт в терминальную сессию. Посмотрим на стандартные средства:
В настройках RDP-клиента (mstsc.exe) перед подключением перейдем на вкладку «Локальные ресурсы». Нажмем кнопку «Подробнее...» и обязательно установим флажок на пункте «Порты». Теперь при входе на сервер ваш локальный COM3 станет доступен внутри сессии под тем же или другим именем.
Проверить проброс на сервере можно командой в командной строке:
change port /query
Если стандартный проброс работает нестабильно (что бывает при большом количестве пользователей), рекомендуется использовать утилиту net use в стартовом скрипте пользователя:
net use com3: \\client\com3:
Теперь разберем, будет ли работать старая библиотека. Стандартная ScanOpos.dll версии 7.0 часто не справляется с длинными кодами DataMatrix. Проанализируем решение:
Рекомендуется использовать версию ScanOpos.dll 8.0.8.4 или выше. Также отличные результаты показывает библиотека от компании «Штрих-М» (Scaner1C.dll). Рассмотрим процесс подключения в конфигурации:
ПриНачалеРаботыСистемы:
Если ЗагрузитьВнешнююКомпоненту("ScanOpos.dll") <> 1 Тогда
Предупреждение("Ошибка загрузки ScanOpos.dll");
КонецЕсли;
#13 (символ CR).Для правильной работы с маркировкой табака и других товаров нам нужно научить 1С опознавать символ-разделитель GS. Поскольку 1С 7.7 не всегда корректно принимает символ с кодом 29 через внешнее событие, применим хитрость — замену символа на уровне сканера.
Используем утилиту Datalogic Aladdin. Это графическое ПО для настройки сканеров Datalogic. В нем выполним следующие действия:
| (вертикальная черта) или #.Теперь в 1С в процедуре ОбработкаВнешнегоСобытия мы получим строку вида 01046...21...|91...|92.... Нам остается лишь написать несложный парсер:
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Событие = "BarCodeValue" Тогда
Штрихкод = СокрЛП(Данные);
// Заменяем наш суррогатный разделитель обратно на стандартный,
// если это необходимо для дальнейших функций проверки
ЧистыйКод = СтрЗаменить(Штрихкод, "|", Симв(29));
// Далее следует логика поиска товара или проверки маркировки
РазборМаркировки(ЧистыйКод);
КонецЕсли;
КонецПроцедуры
Подведем итоги нашего исследования. Подключить современный сканер к 1С 7.7 для работы с DataMatrix вполне реально, если отказаться от клавиатурного режима в пользу эмуляции COM-порта. Это решает проблемы с раскладкой, спецсимволами и длиной штрихкода. Использование актуальных версий ScanOpos.dll или альтернативных библиотек обеспечит стабильность системы, а предварительная настройка сканера через Datalogic Aladdin позволит гибко управлять передаваемыми данными.
Помните, что работа с маркировкой в 1С 7.7 — это всегда сочетание правильной настройки «железа» и небольшой доработки программного кода для обработки длинных строк и спецсимволов.