При работе с торговым оборудованием в 1С иногда возникает необходимость оперативно узнать сумму последнего фискального документа, пробитого на кассовом аппарате. Рассмотрим, как это реализовать с помощью драйверов фискальных регистраторов, проанализируем примеры кода и обсудим важные нюансы, которые необходимо учитывать для корректного расчета данных.
Для торгового оборудования производства «Штрих-М» получить номер и параметры последнего фискального документа можно через методы драйвера. Посмотрим на практический пример кода:
FR.ФНЗапросСтатуса();
Если FR.Результат = 0 Тогда
НомерЧекаФД = FR.НомерДокумента;
ЗаводскойНомерФН = FR.ЗаводскойНомер;
FR.Пароль = 30;
FR.НомерДокумента = НомерЧекаФД;
FR.ФННайтиДокумент();
СуммаПоследнегоЧека = FR.Сумма1;
КонецЕсли;
Разберем по шагам, как работает данный алгоритм:
ФНЗапросСтатуса(), чтобы запросить текущее состояние фискального накопителя и получить номер последнего зарегистрированного фискального документа (ФД).Результат на равенство нулю (успешное выполнение команды).30) и передаем найденный номер документа в свойство НомерДокумента.ФННайтиДокумент() для считывания реквизитов найденной операции.Сумма1.Проанализируем возможные подводные камни, с которыми можно столкнуться при использовании приведенного выше базового кода:
Сумма1 в драйвере «Штрих-М» возвращает сумму только по первому типу оплаты (обычно это наличные средства). Если покупатель оплатил чек банковской картой, электронным сертификатом или использовал смешанный тип расчета, свойство Сумма1 вернет 0 или только наличную часть. Для получения полной итоговой суммы необходимо суммировать все типы оплат (от Сумма1 до Сумма16) или использовать прямое считывание TLV-структуры.ФНЗапросСтатуса() возвращает номер последнего документа в фискальном накопителе вообще. Если последней операцией на кассе было открытие или закрытие смены (Z-отчет), чек коррекции или перерегистрация ККТ, метод найдет именно этот документ, а не чек продажи. Для исключения ошибок следует дополнительно проверять тип фискального документа через свойство ТипДокумента или тег 1054.Наиболее надежный способ получить исчерпывающую информацию о документе непосредственно из фискального накопителя — чтение и парсинг TLV-тегов. Рассмотрим ключевые теги, отвечающие за суммы и тип операции:
Для чтения структуры применяются специальные методы драйвера, такие как ФНПолучитьTLVСтруктуру или ФНПрочитатьTLV.
Выясним, какие штатные механизмы среды 1С:Предприятие позволяют избежать прямых низкоуровневых запросов к кассовому аппарату:
ФискальныеОперации или ЖурналФискальныхОпераций). Запрос данных из информационной базы выполняется быстрее и не требует повторной блокировки COM-порта фискального регистратора.ПовторДокумента или ПечатьКопииЧека).Если используется оборудование компании АТОЛ, драйвер десятой версии (ДТО 10) предоставляет удобные специализированные типы запросов. Нам не требуется вручную высчитывать сквозные номера документов:
LIBFPTR_FNDT_LAST_RECEIPT (получение данных последнего чека) или LIBFPTR_FNDT_LAST_DOCUMENT (последний документ любого типа).fnQueryData(), после чего реквизиты и итоговые суммы считываются вызовом fnReadDocumentTLVs().Таким образом, выбор метода зависит от модели кассового аппарата, используемого драйвера и бизнес-задачи: для мгновенной проверки данных внутри 1С предпочтительнее обращаться к информационным регистрам, а для прямых низкоуровневых операций с ККТ — считывать TLV-теги из фискального накопителя.