Как очистить кэш сканера штрихкода и предотвратить повторный ввод старых данных при работе в 1С через RDP?

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

При работе со сканерами штрихкодов (ШК) в терминальных сессиях (RDP) специалисты часто сталкиваются с неприятным эффектом: если отсканировать несколько кодов «в пустоту» (когда окно 1С не активно или форма не открыта), то при последующем открытии формы обработки все эти коды «прилетают» в систему одновременно. Это создает хаос в учетных документах и требует ручной очистки данных. Рассмотрим подробно, почему это происходит и как с этим бороться.

Разберем причину возникновения проблемы: «Эффект очереди» в RDP

Проанализируем ситуацию, описанную в теме. Проблема возникает не в самой конфигурации 1С (будь то УТ 11, ERP или демо-БСП) и даже не в физической памяти сканера АТОЛ SB2108 Plus. Причина кроется в механизме проброса (редиректа) COM-портов через протокол RDP.

Когда сканер настроен в режиме USB-COM, операционная система видит его как последовательный порт. При работе через удаленный рабочий стол служба rdpdr.sys (RDP Device Redirector) создает виртуальный канал передачи данных. Если на стороне сервера приложение (1С) в данный момент не «слушает» порт (например, форма заказа закрыта), драйвер на стороне клиента все равно может принимать данные от физического устройства и накапливать их в системном буфере. Как только в 1С открывается форма и драйвер NativeApi инициализирует подключение к порту, накопленный стек данных моментально сбрасывается в сессию. 1С воспринимает это как серию очень быстрых последовательных событий ScanData.

Способ 1. Программная очистка очереди событий в 1С

Посмотрим на возможность программного управления драйвером. В старых версиях драйверов АТОЛ существовал специализированный метод для очистки накопленных сообщений. Рассмотрим пример обращения к такому методу:


// Пример использования старого метода для очистки буфера драйвера
Попытка
    ОбъектДрайвера.УдалитьСообщение();
Исключение
    // Метод может не поддерживаться в NativeApi драйверах
КонецПопытки;

Однако в современных конфигурациях, использующих БСП и 1С:Сканеры штрихкода (NativeApi), прямого метода очистки буфера через 1С часто не предусмотрено. Драйвер работает событийной моделью. Проанализируем процедуру ОбработкаВнешнегоСобытия в модуле приложения или формы:


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

Если проблема в буфере RDP, 1С просто получает эти события одно за другим, так как для нее они выглядят как реальный ввод пользователя в текущий момент времени.

Способ 2. Изменение режима работы сканера (HID вместо COM)

Выясним, почему режим клавиатуры (HID) часто является более стабильным. Как было замечено в обсуждении, в режиме «в разрыв клавиатуры» двоения и накопления данных обычно не происходит. Это связано с тем, что эмуляция нажатий клавиш обрабатывается системой иначе, чем поток данных через последовательный порт.

Для реализации этого способа выполним следующие шаги:

  1. Переведем сканер в режим USB-HID (используя управляющие штрихкоды из руководства АТОЛ).
  2. В настройках подключаемого оборудования 1С выберем тип устройства «Клавиатура».
  3. Настроим Префикс (например, символ F7 или редкое сочетание клавиш). Это необходимо, чтобы 1С могла перехватывать ввод сканера даже тогда, когда фокус не стоит в поле ввода, и вызывала внешнее событие, а не просто печатала цифры в активное поле.

Важный момент: В режиме HID данные передаются как нажатия клавиш «здесь и сейчас». Если окно 1С не активно, нажатия просто уйдут «в никуда» и не будут буферизоваться службой проброса портов так агрессивно, как в случае с COM-портом.

Способ 3. Настройка аппаратного буфера сканера

Рассмотрим аппаратные настройки самого устройства АТОЛ SB2108 Plus. У современных сканеров есть встроенные таблицы программирования. Проанализируем настройки, отвечающие за передачу данных:

Способ 4. Системные настройки и сторонние решения для RDP

Если специфика бизнеса требует работы именно через COM-порт, и стандартный проброс портов Windows (RDPDR) работает некорректно, проанализируем альтернативные варианты:

  1. Использование стороннего ПО для маппинга портов: Программы типа USB-over-Network или специализированные мапперы COM-портов создают виртуальный туннель поверх TCP/IP. Они работают в обход стандартного буфера RDP и обеспечивают более «прозрачную» передачу данных.
  2. Правка реестра на локальном ПК: Инженеры иногда рекомендуют ограничивать размер буфера последовательного порта в ветке реестра, отвечающей за RDPDR, однако это решение требует глубоких знаний системного администрирования и может повлиять на стабильность других устройств.

Резюме и рекомендации

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

Во-первых, проверьте версию прошивки сканера АТОЛ. Для ревизий Rev. 2 существуют обновления, оптимизирующие работу с буфером данных.

Во-вторых, если это возможно, переведите работу сканера в режим HID (клавиатура) с использованием префикса. Это самый простой и надежный способ избежать «кэширования» штрихкодов в RDP-канале.

В-третьих, если необходим именно COM-режим, рассмотрите возможность использования альтернативных средств проброса портов, которые гарантируют очистку канала при разрыве или неактивности соединения.

Соблюдение этих рекомендаций позволит исключить «фантомные» сканирования и обеспечит корректную работу сотрудников склада или магазина в терминальной среде 1С.

← На главную