Дата исследования: 2026-01-02
Версия: 2.0
Статус: Extended Research - Comprehensive
Фокус: Базовый уровень архитектуры, паттернов, компонентов
Комплексное исследование архитектурных паттернов трёх ведущих ERP-систем:
- Odoo — Open-source, гибкая, быстрое внедрение
- ERPNext — Open-source, на Frappe Framework, отличная кастомизация
- SAP Business One — Enterprise, мощная, масштабируемая
Исследование охватывает:
1. Модели данных и сущности
2. Модули и функциональность
3. UI паттерны и компоненты
4. Документы и рабочие процессы
5. Система прав доступа
6. Общие компоненты (отчёты, уведомления, API)
7. Сравнительные матрицы
Тип: Open-source ERP (Python + PostgreSQL)
Лицензия: LGPL-3.0
Архитектура: MVC (Model-View-Controller)
БД: PostgreSQL (полный контроль над данными)
API: JSON-RPC (deprecated в v19, удалится в v20)
Product Layer:
├── product.template # Основной шаблон товара
├── product.product # Варианты товара
├── product.category # Категории
├── mrp.bom # Спецификации товаров (BOM)
└── product.attribute # Атрибуты (цвет, размер и т.д.)
Sales Layer:
├── sale.order # Заказы продаж
├── sale.order.line # Строки заказов
├── res.partner # Клиенты и поставщики
├── crm.lead # Лиды
└── crm.opportunity # Сделки
Purchase Layer:
├── purchase.order # Заказы покупок
├── purchase.order.line # Строки заказов
├── purchase.requisition # Заявки на покупку
└── agreement.agreement # Соглашения с поставщиками
Inventory Layer:
├── stock.move # Движения товара
├── stock.move.line # Детали движений
├── stock.warehouse # Склады
├── stock.location # Локации (зоны)
├── stock.lot # Серии/Партии
├── stock.production.lot # Производственные партии
└── stock.quant # Реальные остатки
Accounting Layer:
├── account.account # План счетов
├── account.move # Журналы проводок
├── account.move.line # Строки проводок
├── account.invoice # Счета (счета-фактуры)
├── account.payment # Платежи
├── account.journal # Журналы учёта
├── account.tax # Налоги
└── account.analytic.line # Аналитические строки
Manufacturing Layer:
├── mrp.production # Заказы на производство
├── mrp.production.line # Строки производства
├── stock.picking # Требования комплектования
└── quality.check # Проверки качества
Document Management:
├── ir.attachment # Вложения (файлы, изображения)
├── ir.document # Документы
└── mail.message # Сообщения и коммуникация
Sales Flow:
sale.order → sale.order.line → product.product
↓ ↓ ↓
sale.order → res.partner product.template
↓ ↓
account.invoice product.category
Purchase Flow:
purchase.order → purchase.order.line → product.product
↓ ↓ ↓
res.partner product.uom stock.warehouse
Inventory Flow:
stock.picking → stock.move → stock.move.line → product.product
↓ ↓ ↓ ↓
stock.warehouse stock.lot stock.location stock.quant
Accounting Integration:
account.move → account.move.line → account.account
↓ ↓ ↓
account.journal account.tax account.analytic
# product.product
{
"id": Integer,
"name": Char,
"default_code": Char, # SKU/Артикул
"barcode": Char,
"product_template_id": Many2One,
"category_id": Many2One,
"type": Selection (product|service|consu), # Тип товара
"list_price": Float, # Цена продажи
"standard_price": Float, # Себестоимость
"cost_method": Selection (standard|fifo|average),
"taxes_id": Many2Many, # НДС и налоги
"supplier_taxes_id": Many2Many, # Налоги поставщика
"image_1920": Binary, # Изображение
"description": Text,
"seller_ids": One2Many, # Связь с поставщиками
"qty_available": Float, # Доступное кол-во
"virtual_available": Float, # Виртуальное кол-во
"incoming_qty": Float, # Ожидаемое поступление
"outgoing_qty": Float, # Ожидаемое отпуск
}
# sale.order
{
"id": Integer,
"name": Char, # Номер заказа
"partner_id": Many2One, # Клиент
"order_line": One2Many, # Строки заказа
"state": Selection (draft|sent|sale|done|cancel),
"date_order": Datetime,
"commitment_date": Datetime, # Дата поставки
"amount_total": Float, # Сумма всего
"amount_untaxed": Float, # Без налогов
"amount_tax": Float, # Налоги
"invoice_ids": Many2Many, # Счета
"picking_ids": One2Many, # Требования комплектования
"payment_term_id": Many2One,
"warehouse_id": Many2One,
"origin": Char, # Ссылка на источник (PO, лид)
"client_order_ref": Char, # Номер заказа клиента
"note": Text,
}
# account.move
{
"id": Integer,
"name": Char, # Номер документа
"move_type": Selection (
entry|out_invoice|in_invoice|
out_refund|in_refund|in_receipt|out_receipt
),
"partner_id": Many2One,
"journal_id": Many2One,
"date": Date,
"invoice_date": Date,
"due_date": Date,
"line_ids": One2Many, # Строки проводок
"amount_total": Float,
"amount_untaxed": Float,
"amount_tax": Float,
"amount_residual": Float, # Остаток к оплате
"state": Selection (draft|posted|cancel),
"invoice_origin": Char, # Ссылка (SO, PO)
}
# stock.move
{
"id": Integer,
"name": Char,
"product_id": Many2One,
"product_qty": Float, # Кол-во в исходной единице
"quantity_done": Float, # Выполнено
"uom_id": Many2One, # Единица измерения
"location_id": Many2One, # Откуда
"location_dest_id": Many2One, # Куда
"state": Selection (draft|waiting|confirmed|assigned|done|cancel),
"picking_id": Many2One,
"move_line_ids": One2Many, # Детальные строки
"origin": Char, # Источник (SO, PO)
}
| Модуль | Назначение | Зависимости | Компоненты |
|---|---|---|---|
| CRM | Управление клиентами и сделками | base | Leads, Opportunities, Phonecalls |
| Sales | Продажи товаров и услуг | account, stock | Quotations, Orders, Invoices |
| Purchase | Закупки у поставщиков | account, stock | RFQ, PO, Receipts |
| Inventory | Управление складом | stock, base | Transfers, Pickings, Locations |
| Manufacturing | MRP, производство | stock, account | Productions, BOM, Routings |
| Accounting | Финансовый учёт | account_base | GL, AR, AP, Journals |
| Invoicing | Счета-фактуры (базовая) | account, base | Invoices, Payments |
| Project | Управление проектами | sale, account | Projects, Tasks, Timesheets |
| HR | Управление сотрудниками | base | Employees, Payroll, Leaves |
| Website | E-commerce и сайт | web | Shop, Cart, Checkout |
| Email Marketing | Маркетинг по email | crm_base | Campaigns, Mass Mailings |
| Point of Sale | Кассовая система | stock, account | POS Orders, Sessions |
| Quality | Контроль качества | stock | Quality Checks, Alerts |
┌─────────────────────────────────────┐
│ BASE (Foundation) │
│ - Settings, Users, Companies │
│ - Document Management (ir.*) │
│ - Utilities │
└──────────────┬──────────────────────┘
│
┌──────────┼──────────┐
│ │ │
v v v
┌─────┐ ┌─────┐ ┌───────┐
│STOCK│ │ACCOUNT│ │CRM │
└────┬┘ └───┬──┘ └───┬──┘
│ │ │
└───┬───┴───┬───────┘
│ │
┌─────v────┐ │
│ SALES │◄─┘
└─────┬────┘
│
┌─────v────────┐
│ INVOICING │
│ (Accounting)│
└──────┬───────┘
│
┌──────v────────┐
│ PURCHASE │
│ (Receiving) │
└───────┬───────┘
│
┌───────v─────────┐
│ MANUFACTURING │
│ (MRP, BOM) │
└─────────────────┘
Параллельные модули:
- WEBSITE (e-commerce)
- PROJECT (PM)
- HR (Payroll)
- QUALITY (QA)
- POS (Retail)
# ir.actions.* — навигация и операции
ir.actions.act_window # Открытие форм/списков
ir.actions.server # Серверные действия
ir.actions.report # Отчёты
# ir.ui.* — UI элементы
ir.ui.view # Представления (XML)
ir.ui.menu # Меню
ir.ui.view.custom # Пользовательские представления
# ir.rule — бизнес правила
ir.rule # Record rules (доступ к записям)
# ir.model.* — метаинформация
ir.model.fields # Определение полей
ir.model.fields.selection # Selection values
ir.model.access # Права доступа
# ir.attachment — файлы и вложения
ir.attachment # Хранилище файлов (БД или файловая система)
# mail.* — коммуникация
mail.message # Сообщения (чат, комментарии)
mail.notification # Уведомления
mail.mail # Email
Основные документы (Transactional):
├── Sale Order (SO) → Invoice → Delivery → Payment
├── Purchase Order (PO) → Receipt → Invoice → Payment
├── Invoice / Refund
├── Delivery Note
├── Stock Transfer
├── Manufacturing Order
└── Project Quotation
Поддерживающие документы:
├── Bill of Materials (BOM)
├── Quality Checks
├── Expense Claims
└── Travel Requests
Технология: QWeb (Odoo XML template engine)
<!-- Пример template для счёта -->
<t t-name="account.report_invoice_document">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="doc">
<t t-call="web.internal_layout">
<div class="page">
<!-- Header -->
<h2 t-field="doc.name"/>
<!-- Customer Info -->
<div t-field="doc.partner_id"/>
<!-- Invoice Details -->
<table class="table">
<t t-foreach="doc.invoice_line_ids" t-as="line">
<tr>
<td t-field="line.product_id.name"/>
<td t-field="line.quantity"/>
<td t-field="line.price_unit"/>
<td t-field="line.price_subtotal"/>
</tr>
</t>
</table>
<!-- Totals -->
<div>
<strong t-field="doc.amount_total"/>
</div>
</div>
</t>
</t>
</t>
</t>
Процесс генерации:
1. User кликает "Print" или "Send by Email"
2. Odoo находит report action (ir.actions.report)
3. Рендерит QWeb template
4. Конвертирует HTML → PDF (wkhtmltopdf)
5. Сохраняет в ir.attachment или отправляет по email
1. Database Storage (по умолчанию):
- Хранится в таблице ir_attachment
- Поле: datas (Binary)
- Плюсы: резервные копии автоматичны
- Минусы: растёт размер БД
2. File System Storage:
- Папка: /opt/odoo/filestore/{db_name}/
- Минусы: нужно отдельно бэкапить
3. External Storage (S3, Azure и т.д.):
- Модули: attachment_s3, attachment_azure
- Конфиг: ir_attachment.location = 's3://bucket/...'
URL доступа: /web/content/{attachment_id}/
Odoo Studio позволяет создавать PDF reports без кода:
Reports → Create New Report
├── Blank Template
├── Drag & Drop Fields
├── Add Images/Logos
├── Configure Formatting
└── Preview & Test
Встроенные шаблоны:
- Invoice Template (account.report_invoice_document)
- Quotation Template (sale.report_quotation)
- PO Template (purchase.report_purchaseorder)
- Delivery Template (stock.report_picking)
1. List View
├── Таблица с записями
├── Фильтры (слева)
├── Поиск по всем полям
├── Групповка (Group By)
├── Сортировка
└── Bulk Actions (выделить несколько)
2. Form View
├── Основной способ редактирования
├── Вкладки (Notebook)
├── Группы полей (Group)
├── Статус-бар (state machine)
├── Action buttons в header
└── Related documents (one2many в form)
3. Pivot View (Cross-tabulation)
├── Аналитическая таблица
├── Свободная перестановка осей
├── Агрегация (сумма, среднее и т.д.)
└── Экспорт в Excel
4. Graph View
├── Столбчатые графики
├── Линейные графики
└── Круговые диаграммы
5. Kanban View
├── Карточки по этапам
├── Перетаскивание (drag-n-drop)
└── Типично для CRM, проектов
6. Calendar View
├── Календарь по датам
├── Для событий, встреч, сроков
└── Inline редактирование
7. Map View
├── Геолокация
└── Для партнёров, складов
8. Dashboard View
├── KPI cards
├── Charts
└── Real-time data
Home Dashboard
├── Recent Documents
├── Quick Access (Favorites)
├── Notifications & Messages
└── KPI Cards
Main Menu (Hamburger)
├── Sales
│ ├── Orders
│ ├── Customers
│ ├── Quotations
│ └── Invoices
├── Purchase
│ ├── Orders
│ ├── Vendors
│ └── Receipts
├── Inventory
│ ├── Transfers
│ ├── Pickings
│ └── Locations
├── Accounting
│ ├── Invoices
│ ├── Payments
│ └── Reports
└── ... (другие модули)
Breadcrumb Navigation:
[Module] > [List View] > [Record Name]
Report Types:
1. SQL Reports
- Custom SQL queries
- Stored as ir.actions.report
- Рендерятся как PDF/HTML
2. Business Reports
- Aging Analysis
- Sales Analysis
- Purchase Analysis
- Inventory Valuation
3. Dashboards
- KPI Cards (small metrics)
- Charts (pivot/graph views)
- Custom dashboards (no-code builder)
4. Financial Reports
- General Ledger
- Trial Balance
- Income Statement
- Balance Sheet
Тип: Open-source ERP (Python + Frappe Framework)
Лицензия: GNU GPL v3
Архитектура: MVC на базе Frappe
БД: MariaDB (MySQL совместимая)
API: JSON-RPC (Frappe REST API)
Фреймворк: Frappe (отдельный проект)
Product & Inventory:
├── Item # Товар (аналог product.product)
├── Item Variant # Варианты товара
├── Item Attribute # Атрибуты (цвет, размер)
├── Item Group # Категории
├── Bin # Остатки на складе (qty × warehouse)
├── Stock Entry # Движения товара (вручную)
├── Stock Ledger Entry # История движений
└── UOM Category # Единицы измерения
Selling:
├── Customer # Клиент
├── Sales Order # Заказ продажи
├── Sales Order Item # Строка заказа
├── Delivery Note # Накладная доставки
├── Sales Invoice # Счёт продажи
├── Sales Quotation # Коммерческое предложение
├── Quotation # (alias для Sales Quotation)
└── Lead # Лид
Buying:
├── Supplier # Поставщик
├── Purchase Order # Заказ на покупку
├── Purchase Order Item # Строка заказа
├── Purchase Receipt # Квитанция о приёме
├── Purchase Invoice # Счёт покупки
├── Material Request # Заявка на материал
├── Request for Quote # Запрос коммерческого предложения
└── Supplier Quotation # КП от поставщика
Manufacturing:
├── BOM (Bill of Materials) # Спецификация
├── BOM Item # Строка спецификации
├── Manufacturing Order # Заказ на производство
├── Production Plan # План производства
└── Quality Inspection # Проверка качества
Accounting:
├── Chart of Accounts # План счетов (шаблон)
├── Account # Счет (реальный)
├── Journal Entry # Журнальная запись
├── Journal Entry Detail # Строка записи
├── Payment # Платёж
├── Payment Entry # Запись платежа (новое)
├── Tax Rule # Правила налогов
├── Fiscal Year # Финансовый год
└── Cost Center # Центр затрат
Projects:
├── Project # Проект
├── Task # Задача
├── Timesheet # Табель учёта рабочего времени
├── Project Template # Шаблон проекта
└── Daily Work Summary # Ежедневный отчёт
HR:
├── Employee # Сотрудник
├── Department # Отдел
├── Designation # Должность
├── Attendance # Явка/Неявка
├── Salary Structure # Структура зарплаты
├── Salary Slip # Расчётный лист
└── Leave Application # Заявление на отпуск
Document Control:
├── File # Вложение (аналог ir.attachment)
├── Document Naming # Правила нумерации
└── Document Sharing # Обмен документами
DocType Relationships (Link Fields):
Sales Flow:
Sales Order
├─→ customer (Link to Customer)
├─→ items (Table with Link to Item)
│ └─→ item_code (Link to Item)
└─→ delivery_notes (Table showing linked Delivery Notes)
Purchase Flow:
Purchase Order
├─→ supplier (Link to Supplier)
├─→ items (Table with Link to Item)
│ └─→ item_code (Link to Item)
└─→ purchase_receipts (Read-only table)
Accounting Integration:
Journal Entry
├─→ journal_entry_details (Table)
│ ├─→ account (Link to Account)
│ ├─→ cost_center (Link to Cost Center)
│ └─→ project (Link to Project)
Manufacturing:
Manufacturing Order
├─→ item_to_manufacture (Link to Item)
├─→ bom_no (Link to BOM)
├─→ warehouse (Link to Warehouse)
└─→ operations (Table showing Routing steps)
# Item (товар)
{
"name": String, # Item Code (PK)
"item_name": String, # Название товара
"item_group": Link, # Категория
"item_code": String, # SKU
"description": Text,
"item_type": Select, # Product / Service / Template / Variant
"status": Select, # Active / Disabled
"uom": Link, # Единица измерения
"weight_per_unit": Float,
"weight_uom": Link,
"standard_rate": Float, # Себестоимость
"valuation_method": Select, # FIFO / Moving Average / Manual
"opening_stock": Float, # Начальный остаток
"image": Attach, # Изображение
"attributes": Table, # Варианты (если Template)
"item_variants": Table, # Связанные варианты
"safety_stock": Float, # Минимальный остаток
"reorder_level": Float, # Уровень переупорядочивания
"reorder_qty": Float, # Кол-во при переупорядочивании
}
# Sales Order (заказ продажи)
{
"name": String, # Order ID
"customer": Link,
"customer_name": String,
"order_date": Date,
"delivery_date": Date,
"items": Table, # sales_order_item records
"total_qty": Float,
"total": Float, # Сумма без налогов
"grand_total": Float, # Сумма с налогами
"status": Select, # Draft / Submitted / Fulfilled / Cancelled
"docstatus": Select, # 0=Draft, 1=Submitted, 2=Cancelled
"outstanding_amount": Float, # Остаток к оплате
"delivery_notes": Table, # Связанные Delivery Notes
"billing_address": Link,
"shipping_address": Link,
"remarks": Text,
}
# Journal Entry (проводка)
{
"name": String, # JE ID
"posting_date": Date,
"fiscal_year": Link,
"voucher_type": Select, # Journal Entry / Credit Note / Debit Note
"journal_entry_details": Table,# Journal Entry Detail records
"total_debit": Float,
"total_credit": Float,
"reference_no": String,
"reference_date": Date,
"docstatus": Select, # 0=Draft, 1=Submitted, 2=Cancelled
}
| DocType Families | Модуль | Описание |
|---|---|---|
| Selling | selling | Sales Order, Quotation, Customer |
| Buying | buying | Purchase Order, Supplier, Supplier Quotation |
| Stock | stock | Item, Warehouse, Stock Entry, Bin |
| Manufacturing | manufacturing | BOM, Manufacturing Order, Production Plan |
| Accounting | accounts | Journal Entry, Chart of Accounts, Fiscal Year |
| HR | hr | Employee, Salary Slip, Attendance |
| Projects | projects | Project, Task, Timesheet |
| CRM | crm | Lead, Opportunity, Campaign |
| Website | website | Website, Web Page, E-commerce Settings |
| Email Marketing | email_marketing | Email Campaign, Email Group |
| Setup | setup | Company, Warehouse, Department |
Frappe Framework (Core)
├── User Management
├── Permissions
├── File Storage
├── Email/SMS
└── API (JSON-RPC)
│
├─→ Setup Module
│ ├── Company
│ ├── Warehouse
│ └── Chart of Accounts Template
│
├─→ Selling Module
│ ├── Customer
│ ├── Lead
│ ├── Sales Order ──┐
│ ├── Quotation │
│ └── Sales Invoice │
│ │
├─→ Stock Module ◄────┘
│ ├── Item
│ ├── Bin (Inventory Qty)
│ ├── Stock Entry
│ ├── Delivery Note
│ └── Warehouse
│
├─→ Buying Module
│ ├── Supplier
│ ├── Purchase Order ──┐
│ ├── Material Request │
│ └── Purchase Invoice │
│ │
├─→ Manufacturing ◄──────┘
│ ├── BOM
│ ├── Manufacturing Order
│ └── Work Order
│
└─→ Accounting Module
├── Account
├── Journal Entry
├── Payment Entry
├── Cost Center
└── Tax Rule
# Link Field — связь с другой DocType
{
"fieldname": "customer",
"fieldtype": "Link",
"options": "Customer", # Имя DocType
}
# Table Field — таблица с child records
{
"fieldname": "items",
"fieldtype": "Table",
"options": "Sales Order Item", # Имя child DocType
}
# Select Field — выпадающий список
{
"fieldname": "status",
"fieldtype": "Select",
"options": ["Draft", "Submitted", "Cancelled"],
}
# Workflow State — State Machine
{
"fieldname": "workflow_state",
"fieldtype": "Select",
"options": ["Created", "Under Review", "Approved", "Rejected"],
}
# Auto Increment — автоматическая нумерация
document_naming_series = "SOXX-{fiscal_year}-" # SO20260001
# Document Linking
{
"document": "Sales Order",
"linked_to": ["Delivery Note", "Sales Invoice"],
}
Draft (0)
↓
Submitted (1) ← Валидация, расчёт налогов, создание GL entries
↓
Processing ← Создание связанных документов (Delivery, Invoice)
↓
Completed ← Все связанные документы завершены
↓
Cancelled (2) ← Откат GL entries
State Workflow (Custom):
Draft → [Approval] → Approved → [Execution] → Completed
↓
Rejected
Технология: HTML template (Jinja2) + wkhtmltopdf
<!-- /app/selling/doctype/sales_order/sales_order.html -->
{% extends "frappe/templates/print_formats/standard.html" %}
{% block content %}
<div class="print-format">
<h2>{{ doc.name }}</h2>
<table>
<tr>
<th>Item Code</th>
<th>Item Name</th>
<th>Qty</th>
<th>Rate</th>
<th>Amount</th>
</tr>
{% for item in doc.items %}
<tr>
<td>{{ item.item_code }}</td>
<td>{{ item.item_name }}</td>
<td>{{ item.qty }}</td>
<td>{{ item.rate }}</td>
<td>{{ item.amount }}</td>
</tr>
{% endfor %}
</table>
<div class="totals">
<p>Total: {{ doc.total }}</p>
<p>Grand Total: {{ doc.grand_total }}</p>
</div>
</div>
{% endblock %}
Способы генерации:
1. Built-in Print: Menu → Print или Preview
2. Email: Send → выбрать template → автоматически PDF + email
3. API: /api/method/frappe.client.get_pdf
4. Автоматическое: Workflow trigger при Submit
1. Database Storage:
- Таблица: file
- Содержит: путь и метаинформацию
- Данные: хранятся в файловой системе
2. File System:
- Папка: /home/frappe/frappe-bench/sites/{site}/private/files/
- Структура: YYYY/MM/filename
3. Private vs Public:
- Public: /public/files/ (доступен без auth)
- Private: /private/files/ (требует auth)
URL доступ:
- Public: /files/my-document.pdf
- Private: /api/method/frappe.desk.form.utils.get_file/{file_id}
Types:
1. Standard Format
- Default Frappe template
- Рендерится автоматически
2. Custom Format (HTML)
- Пользовательский HTML
- Использует Jinja2 templating
- Доступ к полям через {{ doc.fieldname }}
3. Print Format Designer (UI)
- Drag & Drop редактор
- Add fields, images, tables
- Без кода
Configuration:
- Print Format (DocType → Print Formats)
- Customize Layout (Settings → Customize Form)
- Letter Head (система брендирования)
1. List View
- Таблица с фильтрами слева
- Search по всем полям
- Group By, Sort, Filter
- Bulk Actions
- Custom Filters (сохранённые)
2. Form View
- Основной интерфейс редактирования
- Вкладки (Tabs)
- Sections (Collapsible groups)
- Timeline (Комментарии, история)
- Activity (Кто когда менял)
- Workflow State (визуальный статус)
3. Report View
- SQL-based reports
- Dynamic filtering
- Drill-down (клик → детали)
- Export (CSV, Excel)
4. Dashboard
- Dashboard Charts (Line, Bar, Pie)
- Cards with metrics
- Customizable (drag-drop)
5. Kanban Board (v13+)
- Card-based view
- Column = Status/Stage
- Drag-drop reordering
6. Gantt Chart (v13+)
- Timeline для проектов
- Зависимости между задачами
Home (Desk Home)
├── Recent Documents
├── Quick Links
├── Notifications
└── Assigned Tasks
Sidebar (Fixed):
├── Module List (по имени)
│ └── [Awesome Bar] ← Быстрый поиск
├── Favorites (закреплённые)
├── Shortcuts (custom)
└── Workspace (customizable, v13+)
Form Header:
[Back] [Home] [Module Name] > [List Name] > [Record Name]
Workspace = Customizable dashboard for module
Components:
- Charts (Dashboard Charts)
- Quick Entry (Short form)
- Links (To related doctypes)
- Shortcuts (To common operations)
- Reports (Custom reports)
Example (Selling Workspace):
┌──────────────────────────────────┐
│ Sales Overview │
├──────────────────────────────────┤
│ [Orders This Month] [Revenue YTD]│
│ │
│ Quick Entry: [ Create SO ] │
│ │
│ Related: │
│ • Sales Orders │
│ • Customers │
│ • Quotations │
│ • Invoices │
└──────────────────────────────────┘
Report Types:
1. Query Report
- SQL query + Frappe format
- Фильтры = SELECT параметры
- Результат = Таблица
@frappe.frappe.decorators.report
def execute(filters):
data = frappe.db.sql("""
SELECT so.name, so.customer, so.grand_total
FROM `tabSales Order` so
WHERE so.status = "Submitted"
""")
return ["name", "customer", "grand_total"], data
2. Script Report
- Python code для сложной логики
- Может вызывать API, обрабатывать данные
3. Dashboard
- Наглядные карточки с метриками
- Charts из Query Reports
- Real-time (auto-refresh)
4. Business Intelligence
- Integration с Power BI, Tableau
- Frappe Analytics (встроенная)
Тип: Enterprise ERP (Proprietary, SAP)
Архитектура: 3-tier (Presentation, Application, Database)
БД: SAP HANA (in-memory database)
Платформа: SAP NetWeaver, ABAP/Java
UI Framework: SAP Fiori (modern responsive design)
API: OData, REST
SAP Data Dictionary Tables:
Procurement (MM):
├── MARA # Material Master
├── MARD # Material Warehouse Stock
├── MARC # Material Plant Data
├── EKKO # Purchase Order Header
├── EKPO # Purchase Order Item
├── EKET # Purchase Order Schedule Line
├── MIGO (MSEG) # Goods Movement
├── MIKEN # Inventory Change
└── EBAN # Material Requisition (request)
Sales & Distribution (SD):
├── VBAK # Sales Order Header
├── VBAP # Sales Order Item
├── VBEP # Sales Order Schedule Line
├── VBRK # Invoice Header
├── VBRP # Invoice Item
├── LIKP # Delivery Header
├── LIPS # Delivery Item
├── KNVV # Customer Sales Area Data
└── KNA1 # Customer Master
Financial Accounting (FI):
├── BKPF # Accounting Document Header
├── BSEG # Accounting Document Line Item
├── BSIS # Open Items (Subledger)
├── BSAS # Cleared Items
├── SKA1 # Chart of Accounts
├── SKAT # Chart of Accounts (Text)
├── SAKNR # GL Account Master
├── FAGL_BSID # Open Items (New GL)
└── T001 # Company Code
Controlling (CO):
├── COEP # Cost Element Actual Postings
├── COSP # CO-PA: Sales & Profit Analysis
├── COST # Cost Object Master Data
├── COSS # Cost Object Postings
├── COSTCO # Cost Center Master
├── COSTHIER # Cost Center Hierarchy
└── CE_COSE # Cost Allocation
Manufacturing (PP):
├── MKAL # BOMs (Header)
├── MKAL_D # BOM Items
├── PLPO # Routing Master
├── RESB # Reservation (BOM explosion)
├── AFKO # Production Order Header
├── AFPO # Production Order Item
├── AFRU # Production Order Confirmation
└── STPO # Task List / Routing
Sales Flow:
VBAK (Sales Order)
├─→ VBAP (Order Items)
│ ├─→ MARA (Material)
│ └─→ MVKE (Material Sales)
├─→ KNA1 (Customer)
└─→ VBEP (Schedule Lines)
↓
LIKP (Delivery)
↓
LIPS (Delivery Items)
↓
VBRK (Invoice)
↓
VBRP (Invoice Items)
Procurement Flow:
EKKO (Purchase Order)
├─→ EKPO (PO Items)
│ ├─→ MARA (Material)
│ └─→ MARC (Plant Data)
├─→ LFA1 (Vendor)
└─→ EKET (Schedule Lines)
↓
MIGO (GR/GC — Good Receipt)
↓
MIKEN (Inventory Change)
↓
EKKO → Billing
Accounting Integration:
BKPF (Document Header)
├─→ BSEG (Line Items)
│ ├─→ SKAT (GL Account)
│ ├─→ SAKNR (Account Master)
│ └─→ COSTCO (Cost Center)
├─→ VBRK (Invoice Header)
└─→ BSIS/BSAS (Open/Cleared Items)
-- MARA: Material Master (Main)
SELECT
MATNR, -- Material Number (PK)
MAKTX, -- Material Description
MEINS, -- Unit of Measure
BISMT, -- Old Material Number
MTART, -- Material Type (FERT=Final, HALB=Semi)
SPART, -- Division
KATR, -- Material Category
STPRS, -- Standard Price
PSTAT, -- Status (ACTIV=Active)
FERTH, -- Authorization Group
EANNR -- EAN (Barcode)
FROM MARA;
-- VBAK: Sales Order Header
SELECT
VBELN, -- Sales Document (Order) Number (PK)
VBTYP, -- Document Type (TA=Sales Order)
KUNNR, -- Sold-to Party (Customer)
WAERK, -- Currency
NETWR, -- Net Value of Sales Order
KUNAG, -- Bill-to Party
VBDAT, -- Document Date
AUDAT, -- Entry Date
VKORG, -- Sales Organization
VTWEG, -- Distribution Channel
SPART, -- Division
VKBUR, -- Sales Office
VKGRP, -- Sales Group
AUART, -- Sales Document Type
ERDATUM -- Latest Possible Delivery Date
FROM VBAK;
-- BKPF: Financial Accounting Document
SELECT
BUKRS, -- Company Code
BLAART, -- Document Type
BLDAT, -- Document Date
BUDAT, -- Posting Date
XBLNR, -- Reference Document Number
BKTXT, -- Document Header Text
WAERK, -- Currency
DMBTR, -- Document Amount (in currency)
HWBAS -- Amount in Local Currency
FROM BKPF;
| Модуль | Код | Функция | Компоненты |
|---|---|---|---|
| Procurement | MM | Управление материалами | Purchase Order, GR/GC, Inventory |
| Sales | SD | Продажи и доставка | Sales Order, Delivery, Invoice |
| Production | PP | Производство | BOM, Manufacturing Order, Routing |
| Finance | FI | Финансовый учёт | GL, AP, AR, Journals |
| Controlling | CO | Управление затратами | Cost Centers, Cost Objects, Profit Center |
| HR | HR/HCM | Управление персоналом | Employees, Payroll, Recruitment |
| Asset Management | AM | Основные средства | Asset Master, Depreciation, Maintenance |
| Project System | PS | Управление проектами | Projects, Work Breakdown, Costing |
| Supply Chain | SCM | Цепь поставок | Planning, Demand Forecasting |
| Quality Management | QM | Контроль качества | Inspection Lots, Defects, Notifications |
┌─────────────────────────────────────────────────┐
│ SAP S/4HANA (Enterprise Suite) │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Finance │ │ Supply │ │ Human │ │
│ │ (FI/CO) │ │ Chain │ │ Capital │ │
│ │ │ │ (MM/SD) │ │ (HR) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └───────────┬───┴──────────────┘ │
│ │ │
│ ┌───────v────────┐ │
│ │ Manufacturing │ │
│ │ (PP) │ │
│ └────────────────┘ │
│ │
│ Real-time Data: HANA In-Memory Database │
│ APIs: OData, BAPI, RFC │
│ │
└─────────────────────────────────────────────────┘
Framework Elements:
1. Tables (DB-independent layer):
- MARA, VBAK, EKKO — Main masters
- Структурированы иерархически (Header + Items)
2. Standard Objects (ABAP):
- BAPI (Business API) — Функции для вызова
- RFC (Remote Function Call) — IPC
- WebService (SOAP/REST)
3. Transactional Objects:
- Dialog Transactions (SE80)
- Report transactions
- Batch processes
4. Master Data:
- Material Master (MM02, MM03)
- Customer Master (VD01, VD02)
- Vendor Master (MK01, MK02)
- Chart of Accounts (FSP0, FSP1)
Transactional Documents:
1. Purchase Documents:
├── Purchase Requisition (EBAN)
├── RFQ (ANFK)
├── Quotation (ANGEBOT)
├── Purchase Order (EKKO/EKPO)
├── Goods Receipt (MKPF/MSEG)
├── Invoice Receipt (RBKP)
└── Debit/Credit Memo (RBKP)
2. Sales Documents:
├── Sales Quotation (VBAK type)
├── Sales Order (VBAK)
├── Delivery Document (LIKP/LIPS)
├── Sales Invoice (VBRK/VBRP)
├── Debit/Credit Memo (VBRK)
└── Returns (VBRK with type)
3. Accounting Documents:
├── Journal Entry (BKPF/BSEG)
├── Posting (automatic from transactional)
└── Reversal Document (BKPF)
4. Manufacturing:
├── Material BOM (MKAL/MKAL_D)
├── Routing (PLPO)
├── Production Order (AFKO)
├── Goods Issue (MIGO)
├── Confirmation (AFRU)
└── Cost Report
Технология: SAP Print Composer + ABAP Reporting
* Типовой report для печати документов
REPORT z_print_sales_order.
SELECT-OPTIONS: s_vbeln FOR vbak-vbeln.
PARAMETER: p_prt TYPE c VALUE 'X'. "Print?
START-OF-SELECTION.
SELECT * FROM vbak WHERE vbeln IN s_vbeln.
" Retrieve sales order header and items
SELECT * FROM vbap WHERE vbeln = vbak-vbeln.
" Format data for printing
PERFORM format_output.
ENDSELECT.
ENDSELECT.
IF p_prt = 'X'.
" Send to printer/PDF
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = '80'
IMPORTING
bin_file = l_pdf_data
TABLES
otf = l_itab_otf.
ENDIF.
Smart Forms / Adobe Forms:
- Drag-drop designer для документов
- Can output to PDF, print, email
- Интеграция с TransactionTypes
1. Archive (Dokumentenverwaltung):
- Table: TOABO (Archive Objects)
- Can store original documents (PDF, Word)
- Linked to transaction (e.g., VBRK)
2. Document Retention:
- Archiving lifecycle
- Retention rules (по типу документа)
- Legal compliance
3. Content Repository (SAP DMS):
- DMDOCTYPE (Document Type)
- DMDOCSTATUS (Status)
- Version control
- Check-in/Check-out
4. External Systems:
- Integration with SharePoint, OneDrive
- Document linking via URL
Methods:
1. Smart Forms (SE60)
- Graphical designer
- Data binding to tables
- Complex layouts
2. SAPSCRIPT (SE61)
- Legacy (still supported)
- Text markup language
3. Adobe Interactive Forms (SFP)
- PDF forms
- Fill from data
- Digital signatures
4. Report Builder (SE38, ALV)
- Listing (простой отчёт)
- ALV Grid (продвинутая таблица)
- Export to Excel/PDF
5. Fiori Reports (Analytical)
- OData based
- Interactive dashboards
- Real-time data
SAP Fiori = Modern UX Framework for S/4HANA
Design Principles:
1. Role-based — Интерфейс под конкретную роль
2. Responsive — Работает на desktop/tablet/mobile
3. Simplified — Только нужные элементы
4. Unified — Одинаковый дизайн во всех приложениях
App Types:
1. Transactional Apps (SAP Fiori Elements)
- Master-Detail view
- Create/Edit/Delete forms
- Example: Create Sales Order, Manage Vendor
2. Analytical Apps (Fact Sheets)
- KPIs, charts
- Drill-down capabilities
- Example: Financial Statements, Sales Analysis
3. Fact Sheet Apps
- Single record view
- Related data cards
- Example: Customer Overview, Material Master
UI Components:
├── List
│ └── Multi-select, sort, filter, export
├── Form
│ ├── Editable fields
│ ├── Sections (collapsible)
│ └── Related objects (cards)
├── Chart
│ ├── Line, Bar, Pie, Scatter
│ └── Drill-down
├── Table (ALV)
│ ├── Sorting, filtering
│ ├── Aggregation
│ └── Column selection
└── Tiles (Launchpad)
└── Navigation to apps/transactions
SAP Fiori Launchpad = Entry point
Structure:
┌──────────────────────────────────────────┐
│ [Search] [Notifications] [User Menu] │
├──────────────────────────────────────────┤
│ Role: Finance Manager │
│ │
│ [Daily Summary] [Open Invoices] │
│ [Cash Position] [Payment Due] │
│ [Reports] [Create Journal Entry] │
│ │
│ Recent Transactions: │
│ • Created SO#1001234 today │
│ • Posted GR for PO#5000001 │
│ • Approved Invoice #10001 │
│ │
└──────────────────────────────────────────┘
Analytics in S/4HANA:
1. Embedded Analytics
- Real-time KPIs in transactional apps
- Powered by HANA (in-memory)
- Automatic aggregation
2. SAP Analytics Cloud
- Interactive dashboards
- Linked to S/4HANA models
- Forecasting, what-if analysis
3. Query Designer (BEx)
- Create custom queries
- Reuse for reports
4. Reports (Standard):
- Sales Analysis (SD)
- Purchase Analysis (MM)
- Profitability Analysis (CO)
- General Ledger (FI)
Тип: Cloud ERP (Microsoft SaaS)
Версии:
- Dynamics 365 Customer Engagement (CRM)
- Dynamics 365 Finance & Operations (ERP)
Архитектура: Cloud-native (Azure), Multi-tenant
БД: SQL Server (Azure SQL)
Platform: .NET (C#), Common Data Model
API: REST, OData, PowerPlatform
Finance & Operations Entities:
Procurement:
├── Vendor (Поставщик)
├── Vendor Invoice (Счёт поставщика)
├── Purchase Order (Заказ на покупку)
├── Purchase Order Line
├── Vendor Payment
├── Purchase Requisition
├── Material Receipt
└── Purchase Agreement
Sales & Distribution:
├── Customer (Клиент)
├── Sales Order (Заказ продажи)
├── Sales Order Line
├── Sales Invoice
├── Sales Quote
├── Customer Payment
├── Packing Slip (Упаковочный лист)
├── Return Order
└── Commission
Inventory & Warehouse:
├── Item (Product Master)
├── Item Variant
├── Item Category
├── Warehouse (Site)
├── Warehouse Location
├── Inventory Movement
├── Inventory Adjustment
├── Cycle Count
├── Transfer Order
└── Quarantine Order
General Ledger (Accounting):
├── Chart of Accounts
├── Ledger Account
├── Journal Entry
├── Journal Line
├── Ledger Transaction
├── GL Account (Main Account)
├── Financial Dimension
├── Cost Center
├── Department
└── Project
Fixed Assets:
├── Asset Category
├── Fixed Asset Master
├── Asset Depreciation Schedule
├── Asset Adjustment
└── Accumulated Depreciation
Project Management:
├── Project
├── Project Task
├── Project Resource
├── Project Estimate
├── Project Forecast
├── Project Actuals (Time, Cost)
└── Project Invoice
Manufacturing:
├── Bill of Materials (BOM)
├── BOM Line
├── Routing
├── Routing Operation
├── Production Order
├── Production Line
├── Job Card (Time tracking)
├── Scrap Registration
└── Co-product/By-product
Common Data Model (CDM) Links:
Sales Flow:
Sales Order
├─→ customer (Link to Customer)
├─→ lines (1:N to Sales Order Line)
│ ├─→ product (Link to Item/Product)
│ └─→ quantity, price, extended amount
├─→ invoices (1:N to Sales Invoice)
│ └─→ invoice lines
├─→ shipments (1:N to Packing Slip)
└─→ related documents (JSON list)
Purchase Flow:
Purchase Order
├─→ vendor (Link to Vendor)
├─→ lines (1:N to Purchase Order Line)
│ ├─→ item (Link to Item/Product)
│ └─→ quantity, unit price, total
├─→ receipts (1:N to Material Receipt)
├─→ invoices (1:N to Vendor Invoice)
└─→ payments (1:N to Vendor Payment)
Accounting Integration:
Journal Entry
├─→ lines (1:N to Journal Line)
│ ├─→ account (Link to Ledger Account)
│ ├─→ debit/credit amount
│ ├─→ financial dimension (cost center, etc)
│ └─→ reference (link to transactional doc)
└─→ state (Draft → Posted → Settled)
Manufacturing:
Production Order
├─→ item_to_produce (Link to Item)
├─→ quantity_ordered
├─→ bom_id (Link to BOM)
├─→ schedule (start/end date)
├─→ production_lines (1:N)
│ ├─→ item (Component)
│ ├─→ quantity_required
│ └─→ scheduled_date
├─→ job_cards (1:N)
│ ├─→ operation
│ ├─→ resource
│ └─→ hours_worked
└─→ finished_goods_transaction (Link to Inventory)
-- Customer (Customer Master)
{
"customerId": GUID (PK),
"customerName": String,
"customerGroup": String, # Тип клиента
"address": String,
"city": String,
"state": String,
"zipCode": String,
"country": String,
"phone": String,
"email": String,
"creditLimit": Decimal, # Кредитный лимит
"paymentTerms": Link, # Условия платежа
"salesTerritory": String, # Терриория продаж
"salesPerson": Link, # Ответственный менеджер
"priceGroup": String, # Ценовая группа
"currency": String,
"taxExemptNumber": String, # Налоговый номер
"status": Enum, # Active / Inactive / Suspended
}
-- Sales Order (SO Header)
{
"salesOrderId": GUID (PK),
"salesOrderNumber": String, # Номер SO
"customerId": GUID, # Link to Customer
"orderDate": DateTime,
"requestedDeliveryDate": DateTime,
"promisedDeliveryDate": DateTime,
"subtotal": Decimal, # Без налогов
"taxTotal": Decimal,
"grandTotal": Decimal,
"currency": String,
"paymentTermsId": GUID,
"warehouseId": GUID, # Склад отправки
"deliveryAddressId": GUID,
"billingAddressId": GUID,
"status": Enum, # Open / Invoiced / Cancelled / Shipped
"lines": Array of SalesOrderLine,
"shippingMethod": String,
"trackingNumber": String,
"salesPersonId": GUID,
"notes": String,
}
-- Journal Entry (Accounting)
{
"journalId": GUID (PK),
"journalName": String, # Номер проводки
"journalType": Enum, # General / AP / AR / Bank
"postingDate": Date,
"description": String,
"status": Enum, # Draft / Posted / Cancelled
"lines": Array of JournalLine,
"totalDebit": Decimal,
"totalCredit": Decimal,
}
-- Journal Line
{
"lineId": GUID (PK),
"journalId": GUID, # Parent Journal
"accountId": GUID, # Link to Account
"description": String,
"debit": Decimal,
"credit": Decimal,
"dimension1": String, # Financial Dimension (Cost Center)
"dimension2": String, # Financial Dimension (Department)
"referenceDocument": String, # Link to transaction (SO, PO)
"lineNumber": Int,
}
| Модуль | Назначение | Компоненты |
|---|---|---|
| Sales | Управление продажами | Quote, SO, Invoice, Returns |
| Purchasing | Управление закупками | RFQ, PO, Receipt, Invoice |
| Inventory | Управление складом | Item, Warehouse, Counting, Transfers |
| General Ledger | Бухгалтерия | GL, AR, AP, Journal Entry |
| Accounts Payable | Счета поставщиков | Invoice, Payment, Aging |
| Accounts Receivable | Счета клиентов | Invoice, Payment, Collection |
| Fixed Assets | Основные средства | Asset Master, Depreciation |
| Project Management | Управление проектами | Project, Task, Resource, Invoice |
| Manufacturing | Производство | BOM, Routing, Production Order |
| Quality Management | Контроль качества | Inspection, Non-Conformance |
| Human Resources | Управление персоналом | Employee, Payroll, Recruitment |
| Cost Accounting | Управление затратами | Cost Center, Cost Allocation |
Dynamics 365 Module Architecture:
Finance & Operations Module Hierarchy:
┌──────────────────────────────────────┐
│ Settings & Administration │
│ (Company, Legal Entity, Fiscal Year)│
└──────────────────────────────────────┘
│
┌──────┼──────┐
│ │ │
v v v
┌────┐ ┌────┐ ┌────────┐
│Core│ │GL │ │Project │
│Setup│ │Fi │ │Acct │
└──┬─┘ └┬───┘ └───┬────┘
│ │ │
│ └──────┬──┘
│ │
v v
┌──────┐ ┌─────────┐
│AR/AP │ │Journal │
│ │ │Entry │
└──┬───┘ └────┬────┘
│ │
v v
┌──────┐ ┌──────────┐
│Sales │ │Inventory │
│ │ │Movement │
└──┬───┘ └────┬─────┘
│ │
v v
┌──────┐ ┌──────────┐
│Buying│ │Purchase │
│ │ │Movement │
└──────┘ └──────────┘
Каждый модуль базируется на CDM (Common Data Model)
Power Platform Components:
1. Power Apps (Модельные приложения)
- Canvas Apps (UI-driven)
- Model-driven Apps (Data-driven)
- Порталы (Customer/Vendor portals)
2. Power Automate (Workflow/RPA)
- Cloud Flows
- Desktop Flows
- Business Process Flows
3. Power BI (Analytics)
- Reports
- Dashboards
- Paginated Reports
4. Virtual Tables
- Data virtualization
- External data without replication
5. Custom Tables & Fields
- Extend CDM
- Custom attributes
- Relationships
6. Security & Roles
- Role-based access
- Field-level security
- Organization units
Core Transactional Documents:
1. Sales Documents:
├── Sales Quotation
├── Sales Order
├── Packing Slip
├── Sales Invoice
├── Free Text Invoice
├── Return Order
├── Credit Memo
└── Debit Memo
2. Purchase Documents:
├── Request for Quote (RFQ)
├── Purchase Order
├── Product Receipt
├── Invoice Register
├── Vendor Invoice
├── Vendor Payment
├── Purchase Credit Memo
└── Debit Memo
3. Accounting Documents:
├── Journal Entry
├── Ledger Settlement
├── Cost Allocation
└── Financial Report
4. Manufacturing:
├── Bill of Materials
├── Production Order
├── Kanban
├── Batch Order
└── Backflush Report
5. Other:
├── Quality Order
├── Non-Conformance Report
├── Project Proposal
└── Timesheet
Технология: Reporting Services (SSRS) + Word Templates
// Пример: Создание PDF для Sales Invoice
public class SalesInvoicePrint
{
public void GeneratePDF(SalesInvoice invoice)
{
// 1. Select template
var template = GetTemplate("SalesInvoice"); // Word template
// 2. Bind data
var data = new
{
invoice.SalesOrderId,
invoice.CustomerName,
invoice.InvoiceDate,
invoice.Amount,
invoice.Lines, // Invoice lines
};
// 3. Render to PDF
var pdfBytes = RenderToPdf(template, data);
// 4. Save or send
SaveToSharePoint(invoice.Id, pdfBytes);
SendEmail(invoice.CustomerEmail, pdfBytes);
}
}
Методы генерации:
Built-in PDF Export:
- Report menu → Export → PDF
- Использует SSRS (SQL Server Reporting Services)
Word Templates:
- Create from Dynamics
- Map fields to template
- Generate on-demand
Electronic Invoicing:
- Automatic e-invoice generation
- Compliant formats (UBL, CII, etc.)
- Submission to tax authority
Power Automate:
- Trigger PDF generation
- Send via email
- Archive to SharePoint
Document Storage Options:
1. SharePoint Integration
- Default: Document Management > [Entity]
- Folder structure: /[Entity Type]/[Entity Name]/
- Versions: Automatic versioning
- Retention: Policies configured
URL: https://[tenant].sharepoint.com/sites/[site]/
Shared Documents/Sales Orders/SO-001234/
2. Dataverse (Cloud Storage)
- Attachments table
- Limited to ~100MB per file
- Good for small documents
3. Azure Blob Storage
- External storage
- Large files (GB)
- Custom implementation
4. Document Lifecycle
- Draft → Submitted → Posted → Archived
- Retention rules per document type
- eDiscovery compliance
Reporting Options:
1. Dynamics Reports (SSRS)
- SQL Server Reporting Services
- Parameterized queries
- Multi-format output (PDF, Excel, Word)
2. Power BI Reports
- Interactive dashboards
- Real-time data
- Embed in apps
3. Financial Reporting
- Report Designer
- Account structures
- Multi-company reporting
4. Electronic Reporting (ER)
- Compliance reports
- Export formats (XML, JSON, CSV)
- Tax reports, e-invoices
5. Paginated Reports
- Complex layouts
- Subtotals, grouping
- Conditional formatting
Dynamics 365 Modern Interface:
┌──────────────────────────────────────────────────┐
│ [Sitemap] [Search] [Command] [User Profile] │
├──────────────────────────────────────────────────┤
│ │
│ [Sales] > [Sales Orders] │
│ │
│ List View (Grid): │
│ ┌──────────────────────────────────────────────┐│
│ │ SO# | Customer | Amount | Status | Date ││
│ │-----|----------|--------|--------|----------││
│ │SO01 │ Acme Inc │ $5000 │ Open │ 1/1/2026││
│ │SO02 │ Widget Co│ $2500 │ Shipped│ 1/2/2026││
│ └──────────────────────────────────────────────┘│
│
│ [Create] [Delete] [Export to Excel]
│ │
└──────────────────────────────────────────────────┘
View Types:
1. Grid/List View
├── Sortable columns
├── Filter & Search
├── Grouping
├── Multi-select
├── Export to Excel
└── Refresh
2. Form View
├── Editable fields
├── Tabs
├── Sections (collapsible)
├── Related records (sub-grids)
├── Timeline (activity feed)
├── Notes & files
└── Business process flow (BPF)
3. Business Process Flow (BPF)
├── Guided process steps
├── Stages (e.g., Qualify → Develop → Propose → Close)
├── Progress tracking
└── Conditional logic
4. Canvas Apps (Custom UI)
├── Responsive design
├── Custom controls
├── Mobile-first
└── Power Fx formula language
5. Dashboards
├── KPI cards
├── Charts (Line, Bar, Pie)
├── Grids
└── iFrames (embedded content)
Navigation Structure:
Sitemap (Left Sidebar):
├── Sales
│ ├── Sales Orders
│ ├── Quotations
│ ├── Invoices
│ ├── Customers
│ └── Sales Metrics
├── Service
│ ├── Cases
│ ├── Queues
│ └── Contracts
├── Marketing
│ ├── Campaigns
│ ├── Leads
│ └── Lists
└── Settings
├── Security Roles
├── Teams
└── System Settings
Breadcrumb (Top):
[Home] > [Module] > [Entity Type] > [Record Name]
Command Bar:
[New] [Edit] [Save] [Delete] [Assign] [Share] [Email] [Print]
Analytics Stack:
1. Power BI Integration
- Embedded dashboards in Dynamics
- Real-time data
- Interactive filters
2. Embedded Analytics
- KPI cards in forms
- Business metrics
- Trend charts
3. Standard Reports
- Sales Analysis
- Customer Relationship Analysis
- Financial Reports
- Aging Reports (AR/AP)
4. Custom Reports
- SSRS (SQL Server Reporting Services)
- Power Automate triggers
- Scheduled delivery
5. Alerts & Notifications
- Workflow alerts
- Real-time notifications
- Email digests
| Характеристика | Odoo | ERPNext | SAP S/4HANA | Dynamics 365 |
|---|---|---|---|---|
| Тип | Open-source | Open-source | Enterprise | Cloud SaaS |
| БД | PostgreSQL | MariaDB | SAP HANA | SQL Server (Azure) |
| Язык | Python | Python (Frappe) | ABAP/Java | .NET (C#) |
| Развёртывание | On-prem/Cloud | On-prem/Cloud | On-prem/Cloud | Cloud only |
| Масштабирование | Хорошо (до 10K) | Среднее (до 5K) | Отличное (100K+) | Отличное (100K+) |
| Модульность | Высокая | Высокая | Жёсткая | Средняя |
| API | JSON-RPC | REST, WebSocket | OData, BAPI, RFC | REST, OData |
| Кастомизация | Очень простая | Простая | Сложная | Средняя |
| Learning Curve | Низкая | Низкая | Высокая | Средняя |
| TCO (5 лет) | Low | Low | High | Medium-High |
Архитектура данных:
Odoo:
├─ ORM (Object-Relational Mapping)
├─ Dynamic field addition
├─ Inheritance (class-based)
└─ PostgreSQL with JSON fields
ERPNext:
├─ DocTypes (metadata-driven)
├─ Dynamic schema
├─ Child tables (inline)
└─ MariaDB with JSON storage
SAP S/4HANA:
├─ Fixed tables (MARA, VBAK, etc.)
├─ Deep hierarchies (MM → MM01 → MARD)
├─ Standardized data dictionary
└─ HANA in-memory
Dynamics 365:
├─ Common Data Model (CDM)
├─ Extensible attributes
├─ Virtual tables (external data)
└─ Azure SQL, relational
| Аспект | Odoo | ERPNext | SAP | Dynamics |
|---|---|---|---|---|
| Генерация PDF | QWeb templates | Jinja2 HTML | Smart Forms | Word templates, SSRS |
| Хранилище | DB/FS/S3 | Filesystem/S3 | Archive (TOABO) | SharePoint/Blob |
| Шаблоны | Встроенные | Custom HTML | Smart Forms/SAPSCRIPT | Word templates |
| E-invoicing | Модули | Возможно | Native | Native (ER) |
| Workflow | На базе state | Document workflow | Release procedures | BPF + Automation |
| Подписание | Integraton | API-based | Adobe Sign | Power Automate |
| Аспект | Odoo | ERPNext | SAP | Dynamics |
|---|---|---|---|---|
| UI Framework | QWeb/Owl (JS) | Frappe Desk | SAP Fiori | Unified Interface |
| Mobile | Responsive | Responsive | Limited (Fiori) | Good (Canvas Apps) |
| Dashboards | Native | Native | Embedded Analytics | Power BI |
| Customization | Drag-drop | Workspace | Extensive coding | Power Apps |
| Performance | Good | Good | Excellent | Good |
| Learning | Fast | Fast | Slow | Medium |
| Потребность | Рекомендация | Почему |
|---|---|---|
| Модульная архитектура | Odoo | Чистое разделение, переиспользуемые компоненты |
| Гибкие модели данных | ERPNext | DocTypes позволяют расширять без БД миграции |
| Управление складом | Odoo | Лучший уровень детализации (Location, Lot, Serial) |
| Финансовый учёт | SAP | Наиболее полный, с вмененным НДС и налогами |
| Документооборот | Odoo | Простой, но эффективный (QWeb) |
| Аналитика | Dynamics 365 | Power BI интеграция, современные визуализации |
| Масштабируемость | SAP | Но дорого; альтернатива — Odoo на HANA |
Предлагаемая структура:
┌─────────────────────────────────────────────┐
│ Pirotehnika ERP (Microservices) │
├─────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────┐ │
│ │ PIM (Product Information) │ │
│ │ • Products, Variants, Categories │ │
│ │ • Images, Videos, Attributes │ │
│ └──┬───────────────────────────────────┘ │
│ │ │
│ ┌──v───────────────────────────────────┐ │
│ │ Pricing Engine │ │
│ │ • Dynamic pricing, Commissions │ │
│ │ • Marketplace-specific rules │ │
│ └──┬───────────────────────────────────┘ │
│ │ │
│ ┌──v───────────────────────────────────┐ │
│ │ Sales Module (Odoo-like) │ │
│ │ • Sales Orders, Quotations │ │
│ │ • Delivery, Invoicing │ │
│ └──┬──────┬────────────────────────────┘ │
│ │ │ │
│ ┌──v─┐ ┌──v───────────────────────────┐ │
│ │Stock│ │ Accounting (SAP-like) │ │
│ │Inv. │ │ • GL, AP, AR, Cost Centers │ │
│ │Mgmt │ │ • Financial Reports │ │
│ └─────┘ └──────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Integration Layer │ │
│ │ • Marketplace APIs (Ozon, WB, etc.) │ │
│ │ • 1C Connector (sync data) │ │
│ │ • Webhooks & Events │ │
│ └──────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────┐ │
│ │ Analytics & Reporting │ │
│ │ • Sales analysis, Profitability │ │
│ │ • Inventory reports, Dashboards │ │
│ └──────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────┘
# На базе Odoo + ERPNext паттернов
class Product(Base):
id: PK
sku: String # Внутренний артикул
name: String # Название товара
category: ForeignKey # Категория
supplier_ids: M2M # Поставщики (для закупки)
images: Array # Изображения
attributes: JSON # Цвет, размер и т.д.
pim_data: JSON # Расширенные данные (для сайта)
barcode: String
cost_price: Decimal # Себестоимость (по поставщику)
created_at: Datetime
updated_at: Datetime
class MarketplaceListing(Base):
id: PK
product_id: FK # Product
marketplace: Enum # ozon, wildberries, avito
external_id: String # SKU на маркетплейсе
price: Decimal
commission_rate: Decimal
status: Enum # active, archived
sync_date: Datetime
class SalesOrder(Base):
id: PK
number: String
order_date: Datetime
customer: JSON # Marketplace customer info
marketplace: Enum # Source
items: Array
subtotal: Decimal
tax: Decimal
total: Decimal
shipping_cost: Decimal
status: Enum # new, paid, shipped, delivered, returned
class Inventory(Base):
id: PK
product_id: FK
warehouse_id: FK
quantity: Int
reserved: Int # Для заказов в процессе
damaged: Int
last_counted: Datetime
reorder_level: Int # Когда заказывать у поставщика
class FinancialTransaction(Base):
id: PK
type: Enum # sale, refund, commission, shipping
related_order: FK # SalesOrder
account: Enum # gl_account
debit: Decimal
credit: Decimal
reference: String # Marketplace order ID
posted_date: Datetime
Рекомендуемые модули (как в Odoo):
1. Core (@base)
├── Settings
├── Users & Permissions
├── Document Management
└── Logging
2. PIM (@pim)
├── Product Master
├── Categories
├── Attributes
├── Images/Media
└── Brand information
3. Pricing (@pricing)
├── Price Rules
├── Commission Rates
├── Dynamic Pricing
└── Price History
4. Marketplace Integration (@marketplace)
├── Ozon Connector
├── Wildberries Connector
├── Avito Connector
└── Listing Management
5. Sales (@sales)
├── Sales Orders
├── Order Management
├── Delivery Tracking
└── Returns/Refunds
6. Inventory (@inventory)
├── Stock Management
├── Warehouse Operations
├── Stock Transfer
└── Counting
7. Accounting (@accounting)
├── Chart of Accounts
├── General Ledger
├── Accounts Payable
├── Accounts Receivable
└── Financial Reports
8. Analytics (@analytics)
├── Sales Reports
├── Profitability Analysis
├── Dashboards
└── KPI Tracking
Odoo — Best для: Стартапов, быстрого развёртывания, гибкой кастомизации
- Плюсы: Простая архитектура, быстрое обучение, Python
- Минусы: Меньше масштабирование на очень больших объёмах
ERPNext — Best для: Open-source сообщества, быстрого прототипирования
- Плюсы: Метаданные-driven (DocTypes), хороший UI
- Минусы: Меньше модулей, чем Odoo; менее популярен
SAP S/4HANA — Best для: Крупных корпораций, комплексных бизнес-процессов
- Плюсы: Самая полная функциональность, мощная аналитика
- Минусы: Дорого, сложно, требует экспертов
Dynamics 365 — Best для: Microsoft-aligned организаций, облачных решений
- Плюсы: Cloud-native, Power Platform интеграция, хорошо масштабируется
- Минусы: Proprietary, дорого на масштабирование
1. Модульность — как в Odoo
├─ Каждый модуль независим
├─ Clear dependencies
└─ Переиспользуемые компоненты
2. Метаданные-driven — как в ERPNext
├─ Динамические схемы (JSON fields)
├─ Настраиваемые поля без миграций БД
└─ DocType-like system для модели данных
3. Документооборот — как в Odoo
├─ Template-based PDF generation
├─ State machine для статусов
└─ Встроенное хранилище файлов
4. Финансовый учёт — как в SAP
├─ Полная проводка GL entries
├─ Cost centers, profit centers
└─ Многовалютность и налоги
5. Аналитика — как в Dynamics 365
├─ Real-time dashboards
├─ Power BI интеграция (или Metabase)
└─ Drill-down capability
Frappe Framework:
- Python backend (асинхронный, поддержка сокетов)
- JavaScript фронтенд (Vue.js)
- MariaDB/MySQL база данных
- Встроенный ORM для работы с БД
DocType System:
- Метаданные-driven подход
- JSON-stored field metadata
- Динамическое создание таблиц при необходимости
- Support для кастомных полей без миграций
Мастер-данные (Master Data):
Customer
├── customer_name: Text
├── customer_type: Select (Individual/Company)
├── customer_group: Link
├── territory: Link
├── currency: Link
├── address_html: Long Text
└── default_currency: Link
Supplier
├── supplier_name: Text
├── supplier_group: Link
├── payment_terms: Link
├── currency: Link
└── supplier_addresses: Table
Item
├── item_code: Data (unique)
├── item_name: Text
├── item_group: Link
├── brand: Link
├── item_type: Select (Product/Service/Raw Material)
├── stock_uom: Link
├── purchase_uom: Link
├── valuation_method: Select (FIFO/LIFO/Moving Average)
├── is_fixed_asset: Checkbox
└── item_images: Table
Транзакции Продаж (Selling):
Quotation → Sales Order → Delivery Note → Sales Invoice
Sales Order
├── customer: Link
├── company: Link
├── order_date: Date
├── delivery_date: Date
├── items: Table
│ ├── item_code: Link
│ ├── qty: Int
│ ├── rate: Currency
│ ├── delivery_warehouse: Link
│ └── amount: Formula
├── warehouse: Link
├── currency: Link
├── payment_terms_template: Link
└── status: Select
Sales Invoice
├── customer: Link
├── delivery_note: Link
├── posting_date: Date
├── due_date: Date
├── items: Table
│ ├── item_code: Link
│ ├── qty: Int
│ ├── rate: Currency
│ └── amount: Formula
├── grand_total: Formula
├── outstanding_amount: Formula
└── status: Select
Транзакции Закупок (Buying):
Purchase Order → Purchase Receipt → Purchase Invoice
Purchase Order
├── supplier: Link
├── company: Link
├── transaction_date: Date
├── required_by: Date
├── items: Table
│ ├── item_code: Link
│ ├── qty: Int
│ ├── rate: Currency
│ └── amount: Formula
├── warehouse: Link (target)
└── status: Select
Purchase Receipt
├── supplier: Link
├── purchase_order: Link
├── posting_date: Date
├── items: Table
│ ├── item_code: Link
│ ├── qty: Int
│ ├── warehouse: Link
│ └── received_qty: Int
└── status: Select
Purchase Invoice
├── supplier: Link
├── purchase_order: Link
├── bill_no: Data
├── bill_date: Date
├── posting_date: Date
├── items: Table
└── outstanding_amount: Formula
Инвентарь (Stock):
Stock Entry (Движение товара)
├── stock_entry_type: Select
├── posting_date: Date
├── from_warehouse: Link
├── to_warehouse: Link
├── items: Table
└── status: Select
Warehouse
├── warehouse_name: Data
├── is_group: Checkbox
├── parent_warehouse: Link
└── disabled: Checkbox
Bin (Остаток товара)
├── item_code: Link
├── warehouse: Link
├── actual_qty: Float
├── reserved_qty: Float
├── ordered_qty: Float
├── projected_qty: Formula
└── valuation_rate: Currency
Финансы (Accounts):
Journal Entry
├── posting_date: Date
├── cheque_no: Data
├── cheque_date: Date
├── accounts: Table
│ ├── account: Link
│ ├── debit: Currency
│ ├── credit: Currency
│ └── cost_center: Link
├── user_remark: Text
└── status: Select
Payment Entry
├── payment_type: Select (Receive/Pay)
├── party_type: Link
├── party: Link
├── posting_date: Date
├── paid_to: Link
├── paid_from: Link
├── paid_amount: Currency
├── received_amount: Currency
└── references: Table
GL Entry (Запись в главный журнал)
├── account: Link
├── posting_date: Date
├── debit: Currency
├── credit: Currency
├── cost_center: Link
└── against: Data
Standard Views:
1. List View
├── Search bar (top)
├── Filters (left sidebar)
├── List rows (main)
├── Bulk actions
└── Pagination
2. Form View
├── Toolbar (Save, Submit, Menu)
├── Tabs (Group sections)
├── Fields (grouped)
├── Child tables
├── Status indicator
└── Activity feed
3. Report View
├── Report filters (left)
├── Data table (main)
├── Totals/Aggregations
├── Column selector
└── Export options
4. Board View (Kanban)
├── Columns by field value
├── Cards with key info
├── Drag-drop to change
└── Quick edit
5. Calendar View
├── Month/Week/Day view
├── Events from date field
├── Click to edit
└── Drag-to-reschedule
DocStatus Workflow:
Draft → Submitted → Paid/Cancelled → Amendment
↓ ↓
Edit Read-only
Sales Order Status:
├── Draft (создание)
├── On Hold (удержание)
├── To Deliver (готово к отправке)
├── To Deliver and Bill
├── Completed
└── Cancelled
Invoice Status:
├── Draft
├── Submitted
├── Paid (когда Payment Entry связана)
├── Partly Paid
├── Unpaid
├── Overdue
└── Cancelled
Основные таблицы БД:
OCRD (Business Partner)
├── CardCode: Unique ID
├── CardName: Name
├── CardType: C (Customer) / S (Supplier) / L (Lead)
├── Address, Phone, Email
├── CreditLimit: Лимит кредита
├── Currency: Валюта
├── PaymentTerms: Условия оплаты
└── SlpCode: Sales person
OITM (Item Master)
├── ItemCode: Уникальный код
├── ItemName: Название
├── ItemType: Тип товара
├── ItemsGroupCode: Группа товара
├── SalUnitMsr: Единица продажи
├── BuyUnitMsr: Единица покупки
├── StdCost: Себестоимость
├── SalPrice: Цена продажи
├── BuyPrice: Цена покупки
└── Picture: Изображение
OACT (G/L Account)
├── AcctCode: Код счёта
├── AcctName: Название
├── AcctType: Тип (Asset/Liability/Equity/Income/Expense)
├── CurrencyCode: Валюта
├── Debit: Дебет
└── Credit: Кредит
OCTG (Terms of Payment)
├── GroupNum: Код группы
├── GroupName: Название
└── PaymentTerms: Условия платежа
OWHS (Warehouse)
├── WhsCode: Код
├── WhsName: Название
├── Location: Местоположение
└── Manager: Менеджер
Документы Закупок:
OPCH (Purchase Order)
├── DocEntry: ID
├── DocNum: Номер
├── DocDate: Дата
├── CardCode: Поставщик
├── DocStatus: O (Open) / C (Closed)
├── DocTotal: Итого
└── POR1 (Line Items)
├── ItemCode: Товар
├── Quantity: Количество
├── Price: Цена
└── LineTotal: Итого строки
OIGN (Goods Receipt PO)
├── DocEntry: ID
├── DocNum: Номер
├── DocDate: Дата
├── CardCode: Поставщик
├── BaseEntry: Ссылка на PO
├── DocStatus: (Posted)
└── IGN1 (Line Items)
├── ItemCode: Товар
├── Quantity: Количество
└── WhsCode: Склад
APCH (A/P Invoice)
├── DocEntry: ID
├── DocNum: Номер счёта
├── VendDocNum: Номер у поставщика
├── CardCode: Поставщик
├── BaseEntry: Ссылка на GR/PO
├── DocStatus: Open / Closed
└── APC1 (Line Items)
Документы Продаж:
ORDR (Sales Order)
├── DocEntry: ID
├── DocNum: Номер
├── CardCode: Клиент
├── DocStatus: O (Open) / C (Closed) / D (Delivered)
└── RDR1 (Line Items)
ODLN (Delivery Note)
├── DocEntry: ID
├── BaseEntry: Ссылка на SO
├── DocStatus: Posted
└── DLN1 (Line Items)
OINV (A/R Invoice)
├── DocEntry: ID
├── CardCode: Клиент
├── BaseEntry: Ссылка на DN
├── DocStatus: Open / Closed / Due / Overdue
└── INV1 (Line Items)
ORCP (Customer Payment)
├── DocEntry: ID
├── CardCode: Клиент
├── Amount: Сумма платежа
└── RCP1 (Invoice Allocation)
├── DocEntry: Ссылка на Invoice
└── InvAmount: Сумма по счёту
Status Transitions:
PO: Draft → Released → Partially Received → Fully Received → Closed
GR/PO: Draft → Posted (↑ stock, ↓ payable)
Invoice: Draft → Posted (↓ liability/debt)
SO: Draft → Released → Partially Delivered → Delivered → Closed
DN: Draft → Posted (↓ stock)
Invoice: Draft → Posted → Due → Paid/Overdue/Cancelled
SAP B1 Roles:
├── Database Owner (Full access)
├── System Administrator (User & System management)
├── Supervisor (Department-level, approval authority)
├── Sales Manager (Full sales access)
├── Sales User (Own territory)
├── Procurement Manager (All purchases)
├── Warehouse Manager (Inventory operations)
├── Accounting Manager (Financial access)
└── Accountant (Limited accounting)
Document Approval:
├── By Amount: PO > $10K (Manager), > $100K (Director)
├── By Status: Open/Draft/Posted
├── By User Role: Who can approve
└── Escalation: Automatic to higher level if expired
Odoo Reports:
├── List Reports (переработка данных)
├── Pivot Reports (сводные таблицы)
├── Qweb Reports (PDF templates)
└── Custom Reports (Python + SQL)
ERPNext Reports:
├── Standard Reports (из DocTypes)
├── Query Reports (SQL-based)
├── Script Reports (Python-based)
├── Pivot Charts
└── Dashboard widgets
SAP B1 Reports:
├── Standard Reports (встроенные)
├── Crystal Reports (custom)
├── List Views (queries)
├── Dashboard (SAP Analytics Cloud)
└── Print layouts
Odoo Access Control:
├── User Roles (administrator, manager, user)
├── Group-based permissions
├── Record-level rules
└── Field-level access
ERPNext Access Control:
├── User roles (System Manager, Sales User, etc)
├── DocType-level permissions
├── User Permissions (custom rules)
└── Field-level read/write
SAP B1 Access Control:
├── Role-based security
├── Document-level approval
├── Amount-based authorization
└── User-specific restrictions
Odoo:
├── In-app notifications
├── Email alerts (автоматическая отправка)
├── SMS (Twilio integration)
├── Scheduled actions (cron)
└── On-change automation
ERPNext:
├── Document events (before/after)
├── Email digest
├── Slack integration
├── Custom workflows
└── Webhooks
SAP B1:
├── Alert Manager
├── Escalation rules
├── Email workflows
├── Task reminders
└── SOP reminders
Odoo APIs:
├── JSON-RPC API (основной)
├── REST API (v14+)
├── Webhooks
└── External integrations (Stripe, Shopify, etc)
ERPNext APIs:
├── REST API (/api/method/)
├── Webhooks (Document events)
├── Frappe RPC API
└── WebSocket для real-time
SAP B1 APIs:
├── REST API (B1 Service Layer)
├── OData API
├── Webhooks
├── SDK (.NET)
└── Web Services (SOAP)
| Параметр | Odoo | ERPNext | SAP B1 |
|---|---|---|---|
| Архитектура | Python ORM | Frappe (Metadata-driven) | T-SQL (Fixed schema) |
| Кастом поля | Easy custom fields | DocType fields | Limited |
| Связи | Many2one, One2many, Many2many | Link, Table | Foreign keys |
| Масштабируемость | Good | Good | Excellent |
| Типизация данных | Dynamic | Strong typing | Strong typing |
| Параметр | Odoo | ERPNext | SAP B1 |
|---|---|---|---|
| Модули | 20+ | 30+ | 8-10 основных |
| Manufacturing | Excellent | Good | Good |
| Financial | Good | Good | Excellent |
| CRM | Good | Basic | Basic |
| Analytics | Good | Good | Excellent |
| AI/ML | 2026+ | Basic | 2027+ (v11) |
| Параметр | Odoo | ERPNext | SAP B1 |
|---|---|---|---|
| Современность | Excellent | Excellent | Good (Web v10) |
| Интуитивность | Good | Very Good | Requires training |
| Mobile | Responsive | App available | Web responsive |
| Dashboard | Good | Excellent | Good |
| Обучаемость | Fast | Fast | Slow |
| Параметр | Odoo | ERPNext | SAP B1 |
|---|---|---|---|
| Open Source | Yes | Yes | No |
| Лицензирование | Per-user | Per-server | Enterprise |
| Внедрение | 2-4 мес | 1-3 мес | 6-12 мес |
| TCO | $$ | $ | $$$$ |
→ ERPNext или Odoo Community
- Быстрое внедрение (1-3 месяца)
- Низкая стоимость
- Хорошая документация
- Модули: CRM, Sales, Purchase, Inventory, Accounting
→ Odoo + Manufacturing
- Встроенное MRP
- Управление BOM
- Отличная интеграция модулей
- Масштабируемость
→ SAP Business One или Odoo Enterprise
- Enterprise-grade безопасность
- Мощные отчёты
- Поддержка SAP (для B1)
- Интеграция с другими системами