المخزون حسب المستودع
الكمية المتوفرة والمحجوزة والمطلوبة والمتاحة لكل صنف ومستودع.
الأداة
SELECT T0.ItemCode, T1.ItemName, T0.WhsCode, T0.OnHand, T0.IsCommited, T0.OnOrder, T0.OnHand - T0.IsCommited + T0.OnOrder AS Available FROM OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode WHERE T0.OnHand <> 0 OR T0.IsCommited <> 0 OR T0.OnOrder <> 0 ORDER BY T0.ItemCode, T0.WhsCode
SELECT T0."ItemCode", T1."ItemName", T0."WhsCode", T0."OnHand", T0."IsCommited", T0."OnOrder", T0."OnHand" - T0."IsCommited" + T0."OnOrder" AS "Available" FROM OITW T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" WHERE T0."OnHand" <> 0 OR T0."IsCommited" <> 0 OR T0."OnOrder" <> 0 ORDER BY T0."ItemCode", T0."WhsCode"
ما الذي يجيب عنه هذا الاستعلام
مندوب مبيعات على الهاتف مع عميل ويحتاج معرفة ما إذا كان يستطيع الالتزام بصنف ومن أي مستودع. يُظهر هذا الاستعلام ما هو موجود فعليًا، وما هو محجوز بالفعل لطلبات أخرى، وما هو في الطريق.
مثال على النتائج
قيم تجريبية توضيحية. أعمدتك هي نفسها؛ والأرقام تأتي من شركتك.
| ItemCode | ItemName | WhsCode | OnHand | IsCommited | OnOrder | Available |
|---|---|---|---|---|---|---|
| A00001 | Laser Printer 1420 | 01 | 120 | 30 | 50 | 140 |
| A00001 | Laser Printer 1420 | 02 | 40 | 0 | 0 | 40 |
| A00002 | Inkjet Printer 600 | 01 | 15 | 20 | 10 | 5 |
| A00003 | Toner Cartridge Color | 01 | 0 | 8 | 25 | 17 |
SQL Server مقابل SAP HANA
لا يتغير SQL إلا في الاقتباس؛ ويجب كتابة عمود SAP ذي الإملاء الخاطئ "IsCommited" (بحرف t واحد) بين علامتي اقتباس مزدوجتين. وتعمل شروط OR وحساب Available بالطريقة نفسها في HANA.
صيغ بديلة
المستودعات القابلة للاحتساب فقط (Nettable)
SQL Server
SELECT T0.ItemCode, T0.WhsCode, T0.OnHand, T0.IsCommited, T0.OnOrder, T0.OnHand - T0.IsCommited + T0.OnOrder AS Available FROM OITW T0 INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode WHERE T2.Nettable = 'Y' AND (T0.OnHand <> 0 OR T0.IsCommited <> 0 OR T0.OnOrder <> 0) ORDER BY T0.ItemCode, T0.WhsCode
SAP HANA
SELECT T0."ItemCode", T0."WhsCode", T0."OnHand", T0."IsCommited", T0."OnOrder", T0."OnHand" - T0."IsCommited" + T0."OnOrder" AS "Available" FROM OITW T0 INNER JOIN OWHS T2 ON T0."WhsCode" = T2."WhsCode" WHERE T2."Nettable" = 'Y' AND (T0."OnHand" <> 0 OR T0."IsCommited" <> 0 OR T0."OnOrder" <> 0) ORDER BY T0."ItemCode", T0."WhsCode"
الإجمالي لكل صنف في كل المستودعات
SQL Server
SELECT T0.ItemCode, T1.ItemName, SUM(T0.OnHand) AS OnHand, SUM(T0.IsCommited) AS IsCommited, SUM(T0.OnOrder) AS OnOrder, SUM(T0.OnHand - T0.IsCommited + T0.OnOrder) AS Available FROM OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode GROUP BY T0.ItemCode, T1.ItemName ORDER BY T0.ItemCode
SAP HANA
SELECT T0."ItemCode", T1."ItemName", SUM(T0."OnHand") AS "OnHand", SUM(T0."IsCommited") AS "IsCommited", SUM(T0."OnOrder") AS "OnOrder", SUM(T0."OnHand" - T0."IsCommited" + T0."OnOrder") AS "Available" FROM OITW T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" GROUP BY T0."ItemCode", T1."ItemName" ORDER BY T0."ItemCode"
إخفاء الصفوف ذات المخزون الصفري
SQL Server
SELECT T0.ItemCode, T1.ItemName, T0.WhsCode, T0.OnHand FROM OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode WHERE T0.OnHand > 0 ORDER BY T0.ItemCode, T0.WhsCode
SAP HANA
SELECT T0."ItemCode", T1."ItemName", T0."WhsCode", T0."OnHand" FROM OITW T0 INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode" WHERE T0."OnHand" > 0 ORDER BY T0."ItemCode", T0."WhsCode"
المخزون على مستوى موقع التخزين (عند تفعيل مواقع التخزين)
SQL Server
SELECT T0.ItemCode, T1.WhsCode, T1.BinCode, T0.OnHandQty FROM OIBQ T0 INNER JOIN OBIN T1 ON T0.BinAbs = T1.AbsEntry WHERE T0.OnHandQty <> 0 ORDER BY T0.ItemCode, T1.BinCode
SAP HANA
SELECT T0."ItemCode", T1."WhsCode", T1."BinCode", T0."OnHandQty" FROM OIBQ T0 INNER JOIN OBIN T1 ON T0."BinAbs" = T1."AbsEntry" WHERE T0."OnHandQty" <> 0 ORDER BY T0."ItemCode", T1."BinCode"
الأخطاء الشائعة وحلولها
- المخزون يبدو أعلى مما يستطيع المستودع بيعه: المستودعات غير القابلة للاحتساب (مثل البضاعة التالفة أو بضاعة الأمانة) مشمولة. اربط OWHS وصفِّ بالشرط Nettable = 'Y'.
- الإجماليات لا تطابق OITM.OnHand لكل مستودع: OITM.OnHand هو الإجمالي في كل المستودعات. الكمية لكل مستودع موجودة في OITW فقط.
- Invalid column name 'IsCommitted': يكتب SAP B1 عمود الكمية المحجوزة IsCommited بحرف t واحد. استخدم T0.IsCommited.
- Available يبدو مرتفعًا جدًا للطلبات العاجلة: يضيف Available الكمية OnOrder، وهي تشمل أوامر شراء قد تصل بعد أسابيع. استخدم OnHand - IsCommited لما يمكن شحنه اليوم.
- أصناف الخدمات ليست في القائمة: أصناف المخزون فقط لها صفوف في OITW. الأصناف غير المخزنية وأصناف الخدمات لا تظهر أبدًا، وهذا متوقع.
استعلامات ذات صلة
مرجع الجداول: جدول OITW (مخزون الصنف حسب المستودع) · جدول OITM (الأصناف (البيانات الرئيسية للصنف))
ثلاث خطوات بدون تسجيل
انسخ النسخة المناسبة
استخدم تبويب SQL Server لقواعد بيانات MS SQL، وتبويب HANA لـ SAP B1 على HANA.
افتح مولّد الاستعلامات
في SAP Business One اذهب إلى الأدوات ← الاستعلامات ← مولّد الاستعلامات (Tools → Queries → Query Generator)، والصق الاستعلام وانقر تنفيذ (Execute).
احفظ وشارك
انقر حفظ، واختر فئة، وسمِّ الاستعلام. يستطيع فريقك تشغيله من مدير الاستعلامات.
أسئلة حول هذه الأداة
كيف أشغّل استعلام «المخزون حسب المستودع» في SAP Business One؟
انسخ النسخة التي تناسب قاعدة بياناتك، وافتح الأدوات ← الاستعلامات ← مولّد الاستعلامات، والصقه في مربع SQL وانقر تنفيذ. احفظه لإعادة استخدامه لاحقًا.
ما الجداول التي يستخدمها هذا الاستعلام؟
يقرأ OITW، OITM من المخطط القياسي لـ SAP Business One. لا يحتاج إلى أي حقول معرّفة من قِبل المستخدم.
هل يمكن تحويله إلى لوحة معلومات أو تنبيه؟
نعم. نحوّل الاستعلامات إلى تقارير Crystal، أو تقارير Excel تتحدّث تلقائيًا، أو تنبيهات SAP B1، أو رسائل واتساب للمديرين.
مصممة لفرق SAP Business One
تحتاج هذا داخل SAP Business One؟
نطوّر إضافات وتقارير وتكاملات لـ SAP B1 على SQL Server و HANA. أخبرنا بما تحتاجه واحصل على سعر ثابت، عادةً خلال 24 ساعة.
