При работе в рабочем месте кассира (РМК) конфигурации 1С:Розница 2.2 периодически возникает неприятная ситуация: если на кассе некоторое время не было продаж, при попытке пробить чек система выдает ошибку «Не удалось подключить устройство». При этом повторное нажатие на кнопку оплаты («Наличные» или «Платежная карта») приводит к успешному пробитию чека. Рассмотрим подробнее причины возникновения этой проблемы и разберем все способы ее устранения.
Основная причина такого поведения заключается в том, что при длительном простое операционная система Windows или сам контроллер USB переводит эмулируемый COM-порт кассового аппарата в режим энергосбережения. При первом обращении 1С к кассе виртуальный порт не успевает инициализироваться за отведенный таймаут ожидания, из-за чего драйвер возвращает ошибку. Повторный запрос отправляется, когда порт уже проснулся, и операция завершается успешно.
Проанализируем основные методы решения этой проблемы — от настройки операционной системы до доработки программного кода 1С.
Даже если в параметрах электропитания Windows выбран режим «Максимальная производительность», операционная система может продолжать отключать отдельные USB-устройства и контроллеры. Настроим параметры вручную:
Часто сбой вызван некорректной связью между виртуальным COM-портом и службой драйвера торгового оборудования. Простая переустановка одной и той же версии драйвера с полным удалением устройства помогает стабилизировать работу:
Если виртуальному порту требуется время на просыпание, увеличим интервал ожидания ответа от ККТ непосредственно в настройках 1С:
1000 или 2000 миллисекунд).4000–5000 мс. Это даст контроллеру достаточно времени на инициализацию при первом обращении.Наиболее надежным решением на стороне 1С является принудительная проверка и восстановление связи с фискальным регистратором перед выполнением команды печати. Если устройство перешло в режим ожидания, программный вызов метода проверки подключения разбудит его до начала пробития чека.
Посмотрим на пример логики, которую можно реализовать в модуле работы с подключаемым оборудованием:
РезультатПодключения = МенеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(
УникальныйИдентификатор,
Перечисления.ТипыПодключаемогоОборудования.ККТ
);
Если НЕ РезультатПодключения Тогда
// Повторная попытка инициализации драйвера
МенеджерОборудованияКлиент.ОтключитьОборудованиеПоТипу(
УникальныйИдентификатор,
Перечисления.ТипыПодключаемогоОборудования.ККТ
);
РезультатПодключения = МенеджерОборудованияКлиент.ПодключитьОборудованиеПоТипу(
УникальныйИдентификатор,
Перечисления.ТипыПодключаемогоОборудования.ККТ
);
КонецЕсли;
Добавление такой проверки перед вызовом процедуры печати чека позволяет полностью исключить появление ошибки у кассира.
Для предотвращения «отвала» USB-устройств рекомендуется обратить внимание на следующие физические параметры:
xHCI, который более агрессивно управляет энергосбережением и может «терять» эмуляторы COM-портов.NativeAPI, который умеет переподключаться к кассе «на лету» без выдачи ошибки пользователю.