Почему часть сканеров штрихкода в 1С:Управление торговлей 11 работает некорректно, а при сканировании очищается список документов?

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

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

В этой статье мы подробно разберем природу этого сбоя, проанализируем разницу в режимах работы торгового оборудования, рассмотрим специфику настройки подключения в терминальной среде (через RDP) и приведем пошаговый алгоритм решения проблемы.

Выясняем причину: почему при сканировании очищается список документов?

Для того чтобы понять, почему 1С реагирует на сканирование очисткой списка, давайте проанализируем поведение управляемой формы. В 1С:УТ 11 по умолчанию реализован механизм быстрого поиска по строке в динамических списках. Когда пользователь находится в списке документов (например, заказов клиентов) и начинает вводить символы на клавиатуре, система автоматически активирует полнотекстовый поиск или отбор по текущей активной колонке.

Если сканер штрихкода настроен некорректно и передает данные в режиме клавиатурного ввода (USB-HID / USB Keyboard), операционная система Windows и платформа 1С воспринимают это устройство как обычную клавиатуру, которая с огромной скоростью печатает цифры штрихкода. Происходит следующее:

  1. Пользователь сканирует штрихкод товара или накладной.
  2. Сканер эмулирует последовательное нажатие клавиш (например, 4601234567890).
  3. Платформа 1С перехватывает этот ввод и пытается применить его как быстрый фильтр по текущей колонке списка (например, по колонке «Номер» или «Дата»).
  4. Поскольку документов с номером 4601234567890 в базе данных нет, 1С накладывает отбор, результатом которого становится абсолютно пустой список.

Если бы сканер был настроен правильно (в режиме эмуляции COM-порта), он сгенерировал бы специализированное Внешнее событие (External Event), которое перехватывается драйвером торгового оборудования 1С в обход клавиатурного ввода. В этом случае система отработала бы алгоритм поиска документа по штрихкоду и открыла бы нужную форму, не затрагивая визуальные отборы списка.

Парадокс работы в Блокноте при эмуляции COM-порта

Часто системные администраторы утверждают, что если сканер успешно передает данные в Блокнот, то устройство полностью исправно, а проблема кроется на стороне 1С. Разберем этот миф.

Физический сканер, переведенный в режим эмуляции COM-порта (Virtual COM Port), принципиально не может писать данные в Блокнот.

Это связано с тем, что данные из последовательного COM-порта поступают в систему в виде байтового потока, предназначенного для специализированного ПО (драйвера), а не в буфер ввода клавиатуры. Если при сканировании данные отображаются в Блокноте, это означает одно из двух:

  1. Сканер фактически работает в режиме клавиатуры (USB-HID), и его перепрограммирование в режим COM-порта не было выполнено или сбросилось.
  2. В системе запущена промежуточная программа-перенаправитель (так называемый Keyboard Wedge), которая перехватывает данные с COM-порта и эмулирует нажатия клавиш, что в терминальном режиме крайне нерекомендуется делать из-за возможных задержек и конфликтов.

Конфликт рабочих мест в терминальной среде (RDP)

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

Идентификатор рабочего места по умолчанию формируется на основе связки:

ИмяКомпьютераКлиента + ИмяПользователяWindows

Если администраторы не настроили уникальные имена сессий или клиенты подключаются под учетными записями, которые 1С распознает как одинаковое рабочее место, возникает конфликт портов:

Пошаговое руководство по исправлению неполадки

Рассмотрим подробнее по шагам, как правильно настроить совместную работу группы сканеров штрихкода в среде RDP под управлением 1С:УТ 11.

Шаг 1. Перевод сканеров в режим эмуляции COM-порта

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

  1. Штрихкод сброса к заводским настройкам (Reset to Factory Defaults).
  2. Штрихкод перевода интерфейса в режим виртуального COM-порта (USB Serial Emulation или USB Virtual COM).

После этого операционная система Windows должна обнаружить новое устройство и запросить драйвер (для Windows 10/11 драйвер виртуального COM-порта обычно устанавливается автоматически). В диспетчере устройств в разделе «Порты (COM и LPT)» должен появиться виртуальный последовательный порт (например, COM5).

Шаг 2. Проброс портов в настройках RDP-клиента

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

  1. Откройте окно подключения к удаленному рабочему столу (mstsc.exe).
  2. Нажмите кнопку Показать параметры.
  3. Перейдите на вкладку Локальные ресурсы.
  4. В разделе «Локальные устройства и ресурсы» нажмите кнопку Подробнее....
  5. Установите флажок напротив пункта Порты и нажмите OK.

Теперь при подключении к серверу локальный порт COM5 будет доступен в терминальной сессии.

Шаг 3. Разделение рабочих мест в 1С

Проанализируем справочник рабочих мест в базе данных 1С. Перейдите в раздел НСИ и администрирование -> Администрирование -> РМ и оборудование -> Рабочие места. Убедитесь, что для каждого терминального сеанса создано отдельное рабочее место. Если имена компьютеров совпадают, настройте генерацию уникальных рабочих мест по шаблону, включив в них имя пользователя или идентификатор сессии RDP.

Шаг 4. Настройка подключения оборудования в 1С

После разделения рабочих мест необходимо заново подключить сканеры для каждого пользователя:

  1. Зайдите в 1С под учетной записью конкретного пользователя.
  2. Перейдите в настройки подключаемого оборудования (НСИ и администрирование -> Подключаемое оборудование).
  3. Создайте новое устройство с типом Сканеры штрихкода и выберите драйвер (например, стандартный драйвер 1С:Сканеры штрихкода (COM)).
  4. В форме настройки драйвера выберите соответствующий порт (проброшенный порт из терминальной сессии, например, COM5).
  5. Важно: убедитесь, что параметры суффикса настроены верно. В подавляющем большинстве случаев сканеры по умолчанию присылают в конце штрихкода символ возврата каретки (суффикс CR с кодом 13). Проверьте, чтобы в настройках драйвера 1С в поле «Суффикс» было указано значение 13 (CR) или 10 (LF) в зависимости от настроек вашей модели.
  6. Нажмите кнопку Тест устройства и выполните тестовое сканирование. В окне теста вы должны увидеть полученный штрихкод и корректно определенный суффикс без ошибок перехвата.

Анализ кода перехвата внешнего события

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


&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    
    // Проанализируем источник события. Драйвер 1С идентифицирует сканер.
    Если Источник = "BarCodeScanner" Или Событие = "ВнешнееСобытие" Тогда
        
        // Отключаем обработку стандартных событий, чтобы избежать дублирования
        ПолученныеДанные = СокрЛП(Данные);
        
        // Очищаем спецсимволы, если они передались вместе со штрихкодом
        Штрихкод = ОчиститьШтрихкодОтСлужебныхСимволов(ПолученныеДанные);
        
        // Вызываем серверную функцию поиска документа по штрихкоду
        СсылкаНаДокумент = НайтиДокументПоШтрихкодуНаСервере(Штрихкод);
        
        Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
            // Открываем форму найденного документа
            ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
            ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
        Иначе
            ВызватьИсключениеПредупреждение("Документ со штрихкодом " + Штрихкод + " не найден в системе.");
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция НайтиДокументПоШтрихкодуНаСервере(Знач Штрихкод)
    
    // Выполняем запрос к регистру сведений или табличной части документов
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |	РеализацияТоваровУслуг.Ссылка КАК Ссылка
        |ИЗ
        |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |ГДЕ
        |	РеализацияТоваровУслуг.ШтрихкодДанные = &Штрихкод";
        
    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Ссылка;
    КонецЕсли;
    
    Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
    
КонецФункции

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

Дополнительные рекомендации по диагностике в RDP

Если после выполнения всех настроек сканеры все равно периодически дают сбои, рекомендуем обратить внимание на следующие технические факторы:

Таким образом, «магическое» исправление неполадки всегда имеет четкое техническое объяснение: перевод оборудования из режима клавиатуры в режим эмуляции COM-порта, индивидуальное закрепление рабочих мест пользователей в базе 1С и корректная маршрутизация портов в настройках терминального сервера.

← На главную