Skip to content

Модуль отчётов

Полное руководство по использованию модуля отчётов (sdk.reports) для получения данных о складах, поставках, остатках и продажах.

Обзор

Модуль Reports предоставляет доступ к операционным отчётам:

  • Остатки на складах (Warehouse Remains)
  • Платное хранение (Paid Storage)
  • Отчёт о приёмке (Acceptance Report)
  • Поставки (Incomes)
  • Остатки товаров (Stocks)
  • Продажи (Sales)
  • Заказы (Orders)

Быстрый старт

typescript
import { WildberriesSDK } from 'daytona-wildberries-typescript-sdk';

const sdk = new WildberriesSDK({ apiKey: process.env.WB_API_KEY! });

// Получить остатки на складах
const stocks = await sdk.reports.getStocks('2024-12-01');

// Получить продажи за период
const sales = await sdk.reports.getSales('2024-12-01', 0);

1. Остатки на складах (Warehouse Remains)

Асинхронный отчёт об остатках товаров на всех складах WB.

Создание задания

typescript
// Шаг 1: Создать задание на формирование отчёта
const task = await sdk.reports.warehouseRemains({
  groupByBrand: false,
  groupBySubject: false,
  groupBySa: false,
  groupByNm: true  // Группировка по nm_id
});

const taskId = task.data.taskId;
console.log(`Task created: ${taskId}`);

Проверка статуса и скачивание

typescript
async function getWarehouseRemains(sdk: WildberriesSDK) {
  const task = await sdk.reports.warehouseRemains({ groupByNm: true });
  const taskId = task.data.taskId;

  let status = 'processing';
  while (status !== 'done') {
    await delay(5000);
    const statusResp = await sdk.reports.getWarehouseRemainsReportStatus(taskId);
    status = statusResp.data.status;

    if (status === 'canceled' || status === 'purged') {
      throw new Error(`Task failed: ${status}`);
    }
  }

  return await sdk.reports.downloadWarehouseRemainsReport(taskId);
}

const delay = (ms: number) => new Promise(r => setTimeout(r, ms));

2. Платное хранение (Paid Storage)

Детализированный отчёт о расходах на хранение товаров.

Асинхронный процесс

typescript
async function getPaidStorageReport(
  sdk: WildberriesSDK,
  dateFrom: string,
  dateTo: string
) {
  // Шаг 1: Создать задание (max 8 дней за запрос!)
  const task = await sdk.reports.paidStorage({ dateFrom, dateTo });
  const taskId = task.data.taskId;

  // Шаг 2: Проверять статус
  let status = 'processing';
  while (status !== 'done') {
    await delay(5000);
    const statusResp = await sdk.reports.getTasksStatu3(taskId);
    status = statusResp.data.status;

    if (status === 'canceled' || status === 'purged') {
      throw new Error(`Task failed: ${status}`);
    }
  }

  // Шаг 3: Скачать
  return await sdk.reports.getTasksDownload3(taskId);
}

Ограничения

ПараметрЗначение
Max период8 дней
Rate limit создания1 req/min
Rate limit статуса1 req/5sec
Время обработки5-60 сек

3. Продажи (Sales)

Отчёт о продажах.

typescript
// Получить продажи
// flag: 0 - без возвратов, 1 - с возвратами
const sales = await sdk.reports.getSales('2024-12-01', 1);

let totalRevenue = 0;
let salesCount = 0;
let returnsCount = 0;

for (const sale of sales) {
  if (sale.quantity > 0) {
    salesCount++;
    totalRevenue += sale.forPay || sale.finishedPrice || 0;
  } else {
    returnsCount++;
  }
}

console.log(`Продаж: ${salesCount}`);
console.log(`Возвратов: ${returnsCount}`);
console.log(`Выручка: ${totalRevenue.toFixed(2)} ₽`);

Сводная таблица методов

МетодТипPeriod LimitRate Limit
warehouseRemains()Async-1/min
paidStorage()Async8 дней1/min
acceptanceReport()Async-1/min
getIncomes()Sync365 дней-
getStocks()Sync--
getSales()Sync365 дней-
getOrders()Sync365 дней-

Связанные материалы


← Назад к руководствам

Made with ❤️ for the Wildberries developer community