architect/research/ERP_SYSTEMS_RESEARCH.md

ERP Systems Research: Odoo, ERPNext, SAP Business One

Дата исследования: 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. Сравнительные матрицы


1. ODOO ERP

1.1 Обзор

Тип: Open-source ERP (Python + PostgreSQL)
Лицензия: LGPL-3.0
Архитектура: MVC (Model-View-Controller)
БД: PostgreSQL (полный контроль над данными)
API: JSON-RPC (deprecated в v19, удалится в v20)

1.2 Модели данных

Основные сущности

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          # Сообщения и коммуникация

Связи между сущностями (Many2One, One2Many, Many2Many)

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)
}

1.3 Модули и компоненты

Основные модули

Модуль Назначение Зависимости Компоненты
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

1.4 Работа с документами

Типы документов

Основные документы (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

Генерация PDF

Технология: 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.5 UI Паттерны

Основные представления

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

2. ERPNEXT

2.1 Обзор

Тип: Open-source ERP (Python + Frappe Framework)
Лицензия: GNU GPL v3
Архитектура: MVC на базе Frappe
БД: MariaDB (MySQL совместимая)
API: JSON-RPC (Frappe REST API)
Фреймворк: Frappe (отдельный проект)

2.2 Модели данных

Основные сущности (DocTypes)

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
}

2.3 Модули и компоненты

Основные модули (Apps)

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

Переиспользуемые компоненты (Frappe)

# 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"],
}

2.4 Работа с документами

Жизненный цикл документа

Draft (0)
  
  Submitted (1)  Валидация, расчёт налогов, создание GL entries
  
  Processing  Создание связанных документов (Delivery, Invoice)
  
  Completed  Все связанные документы завершены
  
  Cancelled (2)  Откат GL entries

State Workflow (Custom):
Draft  [Approval]  Approved  [Execution]  Completed
          
       Rejected

Генерация PDF

Технология: 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 (система брендирования)

2.5 UI Паттерны

Основные компоненты (Frappe Desk)

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]

Рабочие пространства (Workspaces)

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 (встроенная)

3. SAP S/4HANA

3.1 Обзор

Тип: 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

3.2 Модели данных

Основные сущности

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;

3.3 Модули и компоненты

Основные модули

Модуль Код Функция Компоненты
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)

┌─────────────────────────────────────────────────┐
│     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)

3.4 Работа с документами

Типы документов

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

Генерация PDF

Технология: 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

3.5 UI Паттерны

SAP Fiori Design

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

Launchpad (Home)

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               
                                          
└──────────────────────────────────────────┘

Аналитика и BI

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)

4. MICROSOFT DYNAMICS 365

4.1 Обзор

Тип: 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

4.2 Модели данных

Основные сущности (Common Data Model)

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,
}

4.3 Модули и компоненты

Основные модули

Модуль Назначение Компоненты
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

4.4 Работа с документами

Типы документов

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

Генерация PDF

Технология: 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);
    }
}

Методы генерации:

  1. Built-in PDF Export:
    - Report menu → Export → PDF
    - Использует SSRS (SQL Server Reporting Services)

  2. Word Templates:
    - Create from Dynamics
    - Map fields to template
    - Generate on-demand

  3. Electronic Invoicing:
    - Automatic e-invoice generation
    - Compliant formats (UBL, CII, etc.)
    - Submission to tax authority

  4. 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

4.5 UI Паттерны

Unified Interface (Modern UX)

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

5. СРАВНИТЕЛЬНЫЙ АНАЛИЗ

5.1 Матрица архитектурных характеристик

Характеристика 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

5.2 Модели данных: Сравнение

Архитектура данных:

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

5.3 Документооборот: Сравнение

Аспект 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

5.4 UI/UX: Сравнение

Аспект 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

6. РЕКОМЕНДАЦИИ ДЛЯ ПРОЕКТА PIROTEHNIKA

6.1 Из какой системы брать паттерны?

Потребность Рекомендация Почему
Модульная архитектура Odoo Чистое разделение, переиспользуемые компоненты
Гибкие модели данных ERPNext DocTypes позволяют расширять без БД миграции
Управление складом Odoo Лучший уровень детализации (Location, Lot, Serial)
Финансовый учёт SAP Наиболее полный, с вмененным НДС и налогами
Документооборот Odoo Простой, но эффективный (QWeb)
Аналитика Dynamics 365 Power BI интеграция, современные визуализации
Масштабируемость SAP Но дорого; альтернатива — Odoo на HANA

6.2 Архитектурные паттерны для пимотехники

Предлагаемая структура:

┌─────────────────────────────────────────────┐
│     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     │  │
│  └──────────────────────────────────────┘  │
│                                             │
└─────────────────────────────────────────────┘

6.3 Data Model для Pirotehnika

# На базе 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

6.4 Модульность Pirotehnika

Рекомендуемые модули (как в 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

7. ЗАКЛЮЧЕНИЕ

7.1 Ключевые выводы

  1. Odoo — Best для: Стартапов, быстрого развёртывания, гибкой кастомизации
    - Плюсы: Простая архитектура, быстрое обучение, Python
    - Минусы: Меньше масштабирование на очень больших объёмах

  2. ERPNext — Best для: Open-source сообщества, быстрого прототипирования
    - Плюсы: Метаданные-driven (DocTypes), хороший UI
    - Минусы: Меньше модулей, чем Odoo; менее популярен

  3. SAP S/4HANA — Best для: Крупных корпораций, комплексных бизнес-процессов
    - Плюсы: Самая полная функциональность, мощная аналитика
    - Минусы: Дорого, сложно, требует экспертов

  4. Dynamics 365 — Best для: Microsoft-aligned организаций, облачных решений
    - Плюсы: Cloud-native, Power Platform интеграция, хорошо масштабируется
    - Минусы: Proprietary, дорого на масштабирование

7.2 Архитектурные принципы для Pirotehnika

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

РАСШИРЕННОЕ ИССЛЕДОВАНИЕ: ERPNext и SAP Business One (2026)

ERPNext - Полная архитектура

Платформа и архитектура

Frappe Framework:
- Python backend (асинхронный, поддержка сокетов)
- JavaScript фронтенд (Vue.js)
- MariaDB/MySQL база данных
- Встроенный ORM для работы с БД

DocType System:
- Метаданные-driven подход
- JSON-stored field metadata
- Динамическое создание таблиц при необходимости
- Support для кастомных полей без миграций

Основные DocTypes в ERPNext

Мастер-данные (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

UI Views в ERPNext

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

Workflow & Status Tracking

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

SAP Business One - Enterprise Architecture

Master Data & Transactional Structure

Основные таблицы БД:

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: Сумма по счёту

Workflow & Status Management

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

Access Control

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

Общие Компоненты и Паттерны

1. Отчёты и Аналитика

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

2. Система прав доступа

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

3. Уведомления и автоматизация

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

4. API и интеграция

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)

Сравнительная матрица 2026

По модели данных

Параметр 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)

По UI/UX

Параметр 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

По стоимости владения (TCO 5 лет)

Параметр Odoo ERPNext SAP B1
Open Source Yes Yes No
Лицензирование Per-user Per-server Enterprise
Внедрение 2-4 мес 1-3 мес 6-12 мес
TCO $$ $ $$$$

Рекомендации по выбору

Для стартапа (до 50 человек)

→ ERPNext или Odoo Community
- Быстрое внедрение (1-3 месяца)
- Низкая стоимость
- Хорошая документация
- Модули: CRM, Sales, Purchase, Inventory, Accounting

Для производственного бизнеса (50-500 человек)

→ Odoo + Manufacturing
- Встроенное MRP
- Управление BOM
- Отличная интеграция модулей
- Масштабируемость

Для крупной организации (1000+ человек)

→ SAP Business One или Odoo Enterprise
- Enterprise-grade безопасность
- Мощные отчёты
- Поддержка SAP (для B1)
- Интеграция с другими системами


Источники