Skip to main content

pyiiko

pyiiko

Python-библиотека для работы с API iiko ERP

PyPI version Python versions PyPI downloads License: Apache 2.0


Возможности

  • iiko Server API — on-premise установки (складской учёт, номенклатура, отчёты OLAP, сотрудники, накладные, EDI)
  • iiko Transport API — облачный API (организации, терминалы, доставки, города, улицы)
  • iiko Public Web API — облачный API нового поколения (документооборот, номенклатура, закупки)
  • Автоматический retry на 5xx ошибки (3 попытки с backoff)
  • Единая иерархия исключений: IikoError → IikoAuthError / IikoAPIError
  • Context manager для автоматического освобождения ресурсов
  • Type hints, PEP 561 py.typed

Установка

pip install Pyiiko

Требования: Python 3.9+

Быстрый старт

iiko Server (on-premise)

from Pyiiko import IikoServer

# Пароль передаётся в виде SHA1-хеша
server = IikoServer(
    ip="https://your-server.example.com:443",
    login="login",
    password="da39a3ee5e6b4b0d3255bfef95601890afd80709",
)

print(server.version())          # "7.8.9"
print(server.departments())      # XML с иерархией подразделений
print(server.products())         # XML с номенклатурой

Использование как context manager освобождает токен (лицензионный слот) автоматически:

with IikoServer(ip="...", login="...", password="...") as server:
    stores = server.stores()
    employees = server.employees()
# токен уничтожен, лицензия освобождена

Если токен уже получен — передайте его напрямую, чтобы не делать лишний запрос:

server = IikoServer(ip="https://...", token="your-existing-token")

iiko Public Web API

from Pyiiko import IikoWeb

client = IikoWeb(api_key="your-api-key")

# Список складов
stores = client.stores()

# Список продуктов с пагинацией
products = client.products(limit=100, offset=0)

# Экспорт приходных накладных
invoices = client.incoming_invoice_export(
    department_id="dept-guid-...",
    date_from="2024-01-01",
    date_to="2024-01-31",
)

# Список заказов на закупку
orders = client.orders_list({"storeId": 1, "limit": 50})

Передайте уже полученный токен, чтобы пропустить авторизацию:

client = IikoWeb(token={"token": "eyJ...", "expires_in": 9999999999})

iiko Transport (Cloud)

from Pyiiko import Transport

client = Transport(key="your-api-login-key")

orgs = client.organization()
terminals = client.terminal(org_id="org-guid-...")
cities = client.cities(org_id="org-guid-...")

Создание доставки:

order = {
    "organizationId": "org-guid-...",
    "order": {
        "phone": "+79001234567",
        "deliveryPoint": {"coordinates": {"latitude": 55.75, "longitude": 37.61}},
        "items": [{"productId": "product-guid-...", "amount": 1}],
    },
}
response = client.delivery_create(order_info=order)

Обработка ошибок

from Pyiiko import IikoServer, IikoAuthError, IikoAPIError

try:
    server = IikoServer(ip="...", login="user", password="wrong")
except IikoAuthError:
    print("Неверные учётные данные")

try:
    data = server.departments()
except IikoAPIError as e:
    print(f"Ошибка API: HTTP {e.status_code}")
Исключение Когда возникает
IikoError Базовый класс всех ошибок pyiiko
IikoAuthError Неверный логин/пароль, пустой токен
IikoAPIError Сервер вернул HTTP 4xx/5xx

Справочник методов

IikoServer

Метод Описание
version() Версия iiko сервера
server_info() Информация о сервере и лицензии
departments() Иерархия подразделений
stores() Список складов
groups() Группы и отделения
terminals() Список терминалов
terminals_search(anonymous, **kwargs) Поиск терминалов
employees() Сотрудники
products(includeDeleted) Номенклатура
products_find(**kwargs) Поиск по номенклатуре
suppliers() Поставщики
suppliers_find(name, code) Поиск поставщиков
suppliers_price(code, date) Прайс-лист поставщика
events(**kwargs) События
events_filter(body) События по фильтру XML
olap(report, data_from, data_to, **kwargs) OLAP-отчёт v1
olap2(body) OLAP-отчёт v2 (JSON)
sales(departament, **kwargs) Отчёт по выручке
product_expense(departament, **kwargs) Расход продуктов
store_operation(**kwargs) Складские операции
reports_balance(timestamp, **kwargs) Балансы по счетам
invoice_in(**kwargs) Приходные накладные
invoice_out(**kwargs) Расходные накладные
invoice_number_in(current_year, **kwargs) Приходная накладная по номеру
invoice_number_out(current_year, **kwargs) Расходная накладная по номеру
production_doc(xml) Загрузка акта приготовления
close_session(dateFrom, dateTo) Кассовые смены
edi(edi, **kwargs) EDI заказы
quit_token() Уничтожить токен / освободить лицензию

Transport

Метод Описание
organization() Список организаций
terminal(org_id) Терминальные группы
regions(org_id) Регионы доставки
cities(org_id) Города
streets_by_city(org_id, city) Улицы города
delivery_create(order_info) Создать доставку
check_create(order_info) Валидировать заказ перед созданием
by_id(org_id, order_id) Доставка по ID
by_delivery_date(org_id, delivery_date_from) Доставки по дате
by_revision(org_id, revision) Доставки с ревизии

IikoWeb

Авторизация

Метод Описание
get_token() Получить новый Bearer-токен по API-ключу
token() Вернуть текущий токен (dict)

Справочники (entities)

Метод Описание
stores() Список складов
store(store_id) Склад по ID
products(filters, limit, offset) Номенклатура
product_categories(filters, limit, offset) Категории продуктов
product_sizes(filters, limit, offset) Размеры продуктов
users(filters, limit, offset) Пользователи
payment_types(filters, limit, offset) Типы оплат
cash_flow_categories(filters, limit, offset) Статьи ДДС

Номенклатура

Метод Описание
update_barcodes(payload) Обновить штрих-коды

Документооборот

Метод Описание
counteragents(department_id, type, limit, offset) Список контрагентов
incoming_invoice_create(payload) Создать приходную накладную
incoming_invoice_export(department_id, date_from, date_to, ...) Экспорт приходных накладных
incoming_invoice_export_by_number(payload) Приходная накладная по номеру
incoming_invoice_pay(payload) Провести оплату приходной накладной
incoming_invoice_set_payment_date(payload) Установить дату оплаты
incoming_invoice_update(payload) Обновить приходную накладную
incoming_service_create(payload) Создать акт входящих услуг
incoming_service_edit(payload) Изменить акт входящих услуг
incoming_service_export(payload) Экспорт актов входящих услуг
incoming_service_get(payload) Получить акт входящих услуг
internal_transfer_create(payload) Создать внутреннее перемещение
internal_transfer_edit(payload) Изменить внутреннее перемещение
internal_transfer_export(payload) Экспорт внутренних перемещений
internal_transfer_get_by_id(payload) Перемещение по ID
internal_transfer_export_by_number(payload) Перемещение по номеру
outgoing_invoice_create(payload) Создать расходную накладную
outgoing_invoice_export(payload) Экспорт расходных накладных
outgoing_invoice_export_by_number(payload) Расходная накладная по номеру
outgoing_invoice_cost_prices(payload) Себестоимость по расходной накладной
outgoing_invoice_pay(payload) Провести оплату расходной накладной
outgoing_invoice_set_payment_date(payload) Установить дату оплаты
outgoing_invoice_update(payload) Обновить расходную накладную
outgoing_service_create(payload) Создать акт исходящих услуг
outgoing_service_edit(payload) Изменить акт исходящих услуг
outgoing_service_export(payload) Экспорт актов исходящих услуг
outgoing_service_get(payload) Получить акт исходящих услуг
production_doc_create(payload) Создать акт приготовления
production_doc_edit(payload) Изменить акт приготовления
production_doc_export(payload) Экспорт актов приготовления
production_doc_get(payload) Получить акт приготовления
sales_doc_create(payload) Создать акт реализации
sales_doc_edit(payload) Изменить акт реализации
sales_doc_export(payload) Экспорт актов реализации
sales_doc_get(payload) Получить акт реализации
writeoff_create(payload) Создать акт списания
writeoff_edit(payload) Изменить акт списания
writeoff_export(payload) Экспорт актов списания
writeoff_get_by_id(payload) Акт списания по ID
writeoff_export_by_number(payload) Акт списания по номеру

Закупки

Метод Описание
order_create(store_id, workflow_id, due_date, ...) Создать заказ на закупку
order_get(order_id) Заказ на закупку по ID
orders_list(payload) Список заказов на закупку
order_add_products(payload) Добавить продукты в заказ
order_select_supplier(payload) Выбрать поставщика для заказа
order_task_status(task_id) Статус асинхронной задачи заказа
order_select_units(payload) Выбрать единицы измерения для заказа
workflow_activate(workflow_id) Активировать рабочий процесс
workflow_deactivate(workflow_id) Деактивировать рабочий процесс
workflow_get(workflow_id) Рабочий процесс по ID
workflows_list(payload) Список рабочих процессов

Разработка

git clone https://github.com/gadzhi/pyiiko.git
cd pyiiko
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest --cov=Pyiiko

Тесты не требуют подключения к серверу — HTTP замокан через responses.

Подробности в CONTRIBUTING.md.

Changelog

Смотрите CHANGELOG.md.

Лицензия

Apache License 2.0

Metadata

Release files for Pyiiko 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for Pyiiko 0.5.0
File Size Uploaded
pyiiko-0.5.0.tar.gz 34.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for Pyiiko 0.5.0
File Interpreter ABI Platform
pyiiko-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 61.3 kB

Release files / pyiiko-0.5.0.tar.gz

Download URL pyiiko-0.5.0.tar.gz
Size 34.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e68565b721b6767f795e703e90d197264e07f3ceab70db58914b55caf2a6f39f
BLAKE2b-256 checksum
How to use checksums
91e1c06211ab33edf40e214daa1a5e4c5286b528f00c04e8b014b9312b465a61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release files / pyiiko-0.5.0-py3-none-any.whl

Download URL pyiiko-0.5.0-py3-none-any.whl
Size 26.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
886495072b6cf5b0193baf03455d52d7040f33a8e08c76716c7f594fb54cf64d
BLAKE2b-256 checksum
How to use checksums
39100fe2dd2f9343c8b64c8d0ec55adcfccc3d2b64513526583a646ec648f31e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.1

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.2.16

1 release file

0.2.15

1 release file

0.2.14

1 release file

0.2.13

1 release file

0.2.12

1 release file

0.2.11

1 release file

0.2.10

1 release file

0.2.9

1 release file

0.2.8

1 release file

0.2.7

1 release file

0.2.6

1 release file

0.2.5

1 release file

0.2.4

1 release file

0.2.3

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.1.9

1 release file

0.1.8

1 release file

0.1.7

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page