Python

Open ERP: разбираю свою ERP-систему для малого бизнеса — склады, продажи, отчёты

20.07.2026 7 мин чтения
Главный дашборд Open ERP со сводкой и графиками

Я выложил исходники своего ERP-проекта на GitHub и хочу честно рассказать, что это такое, зачем нужно и кому может пригодиться. Open ERP — это веб-приложение для складского учёта, торговых операций и финансового учёта в малом бизнесе. Написано на Python (FastAPI + SQLAlchemy), работает в браузере, данные хранит в SQLite или PostgreSQL.

Это не конкурент 1С. Это инструмент для тех, кому 1С избыточна, а Excel уже не справляется.

Зачем я её написал

Малый бизнес обычно начинает учёт в Excel. Таблицы копируются, теряются, расходятся между сотрудниками. Когда приходит второй склад или второй магазин — таблицы ломаются. Переходить на 1С дорого и сложно. Облачные решения (МойСклад, Бизнес.Ру) берут абонплату и не дают контроля над данными.

Open ERP решает конкретную задачу: один человек или небольшая команда могут вести склад, продажи, контрагентов и деньги в единой системе, на собственном сервере, без ежемесячных платежей.

Что внутри

Система построена по классической схеме: справочники, документы, регистры. Все данные хранятся в реляционной базе. Документы (поступления, продажи, перемещения) при проведении делают движения в регистрах (остатки товаров, взаиморасчёты, касса). Отчёты читают данные из регистров.

Справочники

  • Организации — структура компаний
  • Контрагенты — поставщики и покупатели
  • Номенклатура — товары с SKU и единицами измерения
  • Склады — точки хранения
  • Валюты — мультивалютный учёт
  • Счета денежных средств — касса, банк, по валюте
  • Статьи денежных движений — для кассовых операций
  • Типы цен — ценовые колонки

Документы

  • Поступление товаров — приход от поставщика на склад
  • Реализация — продажа со склада покупателю
  • Перемещение — между складами
  • Ордерное списание — корректировка остатков
  • Заказ покупателя — резервирует товар под сделку
  • Приходный кассовый ордер — поступление денег
  • Расходный кассовый ордер — списание денег
  • Банковские платежи — отдельно по расчётному счёту

Каждый документ имеет статус: черновик, проведён, отменён, помечен на удаление. Проведённый документ делает движения в регистрах. Отмена документа не делает обратные движения — она помечает документ отменённым, а его движения удаляются и пересчитываются.

Регистры и отчёты

Регистр — это таблица, которая копит движения от документов. Остаток на любую дату = начальный остаток + сумма движений. Система поддерживает два типа регистров: накопительные (остатки товаров, взаиморасчёты, касса) и информационные (цены, курсы валют).

Встроенные отчёты:

  • Остатки товаров на складах
  • Продажи за период (с группировкой)
  • Взаиморасчёты с контрагентами
  • Кассовые средства по счетам
  • Оборотно-сальдовая ведомость по складу
  • Платёжный календарь (планируемые поступления и списания)
  • Незакрытые документы (что не оплачено)
  • Акт сверки с контрагентом

Дашборд

На главной странице — сводка: остатки по складам, продажи за месяц, долг контрагентов, кассовые остатки, графики продаж (Chart.js). Один экран показывает состояние бизнеса.

Скриншоты интерфейса

Страница входа: обычная форма логина, bcrypt-хеширование паролей, cookie-сессии.

Страница входа Open ERP

Дашборд: главный экран после входа. KPI-блоки сверху, графики продаж по дням, таблицы остатков и долгов.

Дашборд Open ERP

Список поступлений: типичный список документов. Дата, номер, статус (зелёный бейдж «Проведён»), комментарий. Кнопка «Создать» сверху справа.

Список документов поступления

Взаиморасчёты: отчёт по контрагентам. Видно долг каждого поставщика и покупателя, с группировкой по валютам.

Отчёт по взаиморасчётам

Кассовые средства: остатки по счетам денежных средств. Касса, банк — по каждой валюте отдельно.

Кассовые средства

Архитектура

Бэкенд: FastAPI (асинхронный Python-фреймворк), SQLAlchemy 2.0 как ORM, Jinja2 для шаблонов. База данных — SQLite по умолчанию (один файл, переносится флешкой), PostgreSQL для продакшена.

Фронтенд: серверные шаблоны HTML + Alpine.js для реактивности (модалки, динамические списки). Без React, без сборки, без node_modules. CSS — собственный, чистый и быстрый.

Структура кода модульная. Ядро (core/) отвечает за общую логику: метаданные, схему БД, проведение документов, регистры, поиск, безопасность. Модуль trade/ содержит бизнес-логику торговли: справочники, документы, отчёты. Чтобы добавить новый модуль (например, CRM или производство), нужно написать классы метаданных и зарегистрировать их в bootstrap.py.

Безопасность и контроль

  • Пароли хранятся через bcrypt
  • Cookie-сессии подписаны секретным ключом (itsdangerous)
  • Ролевая модель: права на чтение/запись/проведение по каждому типу объектов
  • Закрытие периодов: можно запретить редактирование документов за прошлые месяцы
  • Аудит: лог изменений по каждому объекту (кто, когда, что было до и после)
  • Журнал операций: все значимые действия в системе
  • Резервное копирование: команда openerp backup создаёт копию SQLite в backups/

Импорт и экспорт

Загрузка номенклатуры, контрагентов и начальных остатков через CSV или XLSX. Можно выгрузить шаблон CSV для любого справочника, заполнить в Excel и загрузить обратно. Экспорт отчётов в CSV/XLSX прямо из браузера.

Двуязычный интерфейс

Интерфейс на русском и английском. Переключение — кнопкой в шапке. Переводы через GNU gettext, файлы в locales/ru/ и locales/en/. Русский — основной язык (msgid = msgstr), английский — перевод.

Как запустить

Нужен Python 3.11+. Установка:

git clone https://github.com/slesar/open-erp.git
cd open-erp
python -m venv .venv
.\.venv\Scripts\pip install -e ".[dev]"
.\.venv\Scripts\openerp init-db
.\.venv\Scripts\openerp seed-demo
.\.venv\Scripts\openerp run --port 8000

Открываете http://127.0.0.1:8000, логин admin@example.local, пароль admin. Команда seed-demo загрузит демо-данные: организации, контрагентов, товары, склады, проведённые документы. Можете сразу посмотреть, как работают отчёты и дашборд на реальных данных.

Для продакшена — PostgreSQL и gunicorn/uvicorn за nginx. Переменная OPENERP_DATABASE_URL=postgresql+psycopg://user:pass@host/db.

Аналоги

Система Тип Цена Отличие от Open ERP
1С: Управление торговлей Десктоп/сервер от 30 000 ₽ за лицензию Мощнее, но сложнее. Требует программиста 1С для настройки
МойСклад Облако SaaS от 1 300 ₽/мес Простая, но данные на серверах разработчика. Нет кастомизации
Бизнес.Ру Облако SaaS от 1 500 ₽/мес Аналогично МойСклад. Платёж каждый месяц
Odoo Community Self-hosted Бесплатно Огромная система, сложно настроить. Python, но тяжеловесна
ERPNext Self-hosted Бесплатно Полноценная ERP, но требует сервера с 4+ ГБ RAM
Open ERP Self-hosted Бесплатно (AGPLv3) Лёгкая, работает на любом ПК. SQLite по умолчанию. Русский интерфейс из коробки

Главное отличие от облачных решений — данные у вас. Полный контроль, никаких ежемесячных платежей, возможность кастомизировать код. От Odoo и ERPNext отличается простотой: ставится за 5 минут, не требует настройки окружения.

Кому пригодится

  • Небольшой розничный магазин — 1-2 точки, приход/продажа/перемещение между точками
  • Оптовая торговля — заказы покупателей, резервы, взаиморасчёты, акты сверки
  • ИП на УСН — базовый учёт товаров и денег без бухгалтерской избыточности
  • Дистрибьютор — несколько складов, перемещения, контроль остатков
  • Стартап — нужен учёт, но нет бюджета на 1С и нет времени на внедрение

Чего сейчас нет (и что планируется)

Это MVP. В текущей версии нет:

  • ЭДО и интеграции с 1С-бухгалтерией (но есть выгрузка в CSV/XLSX)
  • Сканеров штрих-кодов ( Planned)
  • Мобильного приложения (интерфейс работает в браузере телефона, но не оптимизирован)
  • Многовалютного учёта с автоматическим пересчётом по курсу (валюты есть, но курсы вводятся вручную через информационный регистр)
  • CRM-модуля (есть заготовка архитектуры, модуль пишется)
  • Интеграции с маркетплейсами (Wildberries, Ozon)

Архитектура модульная — добавить CRM, производство или интеграцию можно без переписывания ядра.

Технологический стек

Компонент Технология
Бэкенд Python 3.11+, FastAPI, SQLAlchemy 2.0
Фронтенд Jinja2, Alpine.js, Chart.js
База данных SQLite (по умолчанию) / PostgreSQL
Аутентификация bcrypt, cookie-сессии (itsdangerous)
i18n GNU gettext (RU/EN)
CLI Typer
Тесты pytest (100+ тестов)
Лицензия AGPLv3

Лицензия

AGPLv3. Использовать бесплатно, модифицировать свободно, распространять изменения обязательно (если делаете SaaS на основе этого кода — обязаны открыть исходники).

Кому подходит

  • Небольшой магазин — 1–2 кассы, нужна фиксация прихода и продаж, остатки в реальном времени, базовый учёт по контрагентам. Open ERP покрывает этот цикл полностью.
  • Товарный бизнес — закупки у поставщиков, реализации клиентам, перемещения между складами. Если вы ведёте торговлю и устали от Excel — это ваш сценарий.
  • Производство — несколько цехов, списание сырья, выпуск готовой продукции, контроль остатков по компонентам.
  • Склад — приёмка, отгрузка, инвентаризации. Отдельный склад или несколько точек.
  • Услуги — акты об оказании, оплата подрядчиков, контроль рентабельности по проектам.
  • Тот, кто уходит с 1С — лицензии дорогие, обновления тяжёлые, интерфейс устарел. Open ERP не заменит 1С полностью, но для базового учёта — более чем достаточно.

Итог

Open ERP — не замена 1С и не конкурент энтерпрайз-системам. Это инструмент для тех случаев, когда обычные таблицы уже не справляются, но полноценная ERP-система ещё избыточна. Документы заполняются за пару кликов, работает на любом компьютере, не требует сервера. Обучение персонала — за вечер, подготовка к работе — за пять минут.

Решение не претендует на роль единственного источника правды для крупного бизнеса. Но для небольшой команды, которая устала считать остатки вручную и хочет навести порядок в складе, продажах и финансах — это рабочий вариант без подписок и зависимостей. Код открыт (AGPLv3), база в одном файле, установка через pip install.

Если у вас магазин, склад или небольшое производство — попробуйте. seed-demo загрузит тестовые данные с контрагентами, товарами и документами. Через 10 минут разберётесь, подходит ли вам. Если нет — удалили папку, и никаких следов. Если да — подняли на постоянный сервер и работаете.

Евгений Слесаренко
Автор

Евгений Слесаренко

Частный разработчик на Bitrix и WordPress. Пишу о том, как делать сайты и сервисы понятнее, сильнее визуально и спокойнее в поддержке.