Перейти до основного вмісту

Залишки на дату

Ваша система може запитати у WMS, скільки товару було на складі на певну дату — наприклад, щоб звірити це з власним обліком. Це запит, а не тип даних: залишки не імпортують, і вони не з'являються в стрічці змін.

Запит потребує можливості Читання change feed.

POST /api/v1/integrations/stock-balances/as-of
{
"externalSystemCode": "ERP_MAIN",
"warehouseIds": [],
"asOf": {"timeBasis": "accounting_date", "date": "2026-10-27"},
"limit": 500
}
  • warehouseIds — ідентифікатори WMS складів, за якими потрібні залишки; порожній список означає всі склади, з якими може працювати ваша зовнішня система.
  • asOf.date — дата у форматі YYYY-MM-DD; обов'язкова.
  • asOf.timeBasis — яку дату руху товару враховувати:
    • accounting_date — облікову дату документа;
    • registration_date — момент, коли рух зареєстровано у WMS.
  • limit — рядків на сторінку, від 1 до 500 (200, якщо не вказано).
  • cursor — для першої сторінки не передавайте; для наступних надсилайте nextCursor попередньої відповіді разом із тими самими іншими полями.

Відповідь:

{
"items": [
{
"warehouseId": {"int": "01a16373-d6be-7746-8eab-fc8e447bfea8", "ext": null},
"productId": {"int": "01a16373-d3a9-7069-90ff-dfa694a27c0a", "ext": "prod-0042"},
"lotId": {"int": "01a16373-da34-757f-b252-d20c58040bf0", "ext": null},
"status": "AVAILABLE",
"baseQuantity": "176.0000"
}
],
"nextCursor": "eyJ2ZXJzaW9uIjoyLCJ3YXJlaG91c2VJZCI6…",
"hasMore": true
}
  • Один рядок — це кількість одного товару (з характеристикою, партією та власником, якщо вони є) на одному складі в одному статусі запасу.
  • baseQuantity — у базовій одиниці товару, десяткове число, записане рядком. Перетворюйте його на десятковий тип, а не на число з плаваючою комою.
  • Ідентифікатори — пари {int, ext}, як і всюди в тому, що ви читаєте: див. Формування payload.
  • Читайте сторінки, доки hasMore не стане false. Сторінка може містити на кілька рядків більше, ніж limit: рядки одного товару не розриваються між сторінками.

Код​

Функція читає всі сторінки й повертає всі рядки. Вона використовує клієнт з Основ API.

// Yields the stock balances on a date, row by row, reading page after page.
// date: 'YYYY-MM-DD'; timeBasis: 'accounting_date' or 'registration_date';
// warehouseIds: WMS identifiers of warehouses, or [] for all your warehouses.
async function* fetchStockBalances({date, timeBasis = 'accounting_date', warehouseIds = [], pageSize = 500}) {
let cursor;
do {
const {body: page} = await wmsRequest('POST', '/api/v1/integrations/stock-balances/as-of', {
body: {
externalSystemCode: config.externalSystem,
warehouseIds,
asOf: {timeBasis, date},
limit: pageSize,
cursor, // undefined on the first page — left out of the JSON
},
});
yield* page.items; // {warehouseId, productId, productFeatureId?, lotId?, ownerId?, status, baseQuantity}
cursor = page.nextCursor;
if (!page.hasMore) break;
} while (cursor);
}

// Usage:
// for await (const row of fetchStockBalances({date: '2026-10-27'})) {
// console.log(row.productId.ext ?? row.productId.int, row.status, Number(row.baseQuantity));
// }