SQL bestätigter Liefertermin und Lieferstatus EK

NGHNR

Neues Mitglied
Hallo zusammen,

aktuell habe ich 2 Themen bei denen ich nicht weiterkomme.

Gerne würde ich den bestätigten Liefertermin aus den EK-Belegen per SQL abfragen. Leider finde ich nur den "vwKHK_AC_EKPositionen.Liefertermin". Wisst ihr in welcher Tabelle der bestätigte Liefertermin auftaucht?

Zudem würde ich gerne den Lieferstatus des der EKPositionen erfassen. Wenn Position geliefert wurde, dann -1, sonst 0. In der "vwKHK_AC_EKPositionen.GGGeliefert" tauchen beide Belegarten auf. Wareneingang (ELL) und Bestellung (EBB). Dies führt leider dazu, dass durch den LeftJoin die Positionen dann doppelt auftauchen.
Gibt es eine Möglichkeit eine SQL Abfrage so zu gestalten, dass wenn es nur einen Bestellbeleg gibt, der Wert auf 0 steht. Sobald ein Wareneingangsbeleg auftaucht wird -1 ausgegeben?

Anbei der aktuelle SQL Befehl, ich hoffe niemanden hiermit zu überfahren:)
SELECT DISTINCT KHKVKVorgaengePositionen.VorID AS VKVorgangsnummer, KHKVKVorgaengePositionen.VorPosID AS VKBelegnummer, KHKVKBelege.BelID, KHKVKBelege.Belegart, KHKVKBelege.Vertreter, KHKVKBelege.A0Empfaenger, KHKVKBelege.USER_Liefertermin AS VK_USER_Liefertermin, KHKVKBelege.Liefertermin AS VKLiefertermin, MIN(KHKVKBelege.A0Matchcode) AS A0Matchcode, KHKVKBelegePositionen.Artikelnummer, KHKEKBelegePositionenBedarfVerursacher.BelPosID, vwKHK_AC_EKPositionen.GGBestellt AS EK_Bestellt, KHKEKBelege.VorID AS 'EK_Vorgangs_ID', vwKHK_AC_EKPositionen.GGGeliefert AS EK_Geliefert, vwKHK_AC_EKPositionen.Liefertermin AS EK_Liefertermin, KHKVKBelegePositionen.Bezeichnung1, MIN(KHKVKBelegePositionen.Lieferwoche) AS Lieferwoche, MIN(KHKVKBelegePositionen.Liefertermin) AS Liefertermin, MIN(KHKVKBelegePositionen.[Index]) AS PosIndex, KHKVKBelegePositionen.Menge, KHKVKBelegePositionen.Mengeneinheit, KHKVKBelegePositionen.Einzelpreis AS VKEinzelpreis, KHKVKBelegePositionen.Gesamtpreis AS VKGesamtpreis, SUM(KHKVKBelegePositionen.GesamtpreisInternEW) AS Preis, (CAST(SUM(KHKVKBelegePositionen.GesamtpreisInternEW) AS FLOAT) / CAST(MIN(KHKVKVorgaengePositionen.GGBestellt) AS FLOAT)) * (MIN(KHKVKVorgaengePositionen.GGBestellt) - MIN(KHKVKVorgaengePositionen.GGGeliefert)) * (KHKVKVorgaenge.GGErfuellt + 1) AS OffWert, (CAST(SUM(KHKVKBelegePositionen.GesamtpreisInternEW) AS FLOAT) / CAST(MIN(KHKVKVorgaengePositionen.GGBestellt) AS FLOAT)) * (MIN(KHKVKVorgaengePositionen.GGBestellt) - MIN(KHKVKVorgaengePositionen.GGBerechnet)) AS 'AB - RE', (MIN(KHKVKVorgaengePositionen.GGBestellt) - MIN(KHKVKVorgaengePositionen.GGGeliefert)) AS MengenDiff, (MIN(KHKVKVorgaengePositionen.GGBestellt) - MIN(KHKVKVorgaengePositionen.GGBerechnet)) AS 'Menge bestellt - berechnet', KHKVKVorgaenge.Erstanlage AS VKErstanlage, KHKArtikel.Lagerfuehrung, KHKVKVorgaenge.GGErfuellt FROM (([...].dbo.KHKVKVorgaenge INNER JOIN[...].dbo.KHKVKVorgaengePositionen ON(KHKVKVorgaenge.Mandant = KHKVKVorgaengePositionen.Mandant) AND(KHKVKVorgaenge.VorID = KHKVKVorgaengePositionen.VorID))INNER JOIN[...].dbo.KHKVKBelegePositionen ON(KHKVKVorgaengePositionen.VorPosID = KHKVKBelegePositionen.VorPosID) AND(KHKVKVorgaengePositionen.Mandant = KHKVKBelegePositionen.Mandant)) INNER JOIN[...].dbo.KHKVKBelege ON(KHKVKBelegePositionen.Mandant = KHKVKBelege.Mandant) AND(KHKVKBelegePositionen.BelID = KHKVKBelege.BelID)LEFT JOIN[...].dbo.KHKEKBelegePositionenBedarfVerursacher ON(KHKVKVorgaengePositionen.VorPosID = KHKEKBelegePositionenBedarfVerursacher.ReferenzID) LEFT JOIN[...].dbo.vwKHK_AC_EKPositionen ON(KHKEKBelegePositionenBedarfVerursacher.BelPosID = vwKHK_AC_EKPositionen.BelPosID) LEFT JOIN[...].dbo.KHKLagerplatzbestaende ON(KHKVKBelegePositionen.Artikelnummer = KHKLagerplatzbestaende.Artikelnummer) AND(KHKLagerplatzbestaende.Lagerkennung = 'Bestand') LEFT JOIN[...].dbo.KHKArtikel ON(KHKArtikel.Artikelnummer = KHKVKBelegePositionen.Artikelnummer)
LEFT JOIN KHKEKBelegePositionen ON (KHKEKBelegePositionenBedarfVerursacher.BelPosID = KHKEKBelegePositionen.BelPosID)
LEFT JOIN KHKEKBelege ON(KHKEKBelege.BelID = KHKEKBelegePositionen.BelID)
WHERE KHKEKBELEGE.Belegkennzeichen IN ('EBB' ,'ELL') AND KHKVKVorgaengePositionen.GGBestellt > 0 AND KHKVKVorgaengePositionen.PosType = 1 AND KHKVKBelege.Mandant = 1 AND KHKVKBelege.Belegkennzeichen IN('VSD','VSS','VVA','VVX', 'VFR', 'VSL', 'VFS') AND KHKVKBelege.SaveStatus = 2 GROUP BY KHKEKBelegePositionen.IstErledigt, KHKEKBelege.VorID, KHKArtikel.Lagerfuehrung, KHKVKVorgaengePositionen.GGGeliefert, KHKVKVorgaengePositionen.VorPosID, KHKVKBelegePositionen.Artikelnummer, KHKVKBelege.BelID, KHKVKBelege.Belegart, KHKVKBelege.Vertreter, KHKVKBelege.USER_Liefertermin, KHKVKBelege.Liefertermin, KHKVKBelegePositionen.Menge, KHKVKBelegePositionen.Mengeneinheit, KHKVKBelegePositionen.Einzelpreis, KHKVKBelegePositionen.Gesamtpreis, KHKEKBelegePositionenBedarfVerursacher.BelPosID, vwKHK_AC_EKPositionen.GGBestellt, vwKHK_AC_EKPositionen.GGGeliefert, vwKHK_AC_EKPositionen.Liefertermin, KHKVKBelegePositionen.Bezeichnung1, KHKVKBelege.A0Empfaenger, KHKVKVorgaenge.GGErfuellt, KHKVKVorgaengePositionen.VorID, KHKVKVorgaenge.Erstanlage
 
Der (bestätigte) Liefertermin der Einkaufsbelegposition steht einfach im Feld "KHKEKBelegePositionen.Liefertermin" und gilt dann als bestätigt, wenn das Feld "Lieferavis" den Wert -1 hat.
Die offene Menge kannst Du analog zum Verkauf auf Basis der "VorPosID" aus der Tabelle "KHKEKVorgaengePositionen" ermitteln (per Unterabfrage aus "GGBestellt" - "GGGeliefert" + "GGRetour", ggf. unter Berücksichtigung von "GGErfuellt"). Wenn Du nur ausgeben möchtest, ob es zur der Vorgangsposition einen Wareneingang gibt (unabhängig von der Menge), kannst Du nur "GGGeliefert" abfragen.

Diese komischen Views würde ich auf jeden Fall rausschmeissen.
Und die Belegarten würde ich ggf. auf Basis der Wirkung filtern (KHKVKBelegarten/KHKEKBelegarten).

Und wenn man bei so einer Abfrage den DISTINCT-Befehl braucht, spricht das nicht für eine sinnvolle Abfrage, ohne dass ich mir das bisherige Konstrukt näher angeschaut habe...
 
Zuletzt bearbeitet:
Zurück
Oben