Как в 1С узнать статус смены кассы АТОЛ (открыта или закрыта)?

Программист 1С v8.3 (Обычные формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

При автоматизации розничной торговли часто возникает задача удаленного мониторинга кассовых узлов: руководству или технической поддержке необходимо видеть, открыта ли смена на рабочем месте кассира и готова ли торговая точка к обслуживанию покупателей. Способ решения этой задачи зависит от архитектуры рабочего места — подключена ли касса напрямую к 1С или управляется сторонней фронт-офисной программой (например, Frontol).

Разберем подробно все технические варианты получения статуса смены фискального регистратора АТОЛ: от прямого взаимодействия с драйвером до интеграционных сценариев.

Вариант 1. Прямой опрос через драйвер АТОЛ (ДТО 10)

Если фискальный регистратор подключен непосредственно к 1С и взаимодействие происходит через официальную компоненту AddIn.Fptr10, мы можем напрямую запросить состояние смены из самого устройства. Для этого драйвер предоставляет специальный механизм запроса данных регистратора.

Рассмотрим по шагам программный алгоритм работы с объектом драйвера:

  1. Устанавливаем тип запрашиваемых данных с помощью параметра LIBFPTR_DT_SHIFT_STATE.
  2. Вызываем метод queryData() для считывания параметров из ККТ.
  3. Считываем числовое значение статуса методом 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 часов)");
КонецЕсли;

Драйвер возвращает следующие базовые числовые значения состояния смены:

  1. 0 (LIBFPTR_SS_CLOSED) — кассовая смена закрыта;
  2. 1 (LIBFPTR_SS_OPENED) — смена открыта и готова к проведению чеков;
  3. 2 (LIBFPTR_SS_EXPIRED) — смена превысила регламентный лимит в 24 часа (требуется закрытие).

Этим же вызовом при необходимости можно получить текущий номер смены (LIBFPTR_PARAM_SHIFT_NUMBER) и дату/время окончания смены (LIBFPTR_PARAM_DATE_TIME).

Вариант 2. Получение статуса через Библиотеку подключаемого оборудования (БПО)

Если конфигурация 1С типовая и использует стандартные подсистемы БПО, нет необходимости использовать низкоуровневые вызовы параметров драйвера. В стандарте взаимодействия 1С с фискальными регистраторами реализована специализированная функция ПолучитьТекущееСостояние (GetCurrentStatus).

При вызове этого метода драйвер возвращает структуру параметров состояния ККТ, среди которых присутствует поле СтатусСмены (SessionState):

  1. 1 — смена закрыта;
  2. 2 — смена открыта;
  3. 3 — смена истекла.

Проблема параллельного доступа к порту ККТ и пути решения

Проанализируем частую архитектурную проблему: если на кассовом компьютере запущен отдельный кассовый модуль (например, Frontol) или локальная сессия 1С, этот процесс монопольно захватывает физический или виртуальный COM-порт фискального регистратора. Любая попытка из другой программы или фонового сеанса вызвать методы драйвера приведет к ошибке недоступности порта устройства.

Существуют следующие технические пути решения этой коллизии:

  1. Использование Web-сервера ККТ АТОЛ: вместо прямого захвата COM-порта на кассовом терминале настраивается служба локального веб-сервера драйвера. В этом случае все внешние обращения отправляются по протоколу HTTP/JSON API. Веб-сервер организует очередь команд, исключая блокировку устройства для одного процесса.
  2. Использование транзакций выгрузки: если на кассе работает Frontol, факт открытия смены можно контролировать по файлам автоматического обмена данными. При открытии смены кассовая программа формирует транзакцию с номером 62, а при закрытии — с номером 61. Чтение этих транзакций позволяет фиксировать состояние кассы в учетной системе без прямого подключения к оборудованию.
  3. Использование файл-флага или событийных скриптов: во внешнем кассовом ПО на событие открытия и закрытия смены настраивается выполнение сценария, который создает или удаляет текстовый флаг на диске или в сетевой папке, доступной для учетной базы 1С.

Почему не следует открывать смену «нулевым чеком»?

Иногда на практике встречается идея инициализировать смену путем пробития пустого чека или чека на сумму 0 рублей. С точки зрения актуальных требований форматов фискальных данных (ФФД) такой подход является ошибочным. В фискальных накопителях для регистрации начала рабочего дня предусмотрен регламентный документ — «Отчет об открытии смены» (в коде драйвера — метод openShift, в БПО — операция ОткрытьСмену). Попытка пробития нулевых чеков приводит к ошибкам форматно-логического контроля и нецелевому расходу номеров фискальных документов.

← На главную