Skip to content

МойСклад

Файл: app/document/moysklad.py

Назначение

Интеграция с МойСклад — популярной системой учёта. Используется для двусторонней синхронизации данных: документов, ассортимента, контрагентов.

Синхронизация

Что синхронизируется

СущностьНаправлениеОписание
ДокументыМойСклад → NarmakНакладные, заказы
АссортиментМойСклад ↔ NarmakТоварный каталог
КонтрагентыМойСклад ↔ NarmakПоставщики, покупатели

Celery-задачи синхронизации

python
# app/document/tasks.py

@app.task
def sync_documents():
    """Синхронизировать документы с МойСклад"""
    ...

@app.task
def sync_document_by_url(url: str):
    """Синхронизировать конкретный документ по URL"""
    ...

@app.task
def sync_processing_documents():
    """Синхронизировать документы обработки"""
    ...

@app.task
def sync_document_positions():
    """Синхронизировать позиции документов"""
    ...

@app.task
def sync_assortiment():
    """Синхронизировать ассортимент"""
    ...

Конфигурация

env
MOYSKLAD_LOGIN=user@company.ru
MOYSKLAD_PASSWORD=your_password
# Или через bearer token:
MOYSKLAD_TOKEN=your_bearer_token

API МойСклад

python
MS_API_BASE = "https://api.moysklad.ru/api/remap/1.2"

headers = {
    "Authorization": f"Bearer {settings.MOYSKLAD_TOKEN}",
    "Content-Type": "application/json"
}

# Получить список документов
GET /entity/customerorder
GET /entity/supply
GET /entity/demand

# Получить позиции документа
GET /entity/customerorder/{id}/positions

Маппинг данных

При синхронизации данные из МойСклад маппятся в модели Narmak:

МойСкладNarmak
customerorderDocuments (тип: Заказ покупателя)
supplyDocuments (тип: Приходная накладная)
demandDocuments (тип: Расходная накладная)
productAssortiment
counterpartyCounterParty

Идентификация

Для отслеживания синхронизации каждый объект хранит внешний ID из МойСклад:

python
class Documents(MPTTModel):
    moysklad_id = CharField(null=True, unique=True)
    moysklad_href = URLField(null=True)