При использовании двух онлайн-ККМ Штрих-М на одном рабочем месте под управлением «1С:Комплексная автоматизация 1.1» или «1С:Управление торговлей 10.3» часто возникает проблема адресации команд. Например, при попытке снять X-отчет со второй кассы документ выводится на чековой ленте первого фискального регистратора. Если отключить в настройках торгового оборудования одну из касс, оставшаяся начинает работать корректно. Рассмотрим подробно, почему так происходит и какими способами можно устранить эту ошибку.
Проблема кроется в особенностях работы COM-компонента драйвера фискальных регистраторов Штрих-М устаревших версий (линейка 4.x). При инициализации двух объектов драйвера в рамках одной сессии 1С драйвер сохраняет настройки подключений и портов в глобальном контексте. В результате команды отправляются либо в последний инициализированный порт, либо в активный канал первого созданного устройства.
Также причиной может служить постоянно удерживаемый COM-порт, если обработка обслуживания 1С открывает порт при запуске сеанса и не освобождает его между операциями. В случае виртуальных портов (VCOM через USB) операционная система Windows при переподключении кабелей или перезагрузке может менять номера COM-портов местами.
Самым простым и правильным техническим решением является обновление драйвера фискального регистратора до актуальной версии. Начиная с версии драйвера ФР 4.13.1.605 (а также в версиях 4.14, 4.15 и 5.x), разработчики Штрих-М исправили ошибку изоляции контекста нескольких экземпляров драйвера.
DrvFR через панель управления Windows.Если обновление драйвера по каким-то причинам невозможно, проанализируем схему разделения интерфейсов. Ошибка путаницы портов возникает при одинаковом типе подключения (например, оба ФР подключены по USB с эмуляцией COM-порта).
Разберем по шагам организацию раздельного подключения:
При такой схеме драйвер четко разграничивает сетевые сокеты и локальные последовательные порты, что полностью исключает отправку команд на чужое устройство.
Если оба устройства должны работать через физические или виртуальные COM-порты, разберем доработку внешней обработки обслуживания (например, TradeWareEpf / ShtrihMkkt.epf).
В драйверах Штрих-М предусмотрена таблица логических устройств. Каждому физическому порту сопоставляется номер логического устройства (LD — Logical Device). Чтобы драйвер переключил фокус на нужный фискальный регистратор перед выполнением команды (пробитие чека, снятие X-отчета или Z-отчета), в коде необходимо явно задать свойство LDNumber и вызвать метод SetActiveLD().
Рассмотрим пример кода для вставки в процедуры обработки перед вызовом печати:
// Устанавливаем номер логического устройства, привязанный к текущей кассе
ОбъектДрайвера.LDNumber = НомерЛогическогоУстройства;
// Активируем выбранное логическое устройство в контексте драйвера
ОбъектДрайвера.SetActiveLD();
// Выполняем требуемую операцию (например, снятие X-отчета)
Результат = ОбъектДрайвера.PrintReportWithOutCleaning();
Для корректного определения параметра LDNumber разберем следующую последовательность действий:
ЛУ №1 с COM10 и ЛУ №2 с COM11).SetActiveLD(), после чего выполняем команду.Применение любого из описанных способов позволяет стабильно использовать несколько фискальных регистраторов Штрих-М в одном сеансе 1С без риска путаницы печатных форм и чеков.