Neu Verkauf (F6) - Fehlbestände aus allen auftragen auf einen Blick + Zulauf

Zef

Aktives Mitglied
15. April 2020
32
8
Hallo Zusammen,

vielleicht kann uns einer hier helfen, leider kriegen wir das selbst nicht hin.

Wir bräuchten eine Eigene Übersicht die uns unter VERKAUF - Aufträge ohne Rechnung - Alle Fehlpositionen (nicht verfügbare Positionen) aus den markierten und bezahlten Aufträgen auf ein mal anzeigt, inklusive Zulauf und idealerweise mit LS und Lieferant damit man weißt ob der Artikel heute vielleicht kommt oder erst morgen. ( Man kann zwar über Artikel nach Verfügbarkeit schauen, aber da werden auch nicht bezahlte Auftrage mit berücksichtigt was oft für Verwirrung sorgt, da wir uns mit Artikeln beschäftigen die in auftragen sind die noch nicht bezahlt sind und somit aktuell gar nicht relevant sind.)

Artikel-Nr. / Artikelname / Fehlpositionen (aus den markierten Aufträgen) / Lagerbestand Gesamt / Im Zulauf / Lieferant / Lieferscheine-Lieferant /

Eine solche Übersicht würde uns im Lager die Arbeit echt erleichtern. Vielen Dank im Voraus :)
 
  • Gefällt mir
Reaktionen: 414orgkom

merres

Aktives Mitglied
28. März 2024
80
59
SQL:
WITH PaidOrders AS (
    SELECT DISTINCT kAuftrag
    FROM [eazybusiness].[Verkauf].[tAuftragEckdaten]
    WHERE nZahlungStatus = 2
),
OrderPositionsWithoutInvoice AS (
    SELECT
        ap.kAuftrag,
        ap.kArtikel,
        a.cAuftragsNr AS Auftragsnummer,
        ap.cArtNr,
        ap.cName AS ArtikelName,
        ap.fAnzahl,
        ap.fVerfuegbar,
        ap.fOffeneAuftragsmenge,
        ap.fFehlbestand
    FROM [eazybusiness].[Verkauf].[lvAuftragsposition] ap
    INNER JOIN PaidOrders po ON ap.kAuftrag = po.kAuftrag
    INNER JOIN [eazybusiness].[Verkauf].[tAuftrag] a ON ap.kAuftrag = a.kAuftrag
    LEFT JOIN [eazybusiness].[Verkauf].[lvRechnungsposition] rp ON ap.kAuftrag = rp.kAuftrag AND ap.kArtikel = rp.kArtikel
    WHERE ap.fFehlbestand > 0
      AND rp.kRechnungPosition IS NULL
),
IncomingStock AS (
    SELECT
        bp.kArtikel,
        SUM(bp.fMenge - bp.fMengeGeliefert) AS fZulauf,
        MIN(b.dLieferdatum) AS dNextDelivery,
        STRING_AGG(CONVERT(NVARCHAR(20), b.cBestellnummer), ', ') AS cBestellnummern,
        STRING_AGG(b.cLieferantName, ', ') AS cLieferanten
    FROM [eazybusiness].[Beschaffung].[lvBestellung] b
    INNER JOIN [eazybusiness].[Beschaffung].[lvBestellPositionen] bp ON b.kBestellung = bp.kBestellung
    WHERE b.nStatus < 500
      AND b.dLieferdatum >= GETDATE()
      AND bp.fMenge > bp.fMengeGeliefert
    GROUP BY bp.kArtikel
)
SELECT
    op.kAuftrag AS AuftragNr,
    op.Auftragsnummer,
    op.kArtikel AS ArtikelID,
    op.cArtNr AS Artikelnummer,
    op.ArtikelName,
    op.fAnzahl AS BestellteMenge,
    op.fVerfuegbar AS VerfuegbareMenge,
    op.fOffeneAuftragsmenge AS OffeneMenge,
    op.fFehlbestand AS Fehlbestand,
    COALESCE(ins.fZulauf, 0) AS Zulauf,
    COALESCE(CONVERT(NVARCHAR, ins.dNextDelivery, 104), 'Kein Zulauf') AS NaechsteLieferung,
    COALESCE(ins.cBestellnummern, 'Keine Bestellung') AS Bestellnummern,
    COALESCE(ins.cLieferanten, 'Kein Lieferant') AS Lieferanten,
    CASE
        WHEN ins.dNextDelivery IS NULL THEN 'Nicht im Zulauf'
        WHEN ins.dNextDelivery = CAST(GETDATE() AS DATE) THEN 'Heute erwartet'
        WHEN ins.dNextDelivery = DATEADD(DAY, 1, CAST(GETDATE() AS DATE)) THEN 'Morgen erwartet'
        ELSE 'Später erwartet'
    END AS LieferStatus
FROM OrderPositionsWithoutInvoice op
LEFT JOIN IncomingStock ins ON op.kArtikel = ins.kArtikel
ORDER BY op.kAuftrag, op.kArtikel;

Thema ist zwar schon etwas älter, aber probiert es mal hiermit und gebt mir Rückmeldung :)
 
  • Gefällt mir
Reaktionen: Micmac und frankell

frankell

Sehr aktives Mitglied
9. September 2019
1.432
442
Flensburg
Da ich selbst grad nen eigenen Anwendungsfall habe, hätte ich einen etwas anderen Approach:

SQL:
WITH BezahltOhneRechnung AS (
    SELECT DISTINCT kAuftrag, cAuftragsnummer
    FROM Verkauf.lvAuftragsverwaltung
    WHERE nZahlungStatus = 2 AND nRechnungStatus < 2 AND kAuftrag IN(@Keys)
),
LieferantenBestellungen AS (
    SELECT
        A.kArtikel,
        CASE WHEN EXISTS (SELECT 1 FROM tLieferantenBestellungPos WHERE fAnzahlOffen > 0 AND tLieferantenBestellungPos.kArtikel = A.kArtikel)
        THEN (SELECT STRING_AGG(
                    CAST(CAST(LBP.dLieferdatum AS DATE) AS NVARCHAR(40)) + ' - ' +
                    CAST(CAST(LBP.fAnzahlOffen AS INT) AS NVARCHAR(40)) + ' St. - ' +
                    LB.cLieferantName
                    , ' | ')
            FROM tLieferantenBestellungPos LBP
            JOIN Beschaffung.lvBestellung LB ON LBP.kLieferantenBestellung = LB.kBestellung
            WHERE LBP.fAnzahlOffen > 0 AND LBP.kArtikel = A.kArtikel)
        ELSE 'Keine Lieferantenbestellung'
        END  AS 'Lieferdaten'
    FROM tArtikel AS A
)
SELECT
    ART.cArtNr AS 'ArtNr.',
    ART.cName AS 'ArtName',
    STRING_AGG(A.cAuftragsnummer, ' | ') AS 'Aufträge',
    CAST(SUM(AP.fAnzahl) AS INT) AS 'Auftragsmenge',
    CAST(MAX(AP.fFehlbestand) AS INT) AS 'Fehlbestand',
    CAST(MAX(L.fLagerbestand) AS INT) AS 'Bestand',
    CAST(MAX(L.fVerfuegbar) AS INT) AS 'Verfügbar',
    CAST(MAX(L.fZulauf) AS INT) AS 'Zulauf',
    CAST(CAST(MAX(L.dLieferdatum) AS DATE) AS NVARCHAR(40)) AS 'früh. Lieferdatum',
    ISNULL(MAX(LB.Lieferdaten), 'Keine Lieferantenbestellung') AS 'Lieferungen'
FROM Verkauf.lvAuftragsposition AS AP
JOIN BezahltOhneRechnung AS A ON AP.kAuftrag = A.kAuftrag
JOIN vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
JOIN tlagerbestand AS L ON ART.kArtikel = L.kArtikel
JOIN LieferantenBestellungen AS LB ON AP.kArtikel = LB.kArtikel
WHERE AP.fFehlbestand > 0
GROUP BY ART.cArtNr, ART.cName;

Ist etwas kompakter und fasst sowohl die Artikelzeilen als auch alle Infos zukünftiger Lieferungen zusammen, so dass zu jedem Artikel nur eine Zeile existiert.

Außerdem ist die Abfrage so angepasst, dass sie mit einer individuellen Auswahl an Aufträgen funktioniert. Soll sie pauschal immer alle Fehlbestände aller Aufträge anzeigen, die bezahlt sind und keine Rechnung besitzen (also ohne Auswahl), dann muss in der vierten Zeile "AND kAuftrag IN(@Keys)" entfernt werden. Oder aber man lässt die Query so und aktiviert einfach mit STRG+A alle Aufträge.
 
Zuletzt bearbeitet:

frankell

Sehr aktives Mitglied
9. September 2019
1.432
442
Flensburg
Für wen die Herangehensweise von @merres lieber ist: Auch dieser Code kann über die Ergänzung
AND kAuftrag IN(@Keys)
am Ende der vierten Codezeile fit für eine "Eigene Übersicht" in der Wawi mit Auswahlfunktionalität gemacht werden.
 

Micmac

Sehr aktives Mitglied
12. Februar 2016
315
52
Das ist für uns auch sehr hilfreich - Vielen Dank

Wie wäre der Code, wenn wir die Fehlbestände der Aufträge ohne Rechnung, unabhängig vom Zahlungsstatus, also bezahlte und unbezahlte Aufträge, anzeigen lassen wollen?

Alle Fehlbestände der markierten Aufträge gelistet nach Artikelnummer so wie oben, und als Bonus noch das Anmerkungsfeld des Artikels dazu 😬 (wenn möglich)

Ist das möglich?
 

frankell

Sehr aktives Mitglied
9. September 2019
1.432
442
Flensburg
Wie wäre der Code, wenn wir die Fehlbestände der Aufträge ohne Rechnung, unabhängig vom Zahlungsstatus, also bezahlte und unbezahlte Aufträge, anzeigen lassen wollen?

In der vierten Zeile diesen Teil hier rausnehmen:

nZahlungStatus = 2 AND

Alle Fehlbestände der markierten Aufträge gelistet nach Artikelnummer so wie oben, und als Bonus noch das Anmerkungsfeld des Artikels dazu 😬 (wenn möglich)

Hinter der Zeile "ART.cName AS 'ArtName'," eine Zeile ergänzen mit

SQL:
ART.cAnmerkung AS 'Artikel-Anmerkung',

und ganz am Ende des Codes vor dem Semikolon noch Folgendes ergänzen:

SQL:
, ART.cAnmerkung
 
  • Gefällt mir
Reaktionen: Micmac

Micmac

Sehr aktives Mitglied
12. Februar 2016
315
52
Noch noch kurz, wozu wir das nutzen:

Wir haben Artikel, die Überverkauft werden können, und möchten sehen, wie viele überverkauft wurden und wie viele im Zulauf sind.
Manchmal haben die Artikel noch keinen Zulauf, dann steht die Bestellmenge in den Anmerkungen des Artikels.

Wenn man die Wawi dazu bringen könnte eine Email an uns zu senden wenn Überverkaufmenge = Zulauf, würde das sehr weiterhelfen.
Den manuellen Workflow, dass eine Email gesendet wird, haben wir schon gebaut. Den müssen wir aber selbst auslösen.

Hat jemand eine Idee wie die Bedingung definiert werden muss wenn Auftrag erstellt und der Artikel im Auftrag hat: Anzahl Überverkäufe = Zulauf ??

Irgendwie finden wir die Bedingung Zulauf nicht. Geht das überhaupt?
Die Bedingung müsste sein: Zulauf = Reserviert
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Dienstleistungs-Gutschein in Deutschland -> Verkauf in die Schweiz (Steuereinstellung Wawi) Arbeitsabläufe in JTL-Wawi 2
Einzelkarten Verkauf über Plattformen (eBay) JTL-Wawi 1.9 0
Verkauf ansicht anpassen JTL-Wawi 1.9 4
Neu Anzeige im Shop "nur lokaler Verkauf!" Betrieb / Pflege von JTL-Shop 2
SQL-Abfrage für eigene Übersicht im Verkauf – Aufträge zu Angeboten prüfen JTL-Wawi 1.9 2
Neu Artikel aus der Kategorieübersicht zum Warenkorb hinzufügen? Allgemeine Fragen zu JTL-Shop 0
Artikel aus Selektion verschieben JTL-Wawi 1.10 1
Artikel aus Amazon löschen JTL-Wawi 1.7 10
Rechnungserstellung nicht möglich aus Amazon - JTL-Wawi 1.10 3
Kategorien ohne WaWi aus Shop entfernen Einrichtung JTL-Shop5 2
Beantwortet Workflow: Zahlungserinnerung aus dem JTL Guid, versendet beim Testen mehr als nur 1 E-Mail JTL-Workflows - Fehler und Bugs 4
Neu Wie läuft eine Bestellung ab und wie bekomme ich die Aufträge aus dem Shop in die Wawi übertragen? Betrieb / Pflege von JTL-Shop 0
Neu Paypal-Zahlungen zuweisen, die aus Shopware bereits als gezahlt kommen Arbeitsabläufe in JTL-Wawi 2
Email aus der WAWI 1.9.7.0 werden nicht an Kunden gesendet JTL-Wawi 1.9 3
JTL 1.9.7.0 | Warum ändert sich der Nummernkreis für Rechnungen bei Bestellungen aus dem OTTO-Market und bei anderen Marktplatzanbindungen nicht? Otto.de - Anbindung (SCX) 3
Neu eBay Bestellung aus der Schweiz MwST und DHL User helfen Usern - Fragen zu JTL-Wawi 1
Neu Eigenes Feld aus Auftrag in Rechnung ausgeben. Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 5
In Diskussion Bestand aus bestimmten Lager bei Auftragserstellung abfragen JTL-Workflows - Ideen, Lob und Kritik 5
Eigenes Datenfeld aus dem Artikelstamm in den Rechnungspositionen abbilden? JTL-Wawi 1.8 1
Neu Versandlabel direkt aus JTL WaWi JTL-ShippingLabels - Ideen, Lob und Kritik 1
Neu Fehlermeldung bei Synchronisation aus der WaWi: "Artikel "XYZ" kann nicht hochgeladen werden, da der Shop den Steuersatz '19' nicht unterstützt." WooCommerce-Connector 1
Produktdaten sind online - Wie jetzt aus JTL Angebotsdaten erstellen? kaufland.de - Anbindung (SCX) 0
Zahlung aus zwei "Quellen" JTL-Wawi 1.7 1
Neu Mediendateien aus Artikel sortimentsübergreifend entfernen JTL Ameise - Eigene Exporte 3
Neu Wie rufe ich Artikelbilder aus der Wawi im PowerBI Report Builder ab? User helfen Usern - Fragen zu JTL-Wawi 2
Änderungen aus Child-Template Einstellungen (Nova-child) werden nicht übernommen (Footer/Header) Einrichtung JTL-Shop5 3
Neu Kinderartikel aus bestehenden Artikeln JTL-Wawi 1.6 7
Neu Bild-URL per Workflow aus eigene Felder zuordnen – Geht das? User helfen Usern - Fragen zu JTL-Wawi 5
Neu Barauszahkungen etc aus POS im WaWi irgendwo sichtbar? Allgemeine Fragen zu JTL-POS 2
Neu Bestellbestätigung aus JTL SHOP mit Lieferadresse Dienstleistung, Jobs und Ähnliches 0
Neu Workflow-Bedingungen für Teillieferung aus zwei Lagern (Lager A & Lager B) User helfen Usern - Fragen zu JTL-Wawi 2
Neu Merkmale aus Globalen Angebotsvorlagen werden bei erstellen über Ameise nicht übernommen Wawi 1.10 eBay-Anbindung - Fehler und Bugs 0
Neu Packtisch+ erster Scan gibt keinen Erfolgston aus JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Beantwortet Packtisch liefert nicht nach FIFO aus Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 3
Neu Teillieferung aus Vorkommissionierung Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 6

Ähnliche Themen