Драйвер контрольно-кассовой техники v.10
Использование в Python

Для работы с компонентом из Python существует модуль libfptr10.py и класс libfptr10.IFptr. При создании объекта класса ему нужно передать путь к компоненту, собранному под ОС и архитектуру, совпадающие с интерпретатором Python.

Пример использования компонента:

# -*- coding: utf-8 -*-
import sys
import os
from libfptr10 import IFptr
LIBRARY_PATH = os.path.dirname(os.path.abspath(__file__))
fptr = IFptr(os.path.join(LIBRARY_PATH, "libfptr10.so"))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_USB))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_LIBRARY_PATH, LIBRARY_PATH)
fptr.applySingleSettings()
fptr.open()
# Регистрация кассира
fptr.setParam(1021, u"Иванов И.И.")
fptr.setParam(1203, u"500100732259")
fptr.operatorLogin()
# Открытие электронного чека(с передачей телефона получателя)
fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
fptr.setParam(1008, u"+79161234567")
fptr.openReceipt()
# Регистрация позиции
fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, u"Чипсы LAYS")
fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 73.99)
fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 5)
fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT18)
fptr.setParam(1212, 1)
fptr.setParam(1214, 7)
fptr.registration()
# Регистрация итога (отрасываем копейки)
fptr.setParam(IFptr.LIBFPTR_PARAM_SUM, 369.0)
fptr.receiptTotal()
# Оплата наличными
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_SUM, 1000)
fptr.payment()
# Закрытие чека
if fptr.closeReceipt() < 0:
# Обработка исключительных ситуаций, если произошла ошибка при закрытии чека
# (чек мог закрыться на самом деле, даже если, например, закончилась чековая лента)
fptr.checkReceiptClosed()
if not fptr.getParamBool(IFptr.LIBFPTR_PARAM_RECEIPT_CLOSED):
# Обработка ошибки закрытия чека
sys.exit(255)
# Запрос информации о закрытом чеке
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_LAST_DOCUMENT)
fptr.fnQueryData()
print("Fiscal Sign = {}".format(fptr.getParamString(IFptr.LIBFPTR_PARAM_FISCAL_SIGN)))
print("Fiscal Document Number = {}".format(fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)))
# Формирование слипа ЕГАИС
fptr.beginNonfiscalDocument()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ИНН: 111111111111 КПП: 222222222")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "КАССА: 1 СМЕНА: 11")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "ЧЕК: 314 ДАТА: 20.11.2017 15:39")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
fptr.setParam(IFptr.LIBFPTR_PARAM_BARCODE_TYPE, IFptr.LIBFPTR_BT_QR)
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.setParam(IFptr.LIBFPTR_PARAM_SCALE, 5)
fptr.printBarcode()
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT, "https://check.egais.ru?id=cf1b1096-3cbc-11e7-b3c1-9b018b2ba3f7")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_CHARS)
fptr.printText()
fptr.printText()
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT,
"10 58 1c 85 bb 80 99 84 40 b1 4f 35 8a 35 3f 7c "
"78 b0 0a ff cd 37 c1 8e ca 04 1c 7e e7 5d b4 85 "
"ff d2 d6 b2 8d 7f df 48 d2 5d 81 10 de 6a 05 c9 "
"81 74")
fptr.setParam(IFptr.LIBFPTR_PARAM_ALIGNMENT, IFptr.LIBFPTR_ALIGNMENT_CENTER)
fptr.setParam(IFptr.LIBFPTR_PARAM_TEXT_WRAP, IFptr.LIBFPTR_TW_WORDS)
fptr.printText()
fptr.endNonfiscalDocument()
# Отчет о закрытии смены
fptr.setParam(IFptr.LIBFPTR_PARAM_REPORT_TYPE, IFptr.LIBFPTR_RT_CLOSE_SHIFT)
fptr.report()
# Получение информации о неотправленных документах
fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_OFD_EXCHANGE_STATUS)
fptr.fnQueryData()
unsentCount = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENTS_COUNT)
unsentFirstNumber = fptr.getParamInt(IFptr.LIBFPTR_PARAM_DOCUMENT_NUMBER)
unsentDateTime = fptr.getParamDateTime(IFptr.LIBFPTR_PARAM_DATE_TIME)
# Завершение работы
fptr.close()