Как передать штрихкод со сканера в режиме эмуляции COM-порта на слабом ПК

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

В практике системного администрирования и автоматизации на базе 1С часто возникают ситуации, когда стандартные методы подключения торгового оборудования не подходят из-за ограничений «железа» или специфики работы персонала. Рассмотрим ситуацию, когда на удаленной точке установлен слабый терминал (например, Atol с 2 ГБ оперативной памяти под управлением Windows Embedded), а сканер штрихкодов жестко настроен на работу в режиме эмуляции COM-порта (RS232). Проблема заключается в том, что данные из COM-порта не попадают в текстовые редакторы или формы ввода напрямую, а персонал не обладает квалификацией для переключения режимов работы устройства.

В рамках данной статьи мы проанализируем, как решить задачу сбора штрихкодов для последующей передачи в бухгалтерию (например, для нужд ЕГАИС), минимизируя нагрузку на систему и исключив ошибки пользователей.

Метод 1. Программная имитация ввода через внешнее событие 1С

Если на терминале все же есть возможность запустить тонкий или толстый клиент 1С, но сканер не настроен в самой конфигурации, мы можем реализовать механизм ручного или полуавтоматического ввода, который будет имитировать работу торгового оборудования. Проанализируем пример кода, который позволяет передать считанный или введенный штрихкод в логику программы так, будто он пришел от драйвера сканера.

Рассмотрим следующий алгоритм: на форме создается кнопка, которая вызывает диалог ввода строки, а затем генерирует внешнее событие. Это полезно, когда нужно «пробросить» данные в существующие процедуры обработки ШК без перенастройки оборудования.


&НаКлиенте
Процедура КомандаВводШК(Команда)
    Перем лкШК;
    лкШК = "";
    // Вызываем стандартное окно ввода строки для получения штрихкода
    Если ВвестиСтроку(лкШК, "Введите или отсканируйте штрихкод", 20) Тогда
        // Вызываем событие формы, имитируя работу сканера штрихкода
        ВнешнееСобытие("СканерШтрихкода", "ПолученШтрихкод", лкШК);
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    // Проверяем, доступна ли форма для ввода данных в текущий момент
    Если НЕ ВводДоступен() Тогда
        Возврат;
    КонецЕсли;

    // Стандартная проверка типа события
    Если Событие = "ПолученШтрихкод" ИЛИ Событие = "Штрихкод" Тогда
        // Здесь размещается логика обработки: поиск в справочнике, добавление в корзину и т.д.
        Сообщить("Считан штрихкод: " + Данные);
        // ОбработкаШтрихкода(Данные); 
    КонецЕсли;
КонецПроцедуры

Данный метод позволяет обойти проблему «невидимости» COM-сканера для интерфейса, если мы временно переводим фокус на поле ввода. Однако, если конфигурация 1С вообще не запущена на точке, нам потребуются другие инструменты.

Метод 2. Использование легковесных утилит класса Keyboard Wedge

Когда ресурсов системы катастрофически мало (как в случае с 2 ГБ ОЗУ), использование тяжелых драйверов или полноценной 1С для простой фиксации прихода алкоголя нецелесообразно. Выясним, как заставить сканер в режиме COM-порта «писать» в обычный блокнот или текстовый файл. Для этого используются программы-посредники, называемые Keyboard Wedge.

Рассмотрим популярные решения:

  1. COM2KBD / RS232 Typer: Это крошечные утилиты, которые работают в фоновом режиме. Они перехватывают поток данных из последовательного порта (COM) и преобразуют его в последовательность нажатий клавиш клавиатуры. Для операционной системы это выглядит так, будто пользователь сам набрал цифры штрихкода на клавиатуре.
  2. Драйверы от производителей (Zebra, Honeywell, Datalogic): Почти у каждого крупного вендора есть официальная бесплатная утилита (например, Honeywell Serial Assist), позволяющая дублировать данные из COM-порта в клавиатурный буфер.

Преимущества этого подхода:

Метод 3. Автоматизация сбора данных через PowerShell

Проанализируем ситуацию, когда мы не хотим устанавливать стороннее ПО. В операционных системах Windows, начиная с седьмой версии, доступен мощный инструмент PowerShell. Мы можем написать скрипт, который будет слушать COM-порт и автоматически записывать все данные в текстовый файл с указанием даты и времени. Это полностью исключит человеческий фактор.

Разберем пример простого скрипта для сбора данных:


$port = New-Object System.IO.Ports.SerialPort COM1, 9600, None, 8, one
$port.Open()
try {
    while ($true) {
        if ($port.BytesToRead -gt 0) {
            $data = $port.ReadLine()
            $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
            "$timestamp - $data" | Out-File -FilePath "C:\Barcodes\log.txt" -Append
        }
        Start-Sleep -Milliseconds 100
    }
}
finally {
    $port.Close()
}

Этот скрипт можно добавить в автозагрузку. Он будет работать «невидимо» для кассира, собирая все считанные марки в файл log.txt. В конце смены этот файл можно отправить в головной офис через любую доступную систему обмена данными (Dropbox, почта, мессенджер).

Почему возникла необходимость сканирования (Контекст ЕГАИС)

Важно понимать причину, по которой бухгалтерия требует выполнения этих действий. С развитием систем прослеживаемости (ЕГАИС 3.0 и выше) в РФ введен поштучный учет. Теперь при приемке алкоголя в «Общепит» недостаточно просто подтвердить накладную. Бухгалтеру необходимо сопоставить конкретные акцизные марки (DataMatrix коды), указанные в электронном документе поставщика, с теми, что фактически пришли на точку. Если на точке нет полноценной учетной системы, «слепое» сканирование в текстовый файл — единственный способ передать реальные идентификаторы товара для проверки в головном офисе.

Рекомендации по выбору решения

Выясним, какой путь лучше выбрать системному администратору в зависимости от условий:

Таким образом, даже при наличии «древнего» оборудования и специфических настроек сканера, задача передачи штрихкодов решается программными средствами без необходимости физического вмешательства в настройки устройства или покупки новых комплектующих.

← На главную