При интеграции кассовых аппаратов АТОЛ с конфигурациями 1С по стандарту 54-ФЗ разработчики часто сталкиваются с ситуацией, когда номер документа, возвращаемый драйвером после пробития чека, существенно отличается от номера, напечатанного на бумажном чеке. Например, функция драйвера возвращает значение 110, которое записывается в реквизит НомерЧекаККМ, а на бумажной ленте покупатель видит номер 4. Разберем по шагам, почему так происходит, какие счетчики существуют в ККТ и как правильно получать нужные данные.
В соответствии с форматами фискальных данных (ФФД) контрольно-кассовая техника ведет несколько независимых счетчиков операций. Путаница возникает из-за смешивания следующих понятий:
Таким образом, значение 110 — это сквозной номер фискального документа (ФД), зарегистрированного в ФН с момента его активации, а значение 4 — это номер чека в рамках текущей открытой смены.
Проанализируем поведение типовых методов интеграционной компоненты ATOL_KKM_1C82_54FZ или универсального драйвера БПО:
Метод ПолучитьТекущееСостояние не предназначен для вычисления номера следующего чека. В структуре параметров состояния возвращаются сведения о буфере неотправленных в ОФД документов:
BacklogDocumentsCounter — количество непереданных документов;BacklogDocumentFirstNumber — номер первого непереданного документа в очереди;BacklogDocumentFirstDateTime — дата и время первого непереданного документа.Метод СформироватьЧек по стандарту подключаемого оборудования 1С возвращает фискальные реквизиты, ключевым из которых является именно номер фискального документа (ФД), а также номер смены и фискальный признак (ФПД). Локальный номер за смену через типовой интерфейс БПО обычно не передается, так как он не является главным идентификатором по требованиям 54-ФЗ.
В зависимости от поставленной задачи выберем подходящий способ синхронизации данных.
По правилам 54-ФЗ для однозначной идентификации чека (например, при проверке на сайте ОФД или в мобильном приложении ФНС) используются три реквизита: Заводской номер ФН, Номер ФД и ФПД. Номер чека за смену не гарантирует уникальности, так как каждый день повторяется.
Поэтому в типовых конфигурациях 1С в реквизит НомерЧекаККМ записывается именно сквозной номер ФД, возвращаемый методом СформироватьЧек. Чтобы покупатели и кассиры не путались, рекомендуется изменить шаблон чека в ККТ (через утилиту «Тест драйвера ККТ»): настроить отображение номера ФД в шапке или сделать его более заметным, отключив вывод локального номера за смену.
Если для бизнес-процессов компании обязательно требуется сохранять именно номер чека за смену, стандартной компоненты 1С будет недостаточно. Потребуется прямое обращение к методам нативного COM-объекта или Native API драйвера АТОЛ (DTO 8 / DTO 9 / DTO 10).
При использовании прямого драйвера можно запросить регистры ККТ или прочитать параметры закрытого чека:
// Пример получения параметров операции через нативный драйвер DTO 10
Драйвер.setParam(Драйвер.LIBFPTR_PARAM_DATA_TYPE, Драйвер.LIBFPTR_DT_RECEIPT_STATE);
Драйвер.queryData();
НомерЧекаЗаСмену = Драйвер.getParamInt(Драйвер.LIBFPTR_PARAM_RECEIPT_NUMBER);
НомерФД = Драйвер.getParamInt(Драйвер.LIBFPTR_PARAM_DOCUMENT_NUMBER);
В старых версиях драйверов (DTO 8) номер чека за смену можно определить по счетчику чеков в соответствующем регистре ККТ перед или сразу после выполнения команды закрытия чека.