Tabelle OITW in SAP Business One (Artikelbestand pro Lager)

OITW ist die Tabelle in SAP Business One, die den Bestand jedes Artikels in jedem Lager enthält: Lagerbestand, in Kundenaufträgen reservierte Menge und bei Lieferanten bestellte Menge. Ihr Schlüssel ist ItemCode plus WhsCode; sie wird über ItemCode mit OITM und über WhsCode mit OWHS verknüpft.

Wichtige Felder der Tabelle OITW

FeldInhalt
ItemCodeArtikel. Verknüpft mit OITM.ItemCode.
WhsCodeLager. Verknüpft mit OWHS.WhsCode.
OnHandPhysischer Bestand in diesem Lager.
IsCommitedIn offenen Kundenaufträgen reservierte Menge in diesem Lager.
OnOrderMenge in offenen Bestellungen für dieses Lager.
MinStockMindestbestand dieses Artikels in diesem Lager.
AvgPriceArtikelkosten in diesem Lager, wenn die Kosten pro Lager geführt werden.
LockedY, wenn der Artikel in diesem Lager gesperrt ist.

Wie OITW mit anderen Tabellen zusammenhängt

OITW ist eine Untertabelle von OITM: Ein Artikel hat für jedes zugeordnete Lager eine OITW-Zeile, auch wenn der Bestand null ist. Es handelt sich nicht um eine Positionstabelle eines Belegs, daher gibt es keinen DocEntry; das Paar ItemCode + WhsCode identifiziert eine Zeile. Sind Lagerplätze aktiv, kommt in OIBQ und OBIN eine weitere Ebene hinzu.Das Lager selbst (Bezeichnung, Nettingkennzeichen, Lagerplätze) steht in derTabelle OWHS.

Typische Joins

  • OITW T0 INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode (Artikelbezeichnung, Gruppe)
  • OITW T0 INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode (Lagerbezeichnung)

Wann Sie die Tabelle OITW verwenden

Lesen Sie OITW immer dann, wenn die Frage lautet: „Wie viel von diesem Artikel liegt in jenem Lager?“ Also für die Verfügbarkeit im Vertrieb, Bestandslisten pro Niederlassung, Nachbestellung pro Lager und die Bestandsbewertung pro Lager. Der verfügbare Bestand ist meist OnHand - IsCommited + OnOrder, oder OnHand - IsCommited, wenn Sie offene Bestellungen nicht mitzählen.

Beispielabfrage: Verfügbarer Bestand pro Artikel und Lager

SQL Server

SELECT T0.ItemCode, T1.ItemName, T0.WhsCode, T2.WhsName, 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
INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode
WHERE T0.OnHand <> 0 OR T0.IsCommited <> 0
ORDER BY T0.ItemCode, T0.WhsCode

SAP HANA (Spaltennamen in doppelten Anführungszeichen)

SELECT T0."ItemCode", T1."ItemName", T0."WhsCode", T2."WhsName", 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"
INNER JOIN OWHS T2 ON T0."WhsCode" = T2."WhsCode"
WHERE T0."OnHand" <> 0 OR T0."IsCommited" <> 0
ORDER BY T0."ItemCode", T0."WhsCode"

Fügen Sie eine der beiden Versionen unter Extras → Abfragen → Abfragegenerator ein. Sie brauchen den anderen Dialekt für Ihre eigene Abfrage? Nutzen Sie den SQL-zu-HANA-Konverter.

Gesamtbestand über mehrere Lager (nur disponierbare)

Für eine einzige Bestandszahl pro Artikel über mehrere Lager summieren Sie die OITW-Zeilen pro Artikel. Verknüpfen Sie OWHS über WhsCode und behalten Sie nur disponierbare Lager (OWHS.Nettable = 'Y', also die Lager, die die Bedarfsplanung berücksichtigt). So bleiben Retouren- oder Qualitätslager, die als nicht disponierbar markiert sind, außen vor. Lagerbestand minus reservierte Menge ist das, was Sie noch zusagen können; addieren Sie OnOrder für den verfügbaren Bestand inklusive offener Bestellungen.

SQL Server

SELECT T0.ItemCode, T1.ItemName,
  SUM(T0.OnHand) AS InStock,
  SUM(T0.IsCommited) AS Committed,
  SUM(T0.OnHand - T0.IsCommited) AS FreeStock,
  SUM(T0.OnHand - T0.IsCommited + T0.OnOrder) AS Available
FROM OITW T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN OWHS T2 ON T0.WhsCode = T2.WhsCode
WHERE T2.Nettable = 'Y'
GROUP BY T0.ItemCode, T1.ItemName
ORDER BY T0.ItemCode

SAP HANA

SELECT T0."ItemCode", T1."ItemName",
  SUM(T0."OnHand") AS "InStock",
  SUM(T0."IsCommited") AS "Committed",
  SUM(T0."OnHand" - T0."IsCommited") AS "FreeStock",
  SUM(T0."OnHand" - T0."IsCommited" + T0."OnOrder") AS "Available"
FROM OITW T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
INNER JOIN OWHS T2 ON T0."WhsCode" = T2."WhsCode"
WHERE T2."Nettable" = 'Y'
GROUP BY T0."ItemCode", T1."ItemName"
ORDER BY T0."ItemCode"

Typischer Fallstrick: IsCommited mit einem t und Zeilen ohne Bestand

Die Spalte für die reservierte Menge heißt IsCommited, IsCommitted führt daher zum Fehler „invalid column“. Außerdem führt OITW für jedes zugeordnete Lager eine Zeile, auch ohne Bestand. Filtern Sie deshalb auf OnHand <> 0 (oder auf OnHand, IsCommited und OnOrder), damit die Liste kurz bleibt. Siehe Abfrage: Bestand pro Lager mit Varianten.

Fertige Abfragen, die OITW verwenden

  • Bestand pro Lager: Lagerbestand, bestätigte, bestellte und verfügbare Menge pro Artikel und Lager.
  • Lagerwert pro Lager: Bestandsmenge multipliziert mit dem Durchschnittspreis des Artikels, summiert pro Lager.

Fragen zur Tabelle OITW

Warum weicht die Summe aus OITW vom OnHand des Artikels in OITM ab?

OITM.OnHand ist der Bestand des Artikels über alle seine Lager, OITW enthält dagegen eine Zeile pro Lager. Die Summe von OITW.OnHand über alle Zeilen des Artikels ergibt denselben Wert. Eine Abweichung entsteht daher fast immer in der Abfrage: durch einen Filter auf Lager (nur disponierbare, nur aktive, nur eine Niederlassung) oder durch einen Join, der Zeilen verliert, zum Beispiel ein INNER JOIN auf OWHS mit einer zusätzlichen Bedingung. Vergleichen Sie beide Werte zuerst ganz ohne Lagerfilter und fügen Sie die Filter dann einzeln wieder hinzu.

Verwandte Tabellen

OITM (Artikel (Artikelstamm)) · OWHS (Lager) · OINM (Lagerjournal (Bestandsprüfung)) · ORDR (Kundenauftrag (Kopf)) · INV1 (Ausgangsrechnung (Positionen)) · alle SAP-Business-One-Tabellen durchsuchen

Quellen: Dokumentation und SDK zu SAP Business One (Referenz der DI-API-Datenbanktabellen), SAP Help Portal.

Bereit für den Start?

Sagen Sie uns, was Sie brauchen. Sie erhalten eine klare technische Antwort, einen festen Leistungsumfang und einen Preis, in der Regel innerhalb von 24 Stunden.