Я выложил исходники своего ERP-проекта на GitHub и хочу честно рассказать, что это такое, зачем нужно и кому может пригодиться. Open ERP — это веб-приложение для складского учёта, торговых операций и финансового учёта в малом бизнесе. Написано на Python (FastAPI + SQLAlchemy), работает в браузере, данные хранит в SQLite или PostgreSQL.
Это не конкурент 1С. Это инструмент для тех, кому 1С избыточна, а Excel уже не справляется.
Зачем я её написал
Малый бизнес обычно начинает учёт в Excel. Таблицы копируются, теряются, расходятся между сотрудниками. Когда приходит второй склад или второй магазин — таблицы ломаются. Переходить на 1С дорого и сложно. Облачные решения (МойСклад, Бизнес.Ру) берут абонплату и не дают контроля над данными.
Open ERP решает конкретную задачу: один человек или небольшая команда могут вести склад, продажи, контрагентов и деньги в единой системе, на собственном сервере, без ежемесячных платежей.
Что внутри
Система построена по классической схеме: справочники, документы, регистры. Все данные хранятся в реляционной базе. Документы (поступления, продажи, перемещения) при проведении делают движения в регистрах (остатки товаров, взаиморасчёты, касса). Отчёты читают данные из регистров.
Справочники
- Организации — структура компаний
- Контрагенты — поставщики и покупатели
- Номенклатура — товары с SKU и единицами измерения
- Склады — точки хранения
- Валюты — мультивалютный учёт
- Счета денежных средств — касса, банк, по валюте
- Статьи денежных движений — для кассовых операций
- Типы цен — ценовые колонки
Документы
- Поступление товаров — приход от поставщика на склад
- Реализация — продажа со склада покупателю
- Перемещение — между складами
- Ордерное списание — корректировка остатков
- Заказ покупателя — резервирует товар под сделку
- Приходный кассовый ордер — поступление денег
- Расходный кассовый ордер — списание денег
- Банковские платежи — отдельно по расчётному счёту
Каждый документ имеет статус: черновик, проведён, отменён, помечен на удаление. Проведённый документ делает движения в регистрах. Отмена документа не делает обратные движения — она помечает документ отменённым, а его движения удаляются и пересчитываются.
Регистры и отчёты
Регистр — это таблица, которая копит движения от документов. Остаток на любую дату = начальный остаток + сумма движений. Система поддерживает два типа регистров: накопительные (остатки товаров, взаиморасчёты, касса) и информационные (цены, курсы валют).
Встроенные отчёты:
- Остатки товаров на складах
- Продажи за период (с группировкой)
- Взаиморасчёты с контрагентами
- Кассовые средства по счетам
- Оборотно-сальдовая ведомость по складу
- Платёжный календарь (планируемые поступления и списания)
- Незакрытые документы (что не оплачено)
- Акт сверки с контрагентом
Дашборд
На главной странице — сводка: остатки по складам, продажи за месяц, долг контрагентов, кассовые остатки, графики продаж (Chart.js). Один экран показывает состояние бизнеса.
Скриншоты интерфейса
Страница входа: обычная форма логина, bcrypt-хеширование паролей, cookie-сессии.

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

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

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

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

Архитектура
Бэкенд: 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 минут разберётесь, подходит ли вам. Если нет — удалили папку, и никаких следов. Если да — подняли на постоянный сервер и работаете.