جدول INV1 في SAP Business One (فاتورة المبيعات (الأسطر))
INV1 هو جدول SAP Business One الذي يخزن أسطر فواتير المبيعات: الصنف، والكمية، والسعر، وإجمالي السطر، والمستودع. ليس فيه بيانات رأس خاصة به، لذلك تربطه بـ OINV عبر DocEntry للحصول على التواريخ والعميل والحالة.
الحقول الرئيسية في INV1
| الحقل | ما يحتويه |
|---|---|
DocEntry | مفتاح الفاتورة. يُربط بـ OINV.DocEntry. |
LineNum | رقم السطر داخل الفاتورة، يبدأ من 0. |
ItemCode | الصنف المبيع. يُربط بـ OITM.ItemCode. فارغ في فواتير الخدمات. |
Dscription | وصف السطر (يُكتب بحرف i واحد ودون e بعد s). |
Quantity | الكمية بوحدة المبيعات. |
Price | سعر الوحدة بعد خصم السطر. |
PriceBefDi | سعر الوحدة قبل خصم السطر. |
LineTotal | مبلغ السطر بالعملة المحلية، قبل الضريبة وقبل خصم الرأس. |
WhsCode | المستودع الذي خرج منه المخزون. يُربط بـ OWHS.WhsCode. |
SlpCode | موظف المبيعات على السطر. |
BaseType / BaseEntry / BaseLine | المستند المصدر الذي نُسخ منه السطر (مثلًا 15 = مذكرة تسليم، 17 = أمر بيع). |
كيف يرتبط INV1 بالجداول الأخرى
INV1 هو جدول أسطر OINV. ينتمي كل صف إلى فاتورة واحدة بالضبط عبر DocEntry، و DocEntry + LineNum هو المفتاح الفريد للسطر. التواريخ والعميل وحالة الإلغاء وخصم الرأس موجودة في OINV، لذلك يربط كل استعلام على INV1 تقريبًا بـ OINV أيضًا.
عمليات الربط الشائعة
INV1 T1 INNER JOIN OINV T0 ON T1.DocEntry = T0.DocEntry(الرأس)INV1 T1 LEFT JOIN OITM T2 ON T1.ItemCode = T2.ItemCode(البيانات الرئيسية للصنف)INV1 T1 LEFT JOIN OWHS T3 ON T1.WhsCode = T3.WhsCode(المستودع)
متى تستخدم جدول INV1
استخدم INV1 لكل ما يخص الصنف: الأكثر مبيعًا، وبطيئو الحركة، والمبيعات حسب مجموعة الأصناف أو المستودع، والكميات المباعة في فترة. للقيم تذكّر خصم الرأس؛ أما للكميات فالأسطر هي المصدر الصحيح.
مثال على استعلام: الكمية والقيمة الصافية المباعة لكل صنف
SQL Server
SELECT T1.ItemCode, T1.Dscription, SUM(T1.Quantity) AS QtySold, SUM(T1.LineTotal * (1 - T0.DiscPrcnt / 100.0)) AS NetValue FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry WHERE T0.CANCELED = 'N' AND T0.DocDate >= '20260101' GROUP BY T1.ItemCode, T1.Dscription ORDER BY NetValue DESC
SAP HANA (أسماء الأعمدة بين علامتي اقتباس مزدوجتين)
SELECT T1."ItemCode", T1."Dscription", SUM(T1."Quantity") AS "QtySold", SUM(T1."LineTotal" * (1 - T0."DiscPrcnt" / 100.0)) AS "NetValue" FROM OINV T0 INNER JOIN INV1 T1 ON T0."DocEntry" = T1."DocEntry" WHERE T0."CANCELED" = 'N' AND T0."DocDate" >= '20260101' GROUP BY T1."ItemCode", T1."Dscription" ORDER BY "NetValue" DESC
الصق أيًّا من النسختين في الأدوات ← الاستعلامات ← مولّد الاستعلامات (Tools → Queries → Query Generator). تحتاج اللهجة الأخرى لاستعلامك الخاص؟ استخدم محوّل SQL إلى HANA.
خطأ شائع: جمع LineTotal يضخّم المبيعات
LineTotal قبل خصم الرأس المُدخل في OINV.DiscPrcnt. إذا كان مستخدموك يمنحون خصومات على الرأس، فسيكون SUM(LineTotal) أعلى من تقرير تحليل المبيعات. اضرب في (1 - T0.DiscPrcnt / 100) كما في الاستعلام أعلاه، واطرح أسطر الإشعارات الدائنة للمبيعات (RIN1) بالمعامل نفسه. انظر حل عدم تطابق خصم الرأس.
استعلامات جاهزة تستخدم INV1
- أعلى 20 صنفًا مبيعًا: الأصناف الأكثر مبيعًا حسب قيمة المبيعات، مع الكمية المباعة، لفترة زمنية.
- الأصناف بطيئة الحركة (بلا مبيعات منذ 90 يومًا): الأصناف المتوفرة في المخزون التي لم تُفوتر خلال آخر 90 يومًا.
جداول ذات صلة
OINV (فاتورة المبيعات (الرأس)) · ORIN (الإشعار الدائن للمبيعات (الرأس)) · OITM (الأصناف (البيانات الرئيسية للصنف)) · OITW (مخزون الصنف حسب المستودع) · ابحث في كل جداول SAP Business One
المصادر: توثيق SAP Business One و SDK (مرجع جداول قاعدة البيانات في DI API)، بوابة SAP Help.
جاهز للبدء؟
أخبرنا بما تحتاجه. ستحصل على إجابة تقنية واضحة ونطاق عمل محدد وسعر ثابت، عادةً خلال 24 ساعة.
