رزرو انبار، موجودی آزاد و کسری سفارش
موجودی فیزیکی، reserved، available و تخصیص backorder
موجودی سفارش: رزرو، کسری، تعهد فروش، تخصیص و جلوگیری از منفیشدن
برای هر کالا باید بین موجودی فیزیکی (on_hand)، مقدار رزروشده (reserved)، مقدار قابل فروش (available) و مقدار در انتظار تأمین (backordered) تفاوت گذاشت. مشتری ممکن است کالایی را سفارش داده باشد اما وجه نپرداخته باشد؛ فروشگاه نیز ممکن است برای آن مشتری کالا کنار گذاشته باشد. این رزرو یعنی بخشی از موجودی آزاد دیگر نباید به مشتری دوم فروخته شود.
مفهوم پایه با مثال
انبار ۱۰۰ عدد کابل دارد. ۲۰ عدد برای سفارشهای ثبتشده رزرو شده است؛ بنابراین حداکثر ۸۰ عدد در این مثال آزاد است. اگر مشتری جدید ۱۰ عدد بخواهد، سفارش میتواند ۱۰ عدد را رزرو کند و موجودی آزاد به ۷۰ برسد. رزرو بهتنهایی موجودی فیزیکی را به ۹۰ کاهش نمیدهد؛ هنگام قطعیشدن فروش/خروج، مسیرهای موجودی باید مرحله رزرو را مطابق منطق همان سفارش نهایی کنند. اگر پرداخت ناکام یا سفارش مجاز لغو شود، رزرو باید آزاد شود؛ حذف مستقیم رکورد رزرو از دیتابیس راهحل نیست.
در سفارش دستی چه میشود؟
فایل manual_entry.py تنوع محصول را بررسی، ردیفهای Stock انبارهای فعال قابل استفاده برای وب را قفل میکند، موجودی آزاد را محاسبه و بهترتیب از انبارهای مجاز رزرو میکند. برای درخواست تکراری کلید idempotency نیز به کار میرود. اگر manage_inventory برای تنوع غیرفعال باشد، رزرو فیزیکی انجام نمیشود. اگر allow_backorder یا allow_preorder فعال باشد و مقدار کافی نباشد، کمبود ممکن است به backordered_quantity برود. این مجوز فروش بیش از موجودی قول تأمین است، نه موجودی مخفی.
سفارش آنلاین چه تفاوتی دارد؟
در Checkout عمومی، زمان رزرو و آزادسازی بر اساس مسیر سبد، انتخاب روش پرداخت، انقضا و نتیجه پرداخت تعیین میشود. برای پرداخت موفق، منطق نهاییسازی رزرو و عملیات موجودی وجود دارد. شرایط دقیق براساس نوع کالا، روش پرداخت و کانال فروش فرق میکند؛ فرض نکنید هر رزرو بلافاصله به خروج فیزیکی تبدیل میشود. یکیشمردن ثبت پرداخت با تحویل فیزیکی گزارش انبار را گمراه میکند.
کسری و پیشفروش
اگر سفارش ۱۰۰ کیلوگرم باشد و فقط ۷۰ کیلو آزاد وجود داشته باشد، بسته به سیاست تنوع ممکن است ۷۰ کیلو رزرو و ۳۰ کیلو «منتظر تأمین» شود. این ۳۰ کیلو در انبار نیست. برای خرید جدید باید موجودی آزاد، سفارشهای باز و کالاهای در راه را جدا ببینید. در کد سرویس تخصیص مجدد کسری (allocate_backordered_inventory) وجود دارد، ولی وجود تابع به معنی فعالبودن یک اتوماسیون بیوقفه در همه محیطها نیست؛ پس پس از رسید خرید، نتیجه تخصیص را کنترل کنید.
خرید یک تن و فروش هشتصد کیلو
اگر SKU «کالای درجه یک» در واحد پایه کیلوگرم نگهداری شود، ورود معتبر ۱۰۰۰ کیلو موجودی را افزایش میدهد؛ فروش ۸۰۰ کیلو باید با تبدیل درست و رزرو/نهاییسازی همان SKU ثبت شود. ۲۰۰ کیلو باقیمانده تنها در صورت نبود رزرو، مرجوعی یا گردش دیگر با موجودی آزاد برابر است. اگر «یک تن» فقط در سفارش خرید ثبت شده ولی رسید ورود کالا قطعی نشده است، حق ندارید موجودی فروش را ۱۰۰۰ کیلو در نظر بگیرید.
خطاهای متداول انبار
- موجودی مثبت است ولی سفارش خطا میدهد: مقدار موجودی فیزیکی با موجودی آزاد فرق دارد؛ رزروها، انبار قابل فروش وب، فعالبودن انبار و SKU را بررسی کنید.
- مشتری میگوید سفارش را لغو کرده اما کالا همچنان رزرو است: وضعیت واقعی cancellation و عملیات release را در سوابق بررسی کنید؛ درخواست API تکراری یا تغییر مستقیم عدد راهحل نیست.
- بعد از پرداخت، موجودی دو بار کم شده: ببینید سفارش یا فاکتور/خروج دستی دیگری برای همان کالا ثبت شده است یا نه. ورود دوباره یک گردش خروج برای جبران اختلاف ممنوع است.
- موجودی جدید رسیده ولی backorder هنوز باز است: رسید قطعی کالا، انبار مقصد و اجرای تخصیص مرتبط را کنترل کنید؛ پیام «موجودی تأمین شد» را بدون سند ورود/تخصیص ثبت نکنید.
چکلیست کنترل روزانه
SKU، واحد، on_hand، reserved، available، backorder و فهرست سفارشهای همان تنوع را کنار هم ببینید. برای اختلاف مقدار، اولین گردش غیرمنتظره را با تاریخ و شناسه سفارش پیدا کنید. بعد از اصلاح، مطمئن شوید مقدار به شکل درست روی حسابداری و بهای تمامشده نیز اثر گذاشته؛ راهنمای حسابداری سفارش و انبار محصول را مطالعه کنید.