أعلى 20 صنفًا مبيعًا
الأصناف الأكثر مبيعًا حسب قيمة المبيعات، مع الكمية المباعة، لفترة زمنية.
الأداة
SELECT TOP 20 T1.ItemCode, T1.Dscription AS ItemName, SUM(T1.Quantity) AS QtySold, SUM(T1.LineTotal * (1 - T0.DiscPrcnt / 100.0)) AS SalesValue FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.CANCELED = 'N' AND T0.DocDate BETWEEN '[%0]' AND '[%1]' GROUP BY T1.ItemCode, T1.Dscription ORDER BY SalesValue DESC
SELECT TOP 20 T1."ItemCode", T1."Dscription" AS "ItemName", SUM(T1."Quantity") AS "QtySold", SUM(T1."LineTotal" * (1 - T0."DiscPrcnt" / 100.0)) AS "SalesValue" FROM OINV T0 INNER JOIN INV1 T1 ON T0."DocEntry" = T1."DocEntry" WHERE T0."CANCELED" = 'N' AND T0."DocDate" BETWEEN '[%0]' AND '[%1]' GROUP BY T1."ItemCode", T1."Dscription" ORDER BY "SalesValue" DESC
ما الذي يجيب عنه هذا الاستعلام
يخطط فريق المشتريات لمشتريات الربع القادم ويريد معرفة أي 20 صنفًا حققت أعلى إيراد في الفترة الماضية، وكم وحدة تطلّب ذلك. يجيب الاستعلام عن سؤال: أي المنتجات تستحق أولوية في المخزون وأيها مجرد ضجيج.
مثال على النتائج
قيم تجريبية توضيحية. أعمدتك هي نفسها؛ والأرقام تأتي من شركتك.
| ItemCode | ItemName | QtySold | SalesValue |
|---|---|---|---|
| A00001 | Laser Printer 1420 | 42 | 25200 |
| A00005 | Toner Cartridge Black | 310 | 13950 |
| A00012 | Wireless Keyboard | 185 | 7400 |
| A00007 | Paper A4 Box | 520 | 5720 |
SQL Server مقابل SAP HANA
تبقى SELECT TOP 20 كما هي، لأن SAP HANA يقبل أيضًا TOP n (ويعمل LIMIT 20 في النهاية كذلك). كل ما عدا ذلك هو اقتباس المعرّفات، بما فيها الاسم المستعار "SalesValue" المستخدم في ORDER BY.
الأخطاء الشائعة وحلولها
- Invalid column name 'Description': عمود وصف السطر في SAP B1 يُكتب Dscription (بلا حرف e). استخدم T1.Dscription في SELECT وفي GROUP BY.
- الصنف نفسه يظهر مرتين ضمن أعلى 20: يجمّع الاستعلام حسب وصف السطر، فالصنف الذي عُدّل اسمه في بعض الفواتير ينقسم إلى صفين. جمّع حسب T1.ItemCode فقط واربط OITM لجلب ItemName الحالي.
- البضاعة المرتجعة لا تُطرح: تُقرأ فواتير المبيعات (INV1) فقط. أضف UNION ALL من RIN1/ORIN بقيم Quantity و LineTotal سالبة إذا كانت المرتجعات مؤثرة في عملك.
- الإجماليات لا تطابق تقرير تحليل المبيعات (خصم الرأس): الخصم المُدخل على رأس المستند (OINV.DiscPrcnt) ليس داخل INV1.LineTotal، لذلك يضخّم SUM(T1.LineTotal) العادي المبيعات. الاستعلام أعلاه يطبّقه: SUM(T1.LineTotal * (1 - T0.DiscPrcnt / 100.0)) (وفي HANA: SUM(T1."LineTotal" * (1 - T0."DiscPrcnt" / 100.0))). ويجب طرح الإشعارات الدائنة (ORIN/RIN1) بالمعامل نفسه باستخدام ORIN.DiscPrcnt. انظر عدم تطابق إجمالي المبيعات في SAP B1: حل مشكلة خصم الرأس.
استعلامات ذات صلة
مرجع الجداول: جدول OINV (فاتورة المبيعات (الرأس)) · جدول INV1 (فاتورة المبيعات (الأسطر))
ثلاث خطوات بدون تسجيل
انسخ النسخة المناسبة
استخدم تبويب SQL Server لقواعد بيانات MS SQL، وتبويب HANA لـ SAP B1 على HANA.
افتح مولّد الاستعلامات
في SAP Business One اذهب إلى الأدوات ← الاستعلامات ← مولّد الاستعلامات (Tools → Queries → Query Generator)، والصق الاستعلام وانقر تنفيذ (Execute).
احفظ وشارك
انقر حفظ، واختر فئة، وسمِّ الاستعلام. يستطيع فريقك تشغيله من مدير الاستعلامات.
أسئلة حول هذه الأداة
كيف أشغّل استعلام «أعلى 20 صنفًا مبيعًا» في SAP Business One؟
انسخ النسخة التي تناسب قاعدة بياناتك، وافتح الأدوات ← الاستعلامات ← مولّد الاستعلامات، والصقه في مربع SQL وانقر تنفيذ. احفظه لإعادة استخدامه لاحقًا.
ما الجداول التي يستخدمها هذا الاستعلام؟
يقرأ OINV، INV1 من المخطط القياسي لـ SAP Business One. لا يحتاج إلى أي حقول معرّفة من قِبل المستخدم.
ماذا أُدخل عندما تفتح نافذة الاختيار؟
يستخدم هذا الاستعلام معاملات: [%0] = من تاريخ، [%1] = إلى تاريخ. يعرض SAP B1 نافذة اختيار لكل معامل عند تشغيل الاستعلام.
هل يمكن تحويله إلى لوحة معلومات أو تنبيه؟
نعم. نحوّل الاستعلامات إلى تقارير Crystal، أو تقارير Excel تتحدّث تلقائيًا، أو تنبيهات SAP B1، أو رسائل واتساب للمديرين.
مصممة لفرق SAP Business One
تحتاج هذا داخل SAP Business One؟
نطوّر إضافات وتقارير وتكاملات لـ SAP B1 على SQL Server و HANA. أخبرنا بما تحتاجه واحصل على سعر ثابت، عادةً خلال 24 ساعة.
