Как получить сумму последнего чека из фискального регистратора в 1С?

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

При работе с торговым оборудованием в 1С иногда возникает необходимость оперативно узнать сумму последнего фискального документа, пробитого на кассовом аппарате. Рассмотрим, как это реализовать с помощью драйверов фискальных регистраторов, проанализируем примеры кода и обсудим важные нюансы, которые необходимо учитывать для корректного расчета данных.

Решение через драйвер ККТ «Штрих-М»

Для торгового оборудования производства «Штрих-М» получить номер и параметры последнего фискального документа можно через методы драйвера. Посмотрим на практический пример кода:


FR.ФНЗапросСтатуса();
Если FR.Результат = 0 Тогда
    НомерЧекаФД         = FR.НомерДокумента;
    ЗаводскойНомерФН = FR.ЗаводскойНомер;
    
    FR.Пароль = 30;
    FR.НомерДокумента = НомерЧекаФД;
    FR.ФННайтиДокумент();
    
    СуммаПоследнегоЧека = FR.Сумма1;
КонецЕсли;

Разберем по шагам, как работает данный алгоритм:

  1. Вызываем метод ФНЗапросСтатуса(), чтобы запросить текущее состояние фискального накопителя и получить номер последнего зарегистрированного фискального документа (ФД).
  2. Проверяем свойство Результат на равенство нулю (успешное выполнение команды).
  3. Устанавливаем пароль доступа к ККТ (по умолчанию 30) и передаем найденный номер документа в свойство НомерДокумента.
  4. Вызываем метод ФННайтиДокумент() для считывания реквизитов найденной операции.
  5. Считываем значение суммы из свойства Сумма1.

Важные ограничения и особенности обработки данных

Проанализируем возможные подводные камни, с которыми можно столкнуться при использовании приведенного выше базового кода:

  1. Неполная сумма при безналичной или смешанной оплате: свойство Сумма1 в драйвере «Штрих-М» возвращает сумму только по первому типу оплаты (обычно это наличные средства). Если покупатель оплатил чек банковской картой, электронным сертификатом или использовал смешанный тип расчета, свойство Сумма1 вернет 0 или только наличную часть. Для получения полной итоговой суммы необходимо суммировать все типы оплат (от Сумма1 до Сумма16) или использовать прямое считывание TLV-структуры.
  2. Тип последнего документа в ФН: вызов метода ФНЗапросСтатуса() возвращает номер последнего документа в фискальном накопителе вообще. Если последней операцией на кассе было открытие или закрытие смены (Z-отчет), чек коррекции или перерегистрация ККТ, метод найдет именно этот документ, а не чек продажи. Для исключения ошибок следует дополнительно проверять тип фискального документа через свойство ТипДокумента или тег 1054.

Чтение суммы через TLV-структуру из ФН

Наиболее надежный способ получить исчерпывающую информацию о документе непосредственно из фискального накопителя — чтение и парсинг TLV-тегов. Рассмотрим ключевые теги, отвечающие за суммы и тип операции:

  1. Тег 1020 (Итог): содержит общую сумму расчета по чеку (указывается в копейках).
  2. Тег 1031: сумма, оплаченная наличными деньгами.
  3. Тег 1081: сумма, оплаченная безналичным путем (электронными).
  4. Тег 1054: признак расчета (1 — Приход, 2 — Возврат прихода, 3 — Расход, 4 — Возврат расхода).

Для чтения структуры применяются специальные методы драйвера, такие как ФНПолучитьTLVСтруктуру или ФНПрочитатьTLV.

Альтернативные архитектурные решения в 1С

Выясним, какие штатные механизмы среды 1С:Предприятие позволяют избежать прямых низкоуровневых запросов к кассовому аппарату:

  1. Использование Библиотеки подключаемого оборудования (БПО): при выполнении операции пробития чека через БПО выходные параметры (номер ФД, фискальный признак, номер смены и сумма) сразу возвращаются в контекст выполнения программы.
  2. Чтение из информационной базы: типовые конфигурации 1С автоматически сохраняют данные фискализации в специализированные регистры (например, ФискальныеОперации или ЖурналФискальныхОпераций). Запрос данных из информационной базы выполняется быстрее и не требует повторной блокировки COM-порта фискального регистратора.
  3. Печать копии чека: если задача заключается в выдаче дубликата документа, не требуется вручную вычислять его сумму. Кассовые аппараты поддерживают команду повтора последнего закрытого чека (например, метод ПовторДокумента или ПечатьКопииЧека).

Особенности работы с кассами АТОЛ (ДТО 10)

Если используется оборудование компании АТОЛ, драйвер десятой версии (ДТО 10) предоставляет удобные специализированные типы запросов. Нам не требуется вручную высчитывать сквозные номера документов:

  1. Для запроса данных применяется тип LIBFPTR_FNDT_LAST_RECEIPT (получение данных последнего чека) или LIBFPTR_FNDT_LAST_DOCUMENT (последний документ любого типа).
  2. Запрос к ККТ выполняется с помощью метода fnQueryData(), после чего реквизиты и итоговые суммы считываются вызовом fnReadDocumentTLVs().

Таким образом, выбор метода зависит от модели кассового аппарата, используемого драйвера и бизнес-задачи: для мгновенной проверки данных внутри 1С предпочтительнее обращаться к информационным регистрам, а для прямых низкоуровневых операций с ККТ — считывать TLV-теги из фискального накопителя.

← На главную