Neu Kundenrückstände

Pam45

Neues Mitglied
11. September 2024
5
0
Hallo,

ich brauche eine Übersicht, welcher Kunde noch welche Artikel im Rückstand hat, dh. was noch ausgeliefert werden muss. Vorerst würde es mir auch reichen, wenn ich das nur für einen einzelnen Kunden anzeigen lassen kann. Leider habe ich keine solche Funktion im JTL gefunden, kann mir hier bitte jemand helfen?

Wie gehe ich am Besten vor, wenn ich Kunden habe, die Rahmenbestellungen machen und diese dann abrufen?

Vielen Dank im Voraus!
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
Du kannst das über Eigene Übersichten im Bereich Kunden realisieren. Eine für alle offenen Posten, eine für den individuell ausgewählten Kunden:

Offene Positionen aller Kunden:

SQL:
-- Auflistung aller offenen Bestellpositionen für alle Kunden
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsNr AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(APE.fAnzahlOffen AS INT) as 'Qty'
FROM
    Verkauf.tAuftragPosition AS AP
LEFT JOIN
    Verkauf.tAuftragPositionEckdaten AS APE ON AP.kAuftragPosition = APE.kAuftragPosition
LEFT JOIN
    Verkauf.tAuftrag AS A ON AP.kAuftrag = A.kAuftrag
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    APE.fAnzahlOffen > 0
ORDER BY
    KD.cKundenNr,
    A.cAuftragsNr,
    'ArtNr'
    ASC

Sortiert ist hier zuerst nach der Kundennummer, dann nach Auftragsnummer, dann nach Artikelnummer. Aber das kannst Du nach eigenen Bedürfnisses anpassen.

Offene Positionen ausgewählter Kunde:

SQL:
-- Auflistung aller offenen Bestellpositionen des ausgewählten Kunden
SELECT 
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsNr AS 'BestNr',
    ART.cArtNr AS 'ArtNr', 
    ART.cName AS 'Artikelname', 
    CAST(APE.fAnzahlOffen AS INT) as 'Qty'
FROM 
    Verkauf.tAuftragPosition AS AP
LEFT JOIN 
    Verkauf.tAuftragPositionEckdaten AS APE ON AP.kAuftragPosition = APE.kAuftragPosition
LEFT JOIN 
    Verkauf.tAuftrag AS A ON AP.kAuftrag = A.kAuftrag
LEFT JOIN 
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN 
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE 
    APE.fAnzahlOffen > 0
    AND KD.kKunde = @Key
ORDER BY 
    A.cAuftragsNr, 
    'ArtNr'
    ASC

Sortiert ist hier zuerst nach der Auftragsnummer, dann nach der Artikelnummer. Aber das kannst Du nach eigenen Bedürfnisses anpassen.
 

Pam45

Neues Mitglied
11. September 2024
5
0
Du kannst das über Eigene Übersichten im Bereich Kunden realisieren. Eine für alle offenen Posten, eine für den individuell ausgewählten Kunden:

Offene Positionen aller Kunden:

SQL:
-- Auflistung aller offenen Bestellpositionen für alle Kunden
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsNr AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(APE.fAnzahlOffen AS INT) as 'Qty'
FROM
    Verkauf.tAuftragPosition AS AP
LEFT JOIN
    Verkauf.tAuftragPositionEckdaten AS APE ON AP.kAuftragPosition = APE.kAuftragPosition
LEFT JOIN
    Verkauf.tAuftrag AS A ON AP.kAuftrag = A.kAuftrag
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    APE.fAnzahlOffen > 0
ORDER BY
    KD.cKundenNr,
    A.cAuftragsNr,
    'ArtNr'
    ASC

Sortiert ist hier zuerst nach der Kundennummer, dann nach Auftragsnummer, dann nach Artikelnummer. Aber das kannst Du nach eigenen Bedürfnisses anpassen.

Offene Positionen ausgewählter Kunde:

SQL:
-- Auflistung aller offenen Bestellpositionen des ausgewählten Kunden
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsNr AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(APE.fAnzahlOffen AS INT) as 'Qty'
FROM
    Verkauf.tAuftragPosition AS AP
LEFT JOIN
    Verkauf.tAuftragPositionEckdaten AS APE ON AP.kAuftragPosition = APE.kAuftragPosition
LEFT JOIN
    Verkauf.tAuftrag AS A ON AP.kAuftrag = A.kAuftrag
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    APE.fAnzahlOffen > 0
    AND KD.kKunde = @Key
ORDER BY
    A.cAuftragsNr,
    'ArtNr'
    ASC

Sortiert ist hier zuerst nach der Auftragsnummer, dann nach der Artikelnummer. Aber das kannst Du nach eigenen Bedürfnisses anpassen.
Vielen Dank!

Ich habe das bei den eigenen Ansichten eingefügt, jedoch kann ich nicht abspeichern, weil folgende Fehlermeldung kommt:

Fehler im Query gefunden: Ungültiger Objektname "Verkauf.tAuftragPosition".

Bitte hilf mir nochmal weiter. Danke!
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
Stimmt. Grad auch mal nachgeschaut.

Wenn dem so ist, @Pam45, dann sollte es hiermit funktionieren:

Offene Positionen aller Kunden:

SQL:
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
ORDER BY
    KD.cKundenNr,
    A.cAuftragsnummer,
    'ArtNr'
    ASC

Offene Positionen ausgewählter Kunde:

SQL:
SELECT
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
    AND KD.kKunde = @Key
ORDER BY
    A.cAuftragsnummer,
    'ArtNr'
    ASC

Da ich die 1.6er nicht installiert habe (und auch nicht werde :) ), konnte ich das nicht testen, aber zumindest nach der damaligen DB-Struktur sollte es klappen.

Sollten sich diese Abfragen speichern lassen, überprüf das gerne einmal mit zwei, drei Aufträgen/Kunden. Zu der Zeit gab es wohl fAnzahlOffen noch nicht, sondern nur fAnzahl, fGeliefert, fGutgeschrieben und fAnzahlAuszuliefern. Da ich nicht genau weiß, wie sich fGutgeschrieben auf die Berechnung verhält und fAnzahlAuszuliefern als einzige Spalte keine NULL-Werte erlaubt, habe ich fAnzahlAuszuliefern genommen. Aber Du kannst auch anstelle "AP.fAnzahlAuszuliefern" Folgendes setzen: "(AP.fAnzahl - AP.fGeliefert)" oder "(AP.fAnzahl - AP.fGeliefert - AP.fGutgeschrieben)"

EDIT: Ich meinte "Da ich die 1.5er nicht installiert habe", denn aus der zog ich mir die damalige DB-Struktur, in der es Verkauf.tAuftragPosition und andere Tabellen noch nicht gab.
 
Zuletzt bearbeitet:

Verkäuferlein

Sehr aktives Mitglied
29. April 2012
2.450
954

Laut seiner Signatur hat er schon die 1.9, da bist Du wohl einem Missverständnis aufgesessen und er will nicht extra downgraden, um das zu testen... ;)


Gute Frage... Mir fallen da hauptsächlich regulatorische Gründe ein, aber wie das bei Euch in AT ist, keine Ahnung.

Wie lange willst Du denn noch auf der 1.5 bleiben?
 

MichaelH

Sehr aktives Mitglied
17. November 2008
14.107
1.748
Gute Frage... Mir fallen da hauptsächlich regulatorische Gründe ein, aber wie das bei Euch in AT ist, keine Ahnung.
Wie lange willst Du denn noch auf der 1.5 bleiben?

Regulatorische Gründe in AT ?!? 😂 Wenn manche Länder in der EU nicht so komische Vorschläge machen würden, wären wir eher auf dem Level von Spanien, Frankreich und Italien. Die haben's fein, sprechen kein Deutsch, womit ihnen Vieles einfach egal ist.

1.5 bis klar ist, dass es eine Version gibt mit der man nicht in eine Update-Spirale gerät, sondern wieder Ruhe hat für ein paar JAHRE. Ende 2024 benötigen wir auch kein JTL- Shipping mehr womit wir von fast Allem befreit sind was andere ärgert.
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.103
637
Laut seiner Signatur hat er schon die 1.9, da bist Du wohl einem Missverständnis aufgesessen und er will nicht extra downgraden, um das zu testen... ;)
...
nein, dazu hat er doch keine Angabe gemacht, du verwechselst wohl "frankell"

Die Tabellen wurden von 1.5 auf 1.6 geändert und gibt es nicht mehr.


zum Rest werde ich mich nicht weiter äußern 😅 wurden schon genug Beiträge von mir gelöscht, Michael hatte ich schon paar mal vorgewarnt frühzeitig zu testen
 

MichaelH

Sehr aktives Mitglied
17. November 2008
14.107
1.748
zum Rest werde ich mich nicht weiter äußern 😅 wurden schon genug Beiträge von mir gelöscht, Michael hatte ich schon paar mal vorgewarnt frühzeitig zu testen

Ich teste laufend ... keine Sorge und seit August auch mein Team, bislang hält sich die Begeisterung in Grenzen, wow-Effekt war keiner aus dem Team zu vernehmen und "wir wollen möglichst bald umstellen" auch nicht.
Wenn ich nicht laufend dran wäre würde kein Hahn nach einem Update krähen. Die einzige Verbesserung die uns wirklich was in der Praxis nützte waren die Workflows.
Wir arbeiten schon seit fast immer wie wir arbeiten und es gibt einfach wenig Lust irgendetwas daran etwas zu ändern.

Lücken die es gibt werden nicht geschlossen und wenn, dann mit Gedöns drumherum die man nicht haben will.
Eine einfache funktionale WAWI ist eine gute WAWI, diese Denkensweise wird sich bei uns nicht ändern.
 
  • Gefällt mir
Reaktionen: Predpray und wawi-dl

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.103
637
Ich teste laufend ... keine Sorge und seit August auch mein Team, bislang hält sich die Begeisterung in Grenzen, wow-Effekt war keiner aus dem Team zu vernehmen und "wir wollen möglichst bald umstellen" auch nicht.
Wenn ich nicht laufend dran wäre würde kein Hahn nach einem Update krähen. Die einzige Verbesserung die uns wirklich was in der Praxis nützte waren die Workflows.
Wir arbeiten schon seit fast immer wie wir arbeiten und es gibt einfach wenig Lust irgendetwas daran etwas zu ändern.

Lücken die es gibt werden nicht geschlossen und wenn, dann mit Gedöns drumherum die man nicht haben will.
Eine einfache funktionale WAWI ist eine gute WAWI, diese Denkensweise wird sich bei uns nicht ändern.
Ich kenne dein Standpunkt und dieser ist auch richtig und verständlich, wollte hier aber nicht vom Thema abkommen.
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
Nur zur Klärung: Ich hatte mich vertippt, es sollte heißen, dass ich die 1.5 nicht installiert habe und werde. Habe meinen Beitrag mit einem entsprechenden EDIT ergänzt.

Ich hoffe, dass sich @Pam45 jetzt nicht von den (interessanten) Diskussionen der JTL-Granden abgeschreckt fühlt. :D
 

Pam45

Neues Mitglied
11. September 2024
5
0
Stimmt. Grad auch mal nachgeschaut.

Wenn dem so ist, @Pam45, dann sollte es hiermit funktionieren:

Offene Positionen aller Kunden:

SQL:
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
ORDER BY
    KD.cKundenNr,
    A.cAuftragsnummer,
    'ArtNr'
    ASC

Offene Positionen ausgewählter Kunde:

SQL:
SELECT
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
    AND KD.kKunde = @Key
ORDER BY
    A.cAuftragsnummer,
    'ArtNr'
    ASC

Da ich die 1.6er nicht installiert habe (und auch nicht werde :) ), konnte ich das nicht testen, aber zumindest nach der damaligen DB-Struktur sollte es klappen.

Sollten sich diese Abfragen speichern lassen, überprüf das gerne einmal mit zwei, drei Aufträgen/Kunden. Zu der Zeit gab es wohl fAnzahlOffen noch nicht, sondern nur fAnzahl, fGeliefert, fGutgeschrieben und fAnzahlAuszuliefern. Da ich nicht genau weiß, wie sich fGutgeschrieben auf die Berechnung verhält und fAnzahlAuszuliefern als einzige Spalte keine NULL-Werte erlaubt, habe ich fAnzahlAuszuliefern genommen. Aber Du kannst auch anstelle "AP.fAnzahlAuszuliefern" Folgendes setzen: "(AP.fAnzahl - AP.fGeliefert)" oder "(AP.fAnzahl - AP.fGeliefert - AP.fGutgeschrieben)"

EDIT: Ich meinte "Da ich die 1.5er nicht installiert habe", denn aus der zog ich mir die damalige DB-Struktur, in der es Verkauf.tAuftragPosition und andere Tabellen noch nicht gab.
Vielen Dank für die rasche Rückmeldung! Ja genau, wir haben die 1.5.55.5 derzeit installiert. Ich hatte jetzt gerade den Code für die Rückstandsliste eines Kunden eingegeben, aber jetzt kommt ein anderer Fehler: Ungültiger Spaltenname "kArtikel".
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
Vielen Dank für die rasche Rückmeldung! Ja genau, wir haben die 1.5.55.5 derzeit installiert. Ich hatte jetzt gerade den Code für die Rückstandsliste eines Kunden eingegeben, aber jetzt kommt ein anderer Fehler: Ungültiger Spaltenname "kArtikel".
Ah, da hatten sie noch tArtikel_kArtikel in Verkauf.lvAuftragsposition.

Dann musst Du nur jeweils diese Zeile
vStandardArtikel AS ART ON AP.kArtikel = ART.kArtikel

durch diese
vStandardArtikel AS ART ON AP.tArtikel_kArtikel = ART.kArtikel

ersetzen.
 

wawi-dl

Sehr aktives Mitglied
29. April 2008
6.103
637
Ich hab das SQL nicht geprüft, gibt es "kBestellung" überhaupt noch? Normal sollte das auch dann druch "kAuftrag" ersetzt worden sein.
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
Ich hab das SQL nicht geprüft, gibt es "kBestellung" überhaupt noch? Normal sollte das auch dann druch "kAuftrag" ersetzt worden sein.
Seinerzeit war das noch so.

Wobei, nicht nur seinerzeit. Es findet sich heute noch über 100x kBestellung. Selbst im Schema Verkauf noch 1x. Von tBestellung und kBestellung haben wir uns noch lange nicht vollständig gelöst.

Dabei wäre das doch mal was: Ankündigung eines Updates zu einem bestimmten Tag, in dem es ausschließlich darum geht, in der Datenbank mal grundrein zu machen und alles zu harmonisieren (einheitliche Bezeichnungen, einheitliche Schreibweise (groß/klein), Eliminierung von Tippfehlern wie "Midestbestand", nachvollziehbare Verteilung von Tables, Views, SPs, Functions auf die Schemas, usw.). Von mir aus können sie dann auch im Zuge ihrer Internationalisierungsbemühungen alles verenglischen. Aber natürlich nur mit einer vollständigen Dokumentation, mindestens in Form von Synopsen, und mit ordentlich Vorlauf (bspw. drei Monate), damit auch wirklich alle genug Zeit haben, ihre Querys entsprechend anzupassen.

Aber mich deucht, es bleibt ein frommer Wunsch.
 

frankell

Sehr aktives Mitglied
9. September 2019
111
127
Flensburg
@Pam45,

damit Du nicht hin- und herscrollen musst:

Offene Positionen aller Kunden:

SQL:
SELECT
    KD.cKundenNr AS 'KundenNr',
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.tArtikel_kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
ORDER BY
    KD.cKundenNr,
    A.cAuftragsnummer,
    'ArtNr'
    ASC

Offene Positionen ausgewählter Kunde:

SQL:
SELECT
    A.cAuftragsnummer AS 'BestNr',
    ART.cArtNr AS 'ArtNr',
    ART.cName AS 'Artikelname',
    CAST(AP.fAnzahlAuszuliefern AS INT) as 'Qty'
FROM
    Verkauf.lvAuftragsposition AS AP
LEFT JOIN
    Verkauf.lvAuftragsverwaltung AS A ON AP.kBestellung = A.kBestellung
LEFT JOIN
    vStandardArtikel AS ART ON AP.tArtikel_kArtikel = ART.kArtikel
LEFT JOIN
    tkunde AS KD ON A.kKunde = KD.kKunde
WHERE
    AP.fAnzahlAuszuliefern > 0
    AND KD.kKunde = @Key
ORDER BY
    A.cAuftragsnummer,
    'ArtNr'
    ASC