2017-09-07 14 views
0

Wie kann ich herausfinden, welcher Bestand zu einem bestimmten Datum in der Vergangenheit verfügbar war?Historie des verfügbaren Bestands in SAP B1

Ich weiß, wie für jedes Datum in der Vergangenheit OnHand zu erhalten:

SELECT LocType, LocCode, ItemCode, SUM(InQty-OutQty) [OnHand] 
    From OIVL 
    Where DocDate <= '7/7/2017' 
     AND ITEMCODE = 'xyz' 
    Group by LocType, LocCode, ItemCode 

Aber das erklärt nicht, was begangen wurde. Es zeigt an, was zur Hand war, aber nicht was tatsächlich verfügbar war (OnHand - Committed = Available). Also, wie konnte ich diese "Verfügbare" Nummer für Daten in der Vergangenheit bekommen?

Danke!

+0

Bitte lesen Sie [diese] (http://spaghettidba.com/2015/04/24/how-to-post- at-sql-question-on-a-public-forum /) für einige Tipps zur Verbesserung Ihrer Frage. Es ist hilfreich, Datenbankfragen mit der entsprechenden Software (MySQL, Oracle, DB2, ...) und der Version, z. 'sql-server-2014'. Unterschiede in Syntax und Funktionen beeinflussen oft die Antworten. Beachten Sie, dass 'tsql' die Auswahl einschränkt, aber die Datenbank nicht angibt. – HABO

+0

Es würde mich nicht erlauben, gute Tags für den Beitrag zu erstellen, weil ich zu neu für einen Benutzer bin. Ein sap-business-one- oder business-one-9.2-Tag wäre nett, da dies mehr eine SAP-B1-Schema/Taxonomie-Frage ist, unabhängig von der Datenbank oder anderen Technologien – MrB

+0

Was ist (OnHand - Committed = Verfügbar) in dB-Schema? –

Antwort

0

Falls dies anderen hilft .... hier ist ein Beispiel, wie Sie Ihre Artikelmenge und Kostenhistorie in SAP BusinessOne bekommen können. Übergeben Sie das Datum und das Element, für das Sie den Verlauf sehen möchten, in die Funktion. Wenn Sie den Artikelcode weglassen, werden alle Artikel zurückgegeben.

CREATE FUNCTION [dbo].[ufnStockAndCostHistory] 
 
(\t 
 
\t @EndDate DATETIME, @ItemCode NVARCHAR(255) = 'All' 
 
) 
 
RETURNS TABLE 
 
AS 
 
RETURN 
 
(
 
\t WITH Cost AS (
 
\t \t SELECT 
 
\t \t \t OINM.TransNum, 
 
\t \t \t OINM.ItemCode, 
 
\t \t \t OINM.Warehouse, 
 
\t \t \t OINM.Balance, 
 
\t \t \t OINM.CreateDate 
 
\t \t FROM OINM (NOLOCK) 
 
\t \t \t JOIN OITM (NOLOCK) ON OITM.ItemCode = OINM.ItemCode 
 
\t \t \t JOIN OITB (NOLOCK) ON OITM.ItmsGrpCod=OITB.ItmsGrpCod 
 
\t \t WHERE OINM.CreateDate <= @EndDate 
 

 
\t), 
 
\t FinalCostByWarehouse AS (
 
\t \t SELECT * 
 
\t \t FROM Cost 
 
\t \t WHERE TransNum = (
 
\t \t \t SELECT MAX(TransNum) 
 
\t \t \t FROM Cost sub 
 
\t \t \t WHERE Cost.ItemCode = sub.ItemCode 
 
\t \t \t \t AND Cost.Warehouse = sub.Warehouse) 
 
\t), 
 
\t Quantity AS (
 
\t \t SELECT 
 
\t \t \t OINM.ItemCode, 
 
\t \t \t OINM.Warehouse, 
 
\t \t \t SUM(OINM.InQty) - SUM(OINM.OutQty) [Qty] 
 
\t \t FROM OINM (NOLOCK) 
 
\t \t \t JOIN OITM (NOLOCK) ON OITM.ItemCode = OINM.ItemCode 
 
\t \t \t JOIN OITB (NOLOCK) ON OITM.ItmsGrpCod=OITB.ItmsGrpCod 
 
\t \t WHERE OINM.CreateDate <= @EndDate 
 
\t \t group by OINM.ItemCode, OINM.Warehouse 
 
\t) 
 
\t SELECT 
 
\t \t OITW.ItemCode, 
 
\t \t OITW.WhsCode, 
 
\t \t c.Balance [Cost], 
 
\t \t q.Qty [Quantity] 
 
\t FROM OITW 
 
\t \t LEFT JOIN FinalCostByWarehouse c ON OITW.ItemCode = c.ItemCode 
 
\t \t \t AND OITW.WhsCode = c.Warehouse 
 
\t \t LEFT JOIN Quantity q ON OITW.ItemCode = q.ItemCode 
 
\t \t \t AND OITW.WhsCode = q.Warehouse 
 
\t WHERE (OITW.ItemCode = @ItemCode 
 
\t \t OR @ItemCode = 'All') 
 
\t \t AND (ISNULL(c.Balance,0) > 0 
 
\t \t \t OR ISNULL(q.Qty,0) > 0) 
 
)

Verbrauch würde wie folgt aussehen:

SELECT * 
FROM ufnStockAndCostHistory('9/15/2017','B107A-12HB') 
Verwandte Themen