Диагностика ККТ АТОЛ на Python: Быстрая проверка версий ФФД

Добавлено: 16/03/2026 10:32 |  Обновлено: 16/03/2026 10:32 |  Добавил: nick |  Просмотры: 60 Комментарии: 0
Вводная часть
При интеграции с фискальными регистраторами (ККТ) одна из самых частых проблем — несовместимость версий Формата Фискальных Данных (ФФД) между самой кассой и Фискальным Накопителем (ФН). Написал небольшой скрипт на Python, который подключается к ККТ АТОЛ (через драйверы 10.x) и выводит всю необходимую информацию о версиях. Это удобно для инвентаризации оборудования или диагностики.
При интеграции с фискальными регистраторами (ККТ) одна из самых частых проблем — несовместимость версий Формата Фискальных Данных (ФФД) между самой кассой и Фискальным Накопителем (ФН).

Написал небольшой скрипт на Python, который подключается к ККТ АТОЛ (через драйверы 10.x) и выводит всю необходимую информацию о версиях. Это удобно для инвентаризации оборудования или диагностики.

Что делает скрипт?

  • Автоподключение: Настраивает модель на ATOL_AUTO и порт на USB.
  • Проверка связи: Открывает соединение и обрабатывает возможные ошибки.
  • Сбор метаданных: Запрашивает блок данных о версиях ФФД и выводит:
    1. Версию ФФД самой ККТ.
    2. Версию ФФД, зашитую в ФН.
    3. Максимально поддерживаемые версии.
    4. Версию прошивки модели.
  • Корректное завершение: Закрывает соединение и освобождает ресурсы.
Требования

  • Установленные Драйверы ККТ АТОЛ 10.x.
  • Python 3.x.
  • Файл libfptr10.py (идет в комплекте с драйверами в папке langs\python).
  • Подключенная кассу по USB.
Код скрипта

Обратите внимание: путь к библиотеке (sys.path) и DLL (library_path) может отличаться в зависимости от версии драйверов и разрядности системы.

import sys
# Путь к папке, где лежит libfptr10.py
sys.path.append(r'C:\Program Files (x86)\ATOL\Drivers10\KKT\langs\python')

from libfptr10 import IFptr

library_path = r'C:\Program Files (x86)\ATOL\Drivers10\KKT\bin\fptr10.dll'

fptr = IFptr(library_path)

# Настройки подключения (рекомендуемый способ в 10.x)
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_MODEL, str(IFptr.LIBFPTR_MODEL_ATOL_AUTO))
fptr.setSingleSetting(IFptr.LIBFPTR_SETTING_PORT, str(IFptr.LIBFPTR_PORT_USB))

# Применяем настройки
if fptr.applySingleSettings() != 0:
    print("Ошибка применения настроек:", fptr.errorDescription())
    sys.exit(1)

# Открываем соединение с ККТ
if fptr.open() != 0:
    print("Ошибка открытия соединения:", fptr.errorDescription())
    sys.exit(1)

print("Успешное подключение к ККТ!\n")

# ───────────────────────────────────────────────
# Запрашиваем и выводим данные
# ───────────────────────────────────────────────

params_to_query = [
    (IFptr.LIBFPTR_PARAM_DEVICE_FFD_VERSION,       "Версия ФФД ККТ"),
    (IFptr.LIBFPTR_PARAM_FN_FFD_VERSION,           "Версия ФФД ФН"),
    (IFptr.LIBFPTR_PARAM_FN_MAX_FFD_VERSION,       "Макс. версия ФФД ФН"),
    (IFptr.LIBFPTR_PARAM_FFD_VERSION,              "Версия ФФД (текущая)"),
    (IFptr.LIBFPTR_PARAM_DEVICE_MAX_FFD_VERSION,   "Макс. версия ФФД ККТ"),
    (IFptr.LIBFPTR_PARAM_DEVICE_MIN_FFD_VERSION,   "Мин. версия ФФД ККТ"),
    (IFptr.LIBFPTR_PARAM_VERSION,                  "Версия модели ККТ"),
]

for param_const, description in params_to_query:
    fptr.setParam(IFptr.LIBFPTR_PARAM_FN_DATA_TYPE, IFptr.LIBFPTR_FNDT_FFD_VERSIONS)

    if fptr.fnQueryData() == 0:
        value = fptr.getParamInt(param_const)
        if fptr.errorCode() == 0:
            print(f"{description: <28} : {value}")
        else:
            print(f"{description: <28} : ошибка получения значения ({fptr.errorDescription()})")
    else:
        print(f"{description: <28} : не удалось выполнить fnQueryData → {fptr.errorDescription()}")

print("\nГотово.")

# Закрываем соединение и очищаем
fptr.close()
del fptr

Оставьте свой комментарий

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