МойСклад
Файл: 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_tokenAPI МойСклад
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 |
|---|---|
customerorder | Documents (тип: Заказ покупателя) |
supply | Documents (тип: Приходная накладная) |
demand | Documents (тип: Расходная накладная) |
product | Assortiment |
counterparty | CounterParty |
Идентификация
Для отслеживания синхронизации каждый объект хранит внешний ID из МойСклад:
python
class Documents(MPTTModel):
moysklad_id = CharField(null=True, unique=True)
moysklad_href = URLField(null=True)