При автоматизации розничной торговли часто возникает задача удаленного мониторинга кассовых узлов: руководству или технической поддержке необходимо видеть, открыта ли смена на рабочем месте кассира и готова ли торговая точка к обслуживанию покупателей. Способ решения этой задачи зависит от архитектуры рабочего места — подключена ли касса напрямую к 1С или управляется сторонней фронт-офисной программой (например, Frontol).
Разберем подробно все технические варианты получения статуса смены фискального регистратора АТОЛ: от прямого взаимодействия с драйвером до интеграционных сценариев.
Если фискальный регистратор подключен непосредственно к 1С и взаимодействие происходит через официальную компоненту AddIn.Fptr10, мы можем напрямую запросить состояние смены из самого устройства. Для этого драйвер предоставляет специальный механизм запроса данных регистратора.
Рассмотрим по шагам программный алгоритм работы с объектом драйвера:
LIBFPTR_DT_SHIFT_STATE.queryData() для считывания параметров из ККТ.getParamInt() по параметру LIBFPTR_PARAM_SHIFT_STATE.Посмотрим на пример реализации данного запроса на встроенном языке 1С:
// Предполагается, что объект ДрайверККТ уже инициализирован и соединение открыто
ДрайверККТ.setParam(ДрайверККТ.LIBFPTR_PARAM_DATA_TYPE, ДрайверККТ.LIBFPTR_DT_SHIFT_STATE);
ДрайверККТ.queryData();
КодСтатуса = ДрайверККТ.getParamInt(ДрайверККТ.LIBFPTR_PARAM_SHIFT_STATE);
Если КодСтатуса = ДрайверККТ.LIBFPTR_SS_CLOSED Тогда
Сообщить("Смена закрыта");
ИначеЕсли КодСтатуса = ДрайверККТ.LIBFPTR_SS_OPENED Тогда
Сообщить("Смена открыта");
ИначеЕсли КодСтатуса = ДрайверККТ.LIBFPTR_SS_EXPIRED Тогда
Сообщить("Смена истекла (более 24 часов)");
КонецЕсли;
Драйвер возвращает следующие базовые числовые значения состояния смены:
Этим же вызовом при необходимости можно получить текущий номер смены (LIBFPTR_PARAM_SHIFT_NUMBER) и дату/время окончания смены (LIBFPTR_PARAM_DATE_TIME).
Если конфигурация 1С типовая и использует стандартные подсистемы БПО, нет необходимости использовать низкоуровневые вызовы параметров драйвера. В стандарте взаимодействия 1С с фискальными регистраторами реализована специализированная функция ПолучитьТекущееСостояние (GetCurrentStatus).
При вызове этого метода драйвер возвращает структуру параметров состояния ККТ, среди которых присутствует поле СтатусСмены (SessionState):
Проанализируем частую архитектурную проблему: если на кассовом компьютере запущен отдельный кассовый модуль (например, Frontol) или локальная сессия 1С, этот процесс монопольно захватывает физический или виртуальный COM-порт фискального регистратора. Любая попытка из другой программы или фонового сеанса вызвать методы драйвера приведет к ошибке недоступности порта устройства.
Существуют следующие технические пути решения этой коллизии:
Иногда на практике встречается идея инициализировать смену путем пробития пустого чека или чека на сумму 0 рублей. С точки зрения актуальных требований форматов фискальных данных (ФФД) такой подход является ошибочным. В фискальных накопителях для регистрации начала рабочего дня предусмотрен регламентный документ — «Отчет об открытии смены» (в коде драйвера — метод openShift, в БПО — операция ОткрытьСмену). Попытка пробития нулевых чеков приводит к ошибкам форматно-логического контроля и нецелевому расходу номеров фискальных документов.