При работе с торговым оборудованием в решениях на платформе 1С:Предприятие 8.3 (в частности, в конфигурации 1С:Управление торговлей 11) технические специалисты часто сталкиваются со следующей проблемой: часть сканеров штрихкода функционирует абсолютно корректно, в то время как другие устройства при сканировании в списке документов вызывают «очистку» экрана, делая список пустым. При этом в обычный текстовый редактор (например, Блокнот) сканеры передают штрихкоды без каких-либо ошибок.
В этой статье мы подробно разберем природу этого сбоя, проанализируем разницу в режимах работы торгового оборудования, рассмотрим специфику настройки подключения в терминальной среде (через RDP) и приведем пошаговый алгоритм решения проблемы.
Для того чтобы понять, почему 1С реагирует на сканирование очисткой списка, давайте проанализируем поведение управляемой формы. В 1С:УТ 11 по умолчанию реализован механизм быстрого поиска по строке в динамических списках. Когда пользователь находится в списке документов (например, заказов клиентов) и начинает вводить символы на клавиатуре, система автоматически активирует полнотекстовый поиск или отбор по текущей активной колонке.
Если сканер штрихкода настроен некорректно и передает данные в режиме клавиатурного ввода (USB-HID / USB Keyboard), операционная система Windows и платформа 1С воспринимают это устройство как обычную клавиатуру, которая с огромной скоростью печатает цифры штрихкода. Происходит следующее:
4601234567890).4601234567890 в базе данных нет, 1С накладывает отбор, результатом которого становится абсолютно пустой список.Если бы сканер был настроен правильно (в режиме эмуляции COM-порта), он сгенерировал бы специализированное Внешнее событие (External Event), которое перехватывается драйвером торгового оборудования 1С в обход клавиатурного ввода. В этом случае система отработала бы алгоритм поиска документа по штрихкоду и открыла бы нужную форму, не затрагивая визуальные отборы списка.
Часто системные администраторы утверждают, что если сканер успешно передает данные в Блокнот, то устройство полностью исправно, а проблема кроется на стороне 1С. Разберем этот миф.
Физический сканер, переведенный в режим эмуляции COM-порта (Virtual COM Port), принципиально не может писать данные в Блокнот.
Это связано с тем, что данные из последовательного COM-порта поступают в систему в виде байтового потока, предназначенного для специализированного ПО (драйвера), а не в буфер ввода клавиатуры. Если при сканировании данные отображаются в Блокноте, это означает одно из двух:
Когда несколько пользователей работают на одном терминальном сервере (RDP), возникает важнейший нюанс, связанный со справочником Рабочие места в 1С. Подключаемое оборудование в современных конфигурациях привязывается к уникальному идентификатору рабочего места.
Идентификатор рабочего места по умолчанию формируется на основе связки:
ИмяКомпьютераКлиента + ИмяПользователяWindows
Если администраторы не настроили уникальные имена сессий или клиенты подключаются под учетными записями, которые 1С распознает как одинаковое рабочее место, возникает конфликт портов:
COM3.COM3 для Пользователя Б.Рассмотрим подробнее по шагам, как правильно настроить совместную работу группы сканеров штрихкода в среде RDP под управлением 1С:УТ 11.
Прежде всего необходимо перепрограммировать проблемные физические сканеры штрихкода. Для этого обратитесь к руководству пользователя вашего сканера (обычно идет в комплекте или доступно на сайте производителя). Вам необходимо последовательно сосканировать специальные настроечные штрихкоды:
Reset to Factory Defaults).USB Serial Emulation или USB Virtual COM).После этого операционная система Windows должна обнаружить новое устройство и запросить драйвер (для Windows 10/11 драйвер виртуального COM-порта обычно устанавливается автоматически). В диспетчере устройств в разделе «Порты (COM и LPT)» должен появиться виртуальный последовательный порт (например, COM5).
Для того чтобы сервер терминалов увидел физический порт локального компьютера, необходимо настроить проброс портов в параметрах подключения RDP:
mstsc.exe).Теперь при подключении к серверу локальный порт COM5 будет доступен в терминальной сессии.
Проанализируем справочник рабочих мест в базе данных 1С. Перейдите в раздел НСИ и администрирование -> Администрирование -> РМ и оборудование -> Рабочие места. Убедитесь, что для каждого терминального сеанса создано отдельное рабочее место. Если имена компьютеров совпадают, настройте генерацию уникальных рабочих мест по шаблону, включив в них имя пользователя или идентификатор сессии RDP.
После разделения рабочих мест необходимо заново подключить сканеры для каждого пользователя:
1С:Сканеры штрихкода (COM)).COM5).CR с кодом 13). Проверьте, чтобы в настройках драйвера 1С в поле «Суффикс» было указано значение 13 (CR) или 10 (LF) в зависимости от настроек вашей модели.Для понимания того, как платформа обрабатывает сканирование на программном уровне, посмотрим на пример реализации перехвата внешнего события в модуле формы 1С. Это поможет разработчикам понять логику работы драйвера при отладке системы.
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// Проанализируем источник события. Драйвер 1С идентифицирует сканер.
Если Источник = "BarCodeScanner" Или Событие = "ВнешнееСобытие" Тогда
// Отключаем обработку стандартных событий, чтобы избежать дублирования
ПолученныеДанные = СокрЛП(Данные);
// Очищаем спецсимволы, если они передались вместе со штрихкодом
Штрихкод = ОчиститьШтрихкодОтСлужебныхСимволов(ПолученныеДанные);
// Вызываем серверную функцию поиска документа по штрихкоду
СсылкаНаДокумент = НайтиДокументПоШтрихкодуНаСервере(Штрихкод);
Если ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
// Открываем форму найденного документа
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы);
Иначе
ВызватьИсключениеПредупреждение("Документ со штрихкодом " + Штрихкод + " не найден в системе.");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция НайтиДокументПоШтрихкодуНаСервере(Знач Штрихкод)
// Выполняем запрос к регистру сведений или табличной части документов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.ШтрихкодДанные = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Ссылка;
КонецЕсли;
Возврат Документы.РеализацияТоваровУслуг.ПустаяСсылка();
КонецФункции
Как мы видим из листинга кода, при генерации корректного внешнего события платформа 1С отрабатывает строго по алгоритму, обращаясь к базе данных и открывая форму документа, не вызывая при этом нежелательных фильтраций списков и отборов на клиенте.
Если после выполнения всех настроек сканеры все равно периодически дают сбои, рекомендуем обратить внимание на следующие технические факторы:
Таким образом, «магическое» исправление неполадки всегда имеет четкое техническое объяснение: перевод оборудования из режима клавиатуры в режим эмуляции COM-порта, индивидуальное закрепление рабочих мест пользователей в базе 1С и корректная маршрутизация портов в настройках терминального сервера.