Neu Bestandsüberischt bzw. MHD-Liste auf Lager-Packliste (notfalls Pickliste)

Se David

Aktives Mitglied
4. Januar 2016
31
2
In der Artikelansicht kann man ja unter "Bestandsüberischt" die verschiedenen Stückanzahlen pro MHD einsehen - ich hätte das auch gern auf der Lager-Packliste oder zumindest das "älteste" MHD eines Produktes (damit Picker FIFO einfacher kontrollieren können). Variable gibt es offenbar keine?

Kann man das irgendwie über Direkt_SQL hinzimmern, dass man im besten Fall eben diese Bestandsübersicht oder zumindest das älteste vorhandene MHD eines Produktes auf der Packliste ausgibt?

Falls nicht auf der Packliste, würden wir eventuell sogar auf Picklisten umsteigen, lieber wäre uns aber die Lager-Packliste. (ich weiß, dass die etwas outdated ist...).

Vielen Dank im Voraus und liebe Grüße, David
 

Se David

Aktives Mitglied
4. Januar 2016
31
2
ich habe gerade kleine Fortschritte gemacht:

JTL_DirectQuery ("SELECT dMHD, fAnzahlAktuell FROM tWarenLagerEingang where fAnzahlAktuell > 0 and kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer))

funktioniert noch nicht ganz, ich bekomme nur das MHD, aber ich muss wohl erst lernen, wie man korrekt mit diesen DirectQuery Abfragen umgeht, um an alle Informationen zu kommen :)
 

Se David

Aktives Mitglied
4. Januar 2016
31
2
ich habe es offengesagt aufgeben, die Geschichte schön und elegant zu lösen und da ich nur die maximal 2 ältesten MHD-Stufen benötige, habe ich einfach 2 Abfragen (und ja ich weiß, man hätte wohl noch mit Variablen usw arbeiten können...)
also schlampig gelöst, aber vl hilft es jemanden:

MHD Stufe 1: (kein Offset, einfach das erste Ergebnis):
IF(JTL_DirectQuery ("SELECT TOP(1) fAnzahlAktuell FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 AND kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer)) > 0, LEFT$(JTL_DirectQuery ("SELECT TOP(1) dMHD FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 AND kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer)),10) +" - " + FStr$(JTL_DirectQuery ("SELECT TOP(1) fAnzahlAktuell FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 AND kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer)),"?&") + " Stk")

MHD-Stufe 2 (Offset 1):
IF(JTL_DirectQuery ("SELECT fAnzahlAktuell FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 and kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer) + "ORDER BY(SELECT NULL) OFFSET 1 ROW FETCH NEXT 1 ROW ONLY") > 0, LEFT$(JTL_DirectQuery ("SELECT dMHD FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 AND kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer) + "ORDER BY(SELECT NULL) OFFSET 1 ROW FETCH NEXT 1 ROW ONLY"),10)+" - " + FStr$(JTL_DirectQuery ("SELECT fAnzahlAktuell FROM tWarenLagerEingang WHERE fAnzahlAktuell > 0 AND kArtikel="+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer) + "ORDER BY(SELECT NULL) OFFSET 1 ROW FETCH NEXT 1 ROW ONLY"),"?&") + " Stk")

die if condition am Anfang -> wenn beim MHD Bestand > 0 zeige es, sonst lass das ganze Feld leer
LEFT$ und FStr$ zum Formatieren der Ausgabe
das OFFSET eben um die 2. Stufe der MHD Artikel zu bekommen
Abgefragt wird MHD + Bestand für dieses MHD
 
  • Gefällt mir
Reaktionen: Marvin S.

DasPatte

Aktives Mitglied
16. Mai 2018
46
14
Okay, ich verstehe die Verzweiflung in der Herangehensweise, aber das wird dich auf kurz oder lang nicht zum Ziel führen.
Die ORDER-BY-Klauseln auf SELECT NULL laufen zu lassen, überlässt dem Zufall was gerade angezeigt wird...

Bsp:
Gehen wir von einer Haltbarkeit von 6 Monaten aus (einfachhalthalber)
ArtikelEingebuchtMHDAuflistungsreihenfolge
ABC-DEF-1​
01.02.2021 (WLE-Nr 10001)​
31.08.2021
1
ABC-DEF-1​
01.03.2021 (WLE-Nr 10005)​
31.09.2021
2
ABC-DEF-1​
01.04.2021 (WLE-Nr 10025)​
Achtung! Dieser Wareneingang hat eine verkürzte Haltbarkeit 31.07.2021
3

Deine Abfrage sortiert nur nach Warenlagereingang.

Sowas sollte klappen:

Rich (BB code):
JTL_DirectQuery("SELECT TOP(2) dMHD, (fAnzahlAktuell-fAnzahlReserviertPickPos) FROM tWarenlagerEingang WHERE (fAnzahlAktuell-fAnzahlReserviertPickPos) > 0 AND kArtikel = "
+ str$(Packlistenpositionen.Artikel.InterneArtikelnummer) + " AND (DATEDIFF(d,GETDATE(),dMHD)) > 0 ORDER BY dMHD ASC")

Damit gehst du auf Nummer sicher, dass das MHD auch noch positiv haltbar ist, kein MHD ausgewählt ist, was bereist auf einer anderen Pickliste reserviert ist und du bekommst beide Ergebnisse direkt in einem Abwasch.

Gruß, Patrick

P.S.: Der Code ist ungetestet. Also bitte wie immer bei direktem DB-Zugriff: Backup machen, 2. Backup machen, Test-System aufsetzen, alle Nachbarn informieren, den BND mitlesen lassen und... naja -> gesund bleiben!