In Diskussion Workflow für Kleinpaket anhand eigener "Volumenzahl"

pannscheck

Sehr aktives Mitglied
1. Mai 2009
291
83
Hallo,

Wir möchten jedem Artikel eine "Volumenzahl" anhand seiner Größe hinterlegen.

z.B.
  • Ein Artikel passt in Kleinpaket = Volumenzahl "100"
  • Vom Artikel passen 2 Stück in Kleinpaket = Volumenzahl "50"
  • Vom Artikel passen 6 Stück ins Kleinpaket = Volumenzahl "15"
  • Vom Artikel passen 10 Stück ins Kleinpaket = Volumenzahl "10"
  • Artikel ist zu groß = Volumenzahl "111"

Ein Workflow soll nun bei ankommenden Aufträgen alle Volumenzahlen zusammenzählen.
Pakete bis einschließlich Volumenzahl "100" sind ein Kleinpaket. Alle darüber nicht mehr.
Nutzen würden wir für diese Zahl gerne das Feld "ISBN" (da nicht benötigt) oder auch ein "Eigenes Feld" beim Artikel.

Meine Frage:
Wie bekomme ich eine Formel, die alle "Volumenzahlen" eines Auftrages zusammenrechnet?
(Leider kann man unter Aufträge-Workflows scheinbar nicht auf ISBN oder Eigene Felder zugreifen und daher nicht mit diesen rechnen.)

Danke vorab, Pannscheck
 
Zuletzt bearbeitet:

Steffen80

Sehr aktives Mitglied
27. August 2012
495
105
Ich würde ein Eigenes Feld nehmen

Schleife über alle Auftragspositionen und damit im Auftrag wieder ein Eigenes Feld füllen welches dann deine Volumezahl enthält
For Anzahl in Auftragspositionen

Variablen ISBN und Eigene Felder sind da:

Vorgang.AuftragsPositionen.Positionen.[?ForLoopIndex?].Artikel.EigeneFelder.?Feldgruppe?.?Feldname?

Als Anregung
 

pannscheck

Sehr aktives Mitglied
1. Mai 2009
291
83
Hallo,

wer auch die Versandart auf Kleinpaket nachträglich automatisch ändern möchte, hier unsere Lösung mit einer "Volumenzahl".
(Läuft bei uns seit einigen Wochen problemlos mit Wawi 1.9.7)

1. Volumenzahl hinterlegen
Wir haben bei jedem Artikel eine "Volumenzahl" hinterlegt. Bei der Zahl "100" wäre das Kleinpaket zu 100% voll.
(Wir nutzen das Feld ISBN beim Artikel, da wir es ansonsten nicht benötigen. Es wäre aber auch ein eigenes Feld möglich.)
  • Ein Artikel passt in Kleinpaket = Volumenzahl "100"
  • Vom Artikel passen 2 Stück in Kleinpaket = Volumenzahl "50"
  • Vom Artikel passen 6 Stück ins Kleinpaket = Volumenzahl "15"
  • Vom Artikel passen 10 Stück ins Kleinpaket = Volumenzahl "10"
  • Artikel ist zu groß = Volumenzahl "111" (oder auch leer lassen)
Gemischt sollte es auch passen:
1x "50" und 3 x "15" passen (da Volumenzahl "95")
3 x "15" und 6 x "10" sind zu gross (da "105")

2. Workflow "DHL Kleinpaket" erstellen (Regeln siehe Screenshot unten):
unter Aufträge -> Auftrag -> Erstellt ->

Bedingungen:
1. Keine FBA Auftrage ändern. Wir erkennen diese an der Anmerkung. Eventuell kann man auch noch andere Aufträge rausfiltern die nicht als Kleinpakt raus sollen.
2. Gesamtgewicht. Wir nehmen unter 900g Gesamtgewicht als Sicherheit (Erlaubt sind 1kg)
3. Gesamtpreis. Kleinpakete sind schlecht versichert. Bei hohen Werten besser als normales Paket versenden.
4. Nur DE. Kleinpakt nur innerhalb Deutschland erlauben.
5. Versandart DHL. Wenn ein Kunde im Shop etwas anderes als DHL (z.B. DPD, GLS, Selbstabholer, ...) gewählt hat, soll nicht als DHL Kleinpaket gewandelt werden.
6. "Script Kleinpaket" prüft das Gesamtvolumen (Script siehe unten)
Aktionen:
A: Versandart wird auf "Kleinpaket" geändert
B: Wir schreiben bei den Anmerkungen die im Script errechnete Volumenzahl noch hinzu, z.B: "VZ = 90". (Ist nur zur Eigenkontrolle und wird eigentlich nicht benötigt)


kleinpaket.png


3. Script erstellen
Das Script erstellt ihr im Workflow bei den Bedingungen unter "Erweitere Eigenschaften".
Es rechnet die Volumenzahl (VZ) aus und bringt das Ergebnis "Kleinpaket" wenn die VZ kleiner als 101 ist.

Code:
{% comment %}
Berechnet die Volumenzahl aus der ISBN. Wenn VZ größer als "100", ist es kein Kleinpaket mehr.
Wenn eine ISBN nicht eingetragen ist, wird VZ auf + 1000 gesetzt. Zu Sicherheit ist es dann kein Kleinpaket.
{% endcomment %}
{% assign VZ = 0.0 -%}
{% assign AZ = 0.0 -%}
{% assign VZPOSITION = 0.0 -%}
{% for Volumen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% if Volumen.Artikel.ISBN < "0" .or. Volumen.Artikel.ISBN > "1000" -%}
{% assign VZ = VZ | Plus:  1000 -%}
{% else -%}
{% assign VZPOSITION = Volumen.Artikel.ISBN | Times: Volumen.Menge -%}
{% assign VZ = VZ | Plus:  VZPOSITION -%}
{% endif -%}
{% endfor -%}
Vol.zahl: {{ VZ }},
{% if VZ > 0 and VZ < 101 %}Kleinpaket{% else %}zu gross{% endif %}




Es ist ein wenig Arbeit bei allen Artikeln (zumindest bei denen, die für ein Kleinpakt geeignet wären) eine Volumenzahl unter ISBN zu hinterlegen.
Die kann per Hand, Workflow oder "Artikel/Stammdaten" kopieren/einfügen geschehen.

Für uns war diese eigene Idee aber bisher die beste Lösung, da das Ausrechnen mit den Maßen (B, H, T), wie es im Forum auch vorgeschlagen wurde sehr oft nicht passt.
Gerne ausprobieren. Ich freue mich auf eure Diskussion.

Gruss, Pannscheck
 

Wumse

Mitglied
7. Juli 2023
45
20
Würde bei uns niemals funktionieren. Nur, weil von einem Artikel 2 Stück in ein Kleinpaket passen, heißt das ja noch lange nicht, dass dieser Artikel auch zusammen mit anderen Artikeln in Kombination in ein Kleinpaket passen würde. Nur bei Artikelreinen Bestellungen würde dein Skript bei uns funktionieren.
 

Steffen80

Sehr aktives Mitglied
27. August 2012
495
105
Ansatz ist gut. Ich würde die Daten aber direkt beim Artikel pflegen, Felder sind ja vorhanden.
Sprich Maße und Gewicht jedes Artikels hinterlegen und dann einen entsprechenden algorithmus finden.

Stichwort:

bin packing algorithm 3D
 
  • Gefällt mir
Reaktionen: Erni-Karotte

sjk

Sehr aktives Mitglied
16. Januar 2019
624
277
Ich denke bei pannscheck war das Ziel eher, annähernd die richtige Versandart vorzubelegen. Falls es mal doch nicht passt ist das im Versand ja schnell geändert. Da ist dieser simple Ansatz völlig ausreichend.
Das ist trotzdem total spannend! Wir hatten mal etwas umgesetzt, zum Stapeln nicht sortenreiner Paletten. Wir hatten da ein Python-Skript mit py3dbp. Da würde vom Workflow die interne Auftragsnummer übergeben, das Skript hat sich alle Daten aus der Datenbank geholt und das Ergebnis in einer Visualisierung mit Packanleitung pro Ebene ausgegeben.
 
  • Gefällt mir
Reaktionen: pannscheck

Kissenoutlet24.de

Gut bekanntes Mitglied
2. April 2012
171
9
Sonneberg
Hallo,

leider motzt ebay rum wenn ich die ISBN Nummer belege, da der Wert dann falsch ist.
Habe jetzt, ein Eigenes Feld (Volumen-Kleinpaket) im Artikel, im Reiter Eigene Felder angelegt.
Den Code von ISBN zu Volumen-Kleinpaket leider wohl falsch 😵
Hat jemand einen TIP?


Code:
{% comment %}
Berechnet die Volumenzahl aus der ISBN. Wenn VZ größer als "100", ist es kein Kleinpaket mehr.
Wenn eine ISBN nicht eingetragen ist, wird VZ auf + 1000 gesetzt. Zu Sicherheit ist es dann kein Kleinpaket.
{% endcomment %}
{% assign VZ = 0.0 -%}
{% assign AZ = 0.0 -%}
{% assign VZPOSITION = 0.0 -%}
{% for Volumen in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% if Volumen.Artikel.Volumen-Kleinpaket < "0" .or. Volumen.Artikel.Volumen-Kleinpaket > "1000" -%}
{% assign VZ = VZ | Plus:  1000 -%}
{% else -%}
{% assign VZPOSITION = Volumen.Artikel.Volumen-Kleinpaket | Times: Volumen.Menge -%}
{% assign VZ = VZ | Plus:  VZPOSITION -%}
{% endif -%}
{% endfor -%}
Vol.zahl: {{ VZ }},
{% if VZ > 0 and VZ < 101 %}Kleinpaket{% else %}zu gross{% endif %}
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
Hallo @Kissenoutlet24.de,

ohne den Code durchdacht zu haben, adressierst Du auf jeden Fall das Eigene Feld falsch. Du musst schon noch "EigeneFelder" mit angeben, wenn Du direkt den Inhalt eines speziellen Eigenen Feldes ausgegeben haben möchtest, und zusätzlich noch die Gruppe, unter der sich das Eigene Feld befindet. Also so:

Code:
Volumen.Artikel.EigeneFelder.Eigene-Felder-Gruppe.Volumen-Kleinpaket

Eigene-Felder-Gruppe müsstest Du also mit dem tatsächlichen Wert ersetzen. Ich hoffe, der Bindestrich in der Bezeichnung des Eigenen Feldes macht hier keine Probleme. Ansonsten gibt es noch eine andere generelle Methode, den Wert eines Eigenen Feldes zu extrahieren:

Code:
{% assign EigeneFelder = Volumen.Artikel.EigeneFelderAlsText | Split: '|' %}{% for Feld in EigeneFelder %}{% if Feld contains 'Bezeichnung Eigenes Feld'%}{{ Feld | Remove: 'Bezeichnung Eigenes Feld=' }}{% endif %}{% endfor %}

Am besten schreibt man das Ergebnis dann in eine Variable.

Wenn Du das Eigene Feld als Fließkommazahl (oder Ganzzahl) angelegt hast, kannst die Anführungszeichen um 0 und 1000 weglassen.
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
840
Flensburg
{% if Volumen.Artikel.ISBN < "0" .or. Volumen.Artikel.ISBN > "1000" -%}

Das < "0" und > "1000" wird in aller Regel funktionieren, aber bspw. wenn das Feld ISBN leer ist, ist < "0" True. Und wenn da aus Versehen ein Buchstabe drinsteht (Tippfehler), dann wird der in eine Zahl umgewandelt. Numerische Vergleiche mit Strings sind selbst in DotLiquid so ne Sache... 🙂
 

Ähnliche Themen