Hallo Leute,
Ich bin mir zwar nicht 100% sicher, ob ich Eure Herangehensweise aus dem bißchen Beschreibung richtig erraten habe, da das Thema Retourenabwicklung zum Lieferanten hin aber auch mit der
Wawi 1.x nicht gelöst ist, interessiert mich das hier auch und deshalb will ich den Faden mal aufnehmen. Gehe ich richtig davon aus, dass die Idee folgende ist:
- Ich habe einen vom Kunden reklamierten Artikel, den ich beim Hersteller/Lieferanten reklamieren und umtauschen möchte.
- Ich will das Ganze innerhalb der Wawi abwickeln, mir dabei aber nicht meine Lager, meine Statistik und z.B. auch die gleitenden Einkaufspreise versauen.
- Also will ich die Ware über einen Auslieferungs-Auftrag an den Lieferanten zurückschicken und gleichzeitig über eine gleichlautende Reklamations-Bestellung den Ersatzartikel anfordern.
- Hierfür definiere ich mir für den Lieferanten A einen Artikel "Lieferant A - Reklamationsartikel" und erstelle den Auslieferungs-Auftrag damit. Hierbei ändere ich die Artikelbezeichnung so ab, dass sie den tatsächlich auszutauschenden Artikel beschreibt.
- Dann erzeuge ich eine Reklamations-
Lieferantenbestellung mit dem gleichen Reklamationsartikel. Hierbei stört natürlich, dass die Artikelbezeichnung bei Lieferantenbestellungen automatisch übernommen wird und ich möchte, dass die Beschreibung aus meinem Auslieferungs-Auftrag übernommen wird.
Falls ich das soweit richtig interpretiert habe, klingt das eigentlich ganz vernünftig und schwierig ist das nicht, here we go...
Code:
JTL_DirectQuery("SELECT cString FROM tbestellpos INNER JOIN tbestellung ON tbestellpos.tBestellung_kBestellung=tbestellung.kBestellung INNER JOIN tartikel ON tbestellpos.tArtikel_kArtikel=tartikel.kArtikel WHERE tbestellung.cBestellNr='"+ToString$(Vorgang.Bezugsauftragsnummer)+"' AND tartikel.cArtNr='"+ToString$(Positionen.Artikelnummer)+"'")
Voraussetzungen und Grenzen:
Der Code setzt ZWINGEND voraus, dass Ihr in Eurer Reklamations-Lieferantenbestellung unter "Bezugs-Auftrags-Nr:" die Auftragsnummer Eures Auslieferungs-Auftrags stehen habt, sonst ist es schlicht nicht möglich hier irgendetwas in Bezug zueinander zu setzen. Falls Ihr das Feld der "Bezugs-Auftrags-Nr:" für etwas anderes benötigt, könnt Ihr auch die "Fremdbelegnummer" verwenden und oben "Vorgang.Bezugsauftragsnummer" durch "Vorgang.Fremdbelegnummer" ersetzen.
Der obige Code funktioniert gut, leidet aber darunter, dass die DirectQuery bei mehren Reklamationspositionen immer den Artikeltext der ersten zurückliefert, weil sich die Positionen für die Query nicht unterscheiden. Soll er das können, müssen wir den Code um einen Hack ergänzen, der die Nummer der aktuellen Bestellposition mit der Sortierung des Auslieferauftrags verbindet, also so...
Code:
JTL_DirectQuery("SELECT cString FROM tbestellpos INNER JOIN tbestellung ON tbestellpos.tBestellung_kBestellung=tbestellung.kBestellung INNER JOIN tartikel ON tbestellpos.tArtikel_kArtikel=tartikel.kArtikel WHERE tbestellung.cBestellNr='"+ToString$(Vorgang.Bezugsauftragsnummer)+"' AND tartikel.cArtNr='"+ToString$(Positionen.Artikelnummer)+"' AND tbestellpos.nSort='"+ToString$(Count(Positionen.InterneBestellpositionsNummer,false))+"'")
Weil das aber nicht wirklich SQL Logik sondern nur ein Hack ist, funktioniert das nur, wenn die Bestellpositionen und die Auslieferungs-Auftragspositionen an den gleichen Stellen stehen, also z.B. in beiden Dokumenten die ersten 3 Positionen sind. Weniger Bestell- als Auslieferpositionen funktionieren natürlich, aber umgekehrt natürlich nicht und es würden Leer-Strings zurückgeliefert.
Aber jetzt wo die Begehrlichkeiten erst einmal geweckt sind, wollen wir doch mal sehen, was geht...
1. Integration von Reklamationspositionen in eine normale Lieferantenbestellung.
2. Unterstützung von mehreren Reklamationspositionen in einer Lieferantenbestellung.
3. Unterstützung von Lieferscheinnummern statt Auftragsnummern, wohl eher bei Versehen.
4. Fehlerausgabe, falls eine Reklamationsposition nicht im Auslieferungsauftrag ist.
Code:
Cond(StrPos(Upper$(Positionen.Lieferantenartikelbezeichnung),"REKLAMATION")=-1,Positionen.Lieferantenartikelbezeichnung,Cond(JTL_DirectQuery("SELECT cString FROM tbestellpos INNER JOIN tbestellung ON tbestellpos.tBestellung_kBestellung=tbestellung.kBestellung INNER JOIN tartikel ON tbestellpos.tArtikel_kArtikel=tartikel.kArtikel WHERE tbestellung.cBestellNr='"+ToString$(Cond(StrPos(Vorgang.Bezugsauftragsnummer,"-")=-1,Vorgang.Bezugsauftragsnummer,Left$(Vorgang.Bezugsauftragsnummer,StrPos(Vorgang.Bezugsauftragsnummer,"-")-1)))+"' AND tartikel.cArtNr='"+ToString$(Positionen.Artikelnummer)+"' AND tbestellpos.nSort='"+ToString$(Count(Positionen.InterneBestellpositionsNummer,false))+"'")<>"",JTL_DirectQuery("SELECT cString FROM tbestellpos INNER JOIN tbestellung ON tbestellpos.tBestellung_kBestellung=tbestellung.kBestellung INNER JOIN tartikel ON tbestellpos.tArtikel_kArtikel=tartikel.kArtikel WHERE tbestellung.cBestellNr='"+ToString$(Cond(StrPos(Vorgang.Bezugsauftragsnummer,"-")=-1,Vorgang.Bezugsauftragsnummer,Left$(Vorgang.Bezugsauftragsnummer,StrPos(Vorgang.Bezugsauftragsnummer,"-")-1)))+"' AND tartikel.cArtNr='"+ToString$(Positionen.Artikelnummer)+"' AND tbestellpos.nSort='"+ToString$(Count(Positionen.InterneBestellpositionsNummer,false))+"'"),"Fehler: Keine "+ToString$(Count(Positionen.InterneBestellpositionsNummer,false))+". Reklamationsposition in Auftrag "+ToSTring$(Vorgang.Bezugsauftragsnummer)))
Ok, der obenstehende Code ist schon etwas unübersichtlicher, macht aber folgendes:
1. Er prüft, ob die Lieferantenartikelbezeichnung (nicht Eure geänderte Bezeichnung) irgendwo das Wort "Reklamation" enthält (groß/klein ist egal). Falls ja, wird die JTL_DirectQuery() losgeschickt, falls nein, wird die normale Lieferantenartikelbezeichnung zurückgegeben. Damit ist auch eine gemischte Bestellung von Reklamationsartikeln und regulären Artikeln möglich, die Reklamationsartikel MÜSSEN in der Liste der Positionen aber zuerst kommen, siehe oben.
2. Wenn es sich um eine Reklamationsposition handelt, prüft der Code, ob die JTL_DirectQuery() überhaupt etwas zurückliefert, sonst wird eine beschreibende Fehlermeldung übergeben, z.B. "Fehler: Keine 4. Reklamationsposition in Auftrag AB16091202".
3. Er checkt, ob es sich bei der Bezugsauftragsnummer evtl. um eine LS Nummer handelt. Falls ja, wird das korrigiert. Gesplittete Aufträge wie AB16091202#1, etc. sollten natürlich auch funktionieren.
Das Thema Lieferanten-Reklamationen ist und bleibt auch trotz dieser "Lösung" eine Baustelle und ich mache es im Moment auch selbst noch nicht so, wie hier beschrieben, sondern recht konventionell über Ausliefer-Aufträge und Lieferantenbestellungen mit den realen Artikelnummern, vor allem weil ich praktisch nur mit Seriennummern-Artikeln arbeite und diese Lösung hier dabei nicht 100% geeignet ist. Dass ich mir damit die gesamte Statistik und den GLD zerlege ist mir klar, aber mir fällt zu SN-Artikeln nichts besseres ein.
Aber gerade deshalb weil hier vor allem Fantasie gefragt ist, würde mich wirklich freuen, wenn Ihr mir und allen anderen Interessierten antworten und erläutern könntet, welche konkreten Lösungen ihr für Lieferanten-Reklamationen gefunden und eventuell schon implementiert habt.
Gruß,
Ingmar