При работе в розничной торговле или на складе часто возникает необходимость физически отключать сканеры штрихкодов от компьютера (например, чтобы перенести устройство на другое рабочее место или освободить USB-порт). Однако в решениях на платформе 1С:Предприятие это часто оборачивается проблемой. При каждом запуске программы или открытии рабочего места кассира система пытается инициализировать устройство. Если сканер отключен, на экране появляется назойливое предупреждение: "При подключении оборудования произошла ошибка: Не удалось подключить устройство... Не удалось занять устройство. Проверьте настройки порта. (999)".
Стандартный совет технической поддержки — зайти в настройки подключаемого оборудования и снять галочку использования — крайне неудобен на практике. В таком случае при каждом обратном подключении сканера пользователю придется заново заходить в настройки, активировать устройство и перезапускать программу. В этой статье мы подробно рассмотрим, как решить эту проблему раз и навсегда двумя профессиональными методами: программным подавлением ошибки через механизм расширений и переводом сканера в альтернативный режим работы.
Проанализируем ситуацию и разберем по шагам оба варианта.
Один из участников обсуждения на форуме предложил найти место вызова ошибки в конфигураторе и закомментировать его. Это рабочее решение, но прямое изменение типовой конфигурации имеет огромный минус: при первом же обновлении базы ваши изменения будут затерты, либо вам придется снять конфигурацию с поддержки.
Чтобы избежать проблем с обновлениями, мы применим современный и безопасный механизм — Расширения конфигурации. Современная Библиотека подключаемого оборудования (БПО) выполняет асинхронное подключение устройств. Ошибка с кодом 999 выводится в стандартных процедурах завершения подключения.
Рассмотрим подробнее, как перехватить и "молча" подавить это уведомление в кодовой базе 1С:
ПодавлениеОшибокОборудования), снимите для него галочки "Безопасный режим" и "Защита от опасных действий" в свойствах.МенеджерОборудованияКлиент.ПодключитьОборудованиеЗавершениеПоУмолчанию, которая отвечает за обработку результатов подключения. Мы используем аннотацию &Вместо, чтобы переопределить стандартное поведение системы.Напишем программный код, который будет проверять текст возникшей ошибки. Если в описании ошибки содержатся указания на сканер штрихкода или код ошибки 999, система просто проигнорирует её и продолжит работу без вывода модального окна на экран. В противном случае (если сломался фискальный регистратор или эквайринг) ошибка будет выведена штатно.
Пример реализации кода в расширении:
&НаКлиенте
&Вместо("ПодключитьОборудованиеЗавершениеПоУмолчанию")
Процедура ИмяРасш_ПодключитьОборудованиеЗавершениеПоУмолчанию(РезультатВыполнения, Параметры)
// Проверяем наличие ошибки в результате выполнения операции
Если РезультатВыполнения.Свойство("ОписаниеОшибки") И ЗначениеЗаполнено(РезультатВыполнения.ОписаниеОшибки) Тогда
ТекстОшибки = ВРег(РезультатВыполнения.ОписаниеОшибки);
// Анализируем ключевые слова, чтобы подавить ошибку только для сканера
Если Найти(ТекстОшибки, "СКАНЕР") <> 0
Или Найти(ТекстОшибки, "999") <> 0
Или Найти(ТекстОшибки, "НЕ УДАЛОСЬ ЗАНЯТЬ УСТРОЙСТВО") <> 0 Тогда
// Записываем информацию в технологический журнал базы для администратора
ЗаписьЖурналаРегистрации("ПодключениеОборудования",
УровеньЖурналаРегистрации.Предупреждение,
,
,
"Подавлена ошибка подключения сканера: " + РезультатВыполнения.ОписаниеОшибки);
// Выходим из процедуры "тихо", не показывая предупреждение пользователю
Возврат;
КонецЕсли;
КонецЕсли;
// Для всех остальных штатных ситуаций и других видов оборудования вызываем стандартный обработчик
ПродолжитьВызов(РезультатВыполнения, Параметры);
КонецПроцедуры
Используя этот метод, вы избавляете кассиров и операторов от необходимости постоянно закрывать лишние диалоговые окна, сохраняя при этом конфигурацию на полной поддержке.
Выясним причину возникновения ошибки 999. Она появляется из-за того, что ваш сканер штрихкодов настроен на работу в режиме эмуляции COM-порта (Virtual COM). При таком подходе драйвер 1С при каждом запуске обращается к конкретному порту операционной системы (например, COM3). Если устройство вытащили из разъема, порт исчезает, драйвер не может его занять и генерирует системный сбой.
Если вы не хотите вносить изменения в программный код 1С, вы можете перенастроить сам сканер штрихкодов. Перевод устройства в режим эмуляции клавиатуры (USB-Keyboard) полностью решает проблему.
Разберем этот процесс по шагам:
Клавиатурный ввод).F7 на клавиатуре), настройте суффикс. В параметрах оборудования в 1С укажите суффикс 13 (символ перевода каретки Carriage Return / Enter). На самом сканере также должен быть запрограммирован суффикс "Enter" (обычно он активен по умолчанию после сброса на заводские настройки).Результат работы: При клавиатурном режиме работы драйвер 1С не опрашивает порты компьютера при старте системы. Если физически вытащить сканер из разъема USB, программа не заметит его отсутствия и продолжит работать без ошибок. При обратном подключении сканер мгновенно готов к работе без перезапуска сеанса 1С.
Иногда ошибка 999: Не удалось занять устройство возникает даже тогда, когда сканер физически подключен к компьютеру и кабель исправен. Рассмотрим две скрытые технические проблемы, о которых важно помнить администратору:
1cv8.exe может остаться в памяти операционной системы. Этот процесс продолжает удерживать виртуальный COM-порт сканера. При попытке запустить новый сеанс 1С новая копия программы попытается обратиться к порту и выдаст ошибку 999. Для решения этой проблемы откройте Диспетчер задач Windows и принудительно снимите все задачи 1С:Предприятие, либо просто перезагрузите компьютер.COM3, а сегодня заняло порт COM5). При этом в настройках оборудования 1С жестко прописан старый порт COM3. Чтобы предотвратить такие сбои, рекомендуется один раз зайти в Диспетчер устройств Windows, открыть свойства виртуального COM-порта вашего сканера и в дополнительных параметрах жестко закрепить за ним постоянный свободный номер (например, COM9), после чего указать этот же порт в настройках 1С.Используя предложенные методики, вы сможете полностью избавить пользователей от раздражающих системных уведомлений и сделать работу с торговым оборудованием в 1С максимально комфортной и бесперебойной.