Работа с Атол 55Ф из python, ветка драйверов 10.х

В продолжение предыдущей статьи о работе с Атол чрез python. Там описывалась работа с драйверами из ветки ДТО 9.х Всё хорошо, но в них не поддерживаются «электронные чеки». Собственно из-за чего всё и затевалось у меня. К сожалению работа с драйверами 10.х существенно отличается от 9.х Но к счастью есть ресурс http://integration.atol.ru, в котором достаточно всё хорошо разжевано с примерами. Правда без учета специфики Linux.

Итак, что нужно для того что-бы «поработать» с драйверами в Ubuntu.

1) Штатно установить драйвера deb из папки installer
2) В зависимости от того, скольки битная система, скопировать в папку проекта содержимое linux-86 или linux-x64. Если драйвера установлены верно, то при запуске fptr10_t.sh можно будет увидеть что-то вроде:

3) В архиве с драйверами ищем libfptr10.py и копируем в файл проекта python

4) Далее если мы будем для инициализации драйвера использовать код из примеров вида:

#!/usr/bin/python2
# -*- coding: utf-8 -*-


import sys
import os
from libfptr10 import IFptr


, то получим ошибку:

root@pavelpc:~/reserved/getcoding/atol/test/ver10# ./kkt_10.py
Traceback (most recent call last):
  File "./kkt_10.py", line 7, in <module>
    from libfptr10 import IFptr
ImportError: dynamic module does not define init function (initlibfptr10)

На сколько мне, не сильно подкованному в python и cpp, удалось выяснить, проблема в не верно скомпилированном libfptr10.so Возможно в следующих версиях драйвера она уйдет.

А пока, выходом у меня является дописание функционального кода в конце файла libfptr10.py, после описания класса IFptr

Например:

LIBRARY_PATH = os.path.dirname(os.path.abspath(__file__))
fptr = IFptr(os.path.join(LIBRARY_PATH, "libfptr10.so"))
print (fptr)

fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, str(IFptr.LIBFPTR_MODEL_ATOL_55F))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_TCPIP))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS, "192.168.0.99")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT,"5555")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_LIBRARY_PATH,"/home/pavel/reserved/getcoding/atol/test/ver10")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_ACCESS_PASSWORD,"0")
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_USER_PASSWORD,"30")
res=fptr.applySingleSettings()
print (res);

fptr.open()

isOpened = fptr.isOpened()
print ("Opened:"+str(isOpened));

fptr.setParam(IFptr.LIBFPTR_PARAM_DATA_TYPE, IFptr.LIBFPTR_DT_STATUS)
fptr.queryData()
operatorID      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_OPERATOR_ID)
print (operatorID)
logicalNumber   = fptr.getParamInt(IFptr.LIBFPTR_PARAM_LOGICAL_NUMBER)
shiftState      = fptr.getParamInt(IFptr.LIBFPTR_PARAM_SHIFT_STATE)
serialNumber    = fptr.getParamString(IFptr.LIBFPTR_PARAM_SERIAL_NUMBER)
modelName       = fptr.getParamString(IFptr.LIBFPTR_PARAM_MODEL_NAME)
firmwareVersion = fptr.getParamString(IFptr.LIBFPTR_PARAM_UNIT_VERSION)
print (modelName)

Кое-что уже выводит:


Комментарии:

5 мыслей о “Работа с Атол 55Ф из python, ветка драйверов 10.х”

  1. У меня такой рабочий код, файл libfptr10.py в текущем каталоге :
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-

    #Инициализация драйвера
    from libfptr10 import IFptr
    import os
    fptr = IFptr(os.path.join(‘/usr/lib/’,))
    #Настройка драйвера
    fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, str(IFptr.LIBFPTR_MODEL_ATOL_77F))
    fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_TCPIP))
    fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPADDRESS, «192.168.0.77»)
    fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_IPPORT, «5555»)
    fptr.applySingleSettings()
    #Установка соединения с ККТ
    fptr.open()
    #Проверка состояния логического соединения
    isOpened = fptr.isOpened()
    #Бип
    fptr.beep()
    for number in range(3): #несколько чеков
    #Открытие печатного чека
    fptr.setParam(1021, «Иванова О.»)
    fptr.setParam(1203, «123456789047»)
    fptr.operatorLogin()
    #Тип чека:Приход
    fptr.setParam(IFptr.LIBFPTR_PARAM_RECEIPT_TYPE, IFptr.LIBFPTR_RT_SELL)
    fptr.openReceipt()
    #Регистрация позиции без указания суммы налога
    fptr.setParam(IFptr.LIBFPTR_PARAM_COMMODITY_NAME, «Услуги «)
    fptr.setParam(IFptr.LIBFPTR_PARAM_PRICE, 10)
    fptr.setParam(IFptr.LIBFPTR_PARAM_QUANTITY, 1)
    fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT110)
    fptr.registration()
    #Оплата чека
    fptr.setParam(IFptr.LIBFPTR_PARAM_PAYMENT_TYPE, IFptr.LIBFPTR_PT_CASH)
    fptr.payment()
    #Регистрация налога на чек
    fptr.setParam(IFptr.LIBFPTR_PARAM_TAX_TYPE, IFptr.LIBFPTR_TAX_VAT110)
    fptr.receiptTax()
    #Регистрация итога чека
    fptr.receiptTotal()
    #Закрытие полностью оплаченного чека
    fptr.closeReceipt()
    #Бип
    fptr.beep()
    #Завершение соединения с ККТ
    fptr.close()
    #Деинициализация драйвера
    del fptr

  2. Добрый день! У себя в магазине использую автоматизацию учета php pos уже 7 лет, весь товар и аналитика тоже в этой программе. Переходить на другую систему учета не хочется. Видел на форуме, что Вы работали с кассами атол. Прошу Вас доработать мою систему, чтобы была возможность отправлять продажи на кассу атол.

    Система учета PHP Point Of Sale написана на php, хранит данные в mysql, сервер на линуксе. Клиент (место кассира) — браузер на убунту, Планировал подключить кассу к рабочему компу кассира.

    +7(903)425-zz-zz Роман

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.