Paketnummer pro Versandeinheit

Hallo zusammen,

ich hänge gerade etwas fest, eventuell kann mir jemand einen Denkanstoß geben.

Man bekommt aus Plenty die verschiedenen Artikelzeilen geliefert und ebenfalls kann man ja die Paketnummern ausgeben.

Nehmen wir an, wir haben 3 verschiedene Artikelpositionen.

„Pos. 1“ „Stückzahl 3“ „Tracking; Tracking; Tracking; Tracking; Tracking; Tracking; Tracking“
„Pos. 2“ „Stückzahl 1“ „Tracking; Tracking; Tracking; Tracking; Tracking; Tracking; Tracking“
„Pos. 3“ „Stückzahl 3“ „Tracking; Tracking; Tracking; Tracking; Tracking; Tracking; Tracking“

Jedes Paket hat eine eigene Sendungsnummer, es werden also 7 Sendungsnummern aus Plenty gelesen. Zudem werden 3 Artikelzeilen mit der jeweiligen „Quantity“ ausgegeben.

Ich brauche nun für die Weiterverarbeitung aber die Ausgabe wie folgt:

„Pos. 1“ „Stückzahl 1“ „Tracking“
„Pos. 1“ „Stückzahl 1“ „Tracking“
„Pos. 1“ „Stückzahl 1“ „Tracking“
„Pos. 2“ „Stückzahl 1“ „Tracking“
„Pos. 3“ „Stückzahl 1“ „Tracking“
„Pos. 3“ „Stückzahl 1“ „Tracking“
„Pos. 3“ „Stückzahl 1“ „Tracking“

Es muss also an Hand von der Anzahl in je eine Zeile gesplittet werden und in jeder Zeile muss eine unterschiedliche Tracking ID der insgesamt 7 Stück stehen. Das Splitten der Artikel sollte nicht das Problem sein, ich komme nur nicht drauf, wie ich dann in jede Zeile eine andere Tracking ID bekome

Kann mir hier jemand auf die Sprünge helfen, wie ich das am besten hinbekomme?

Danke und Grüße
Enrico

Hallo Enrico,

mit dem Step „ColumnSplitToRows“ kannst du Spalten die mehrere mit einem Separator getrennte Werte in einer Spalte haben in mehrere Zeilen teilen. Separator wäre in deinem Fall das Semikolon. Die anderen Spalten bleiben dabei gleich. Die Stückzahl muss dann, wenn die immer bei 1 ist, manuell in die Spalte eingetragen oder mit einer anderen Logik gefüllt werden.

Beste Grüße,

Rocco

Hallo Rocco,

Danke erstmal. Wie gesagt, das splitten ist nicht das Problem.
Schwierig wird es nur, da egal nach was du zuerst splittest die Zeilen gleich bleiben.

Splittest du zuerst nach Anzahl, dann hast du 7 Zeilen mit je 7 Trackingnummern.
Wenn man die dann splittet sind es 7x7 Zeilen.

Oder gibt es einen Trick, wie ich nach dem Splitten auf Anzahl (Also dann 7 Zeilen mit je 7 Nummern)
dem Mapper sagen kann, er soll pro Zeile immer die nächste TrackingNummer nehmen (das muss natürlich variabel sein da es ja auch mal 50 Trackingnummern sein können).

Danke und Grüße
Enrico

Hallo Enrico,

also sind in deinem Beispiel die Trackingnummern in jeder Zeile gleich?

„Pos. 1“ „Stückzahl 3“ „Tracking1; Tracking2; Tracking3; Tracking4; Tracking5; Tracking6; Tracking7“
„Pos. 2“ „Stückzahl 1“ „Tracking1; Tracking2; Tracking3; Tracking4; Tracking5; Tracking6; Tracking7“
„Pos. 3“ „Stückzahl 3“ „Tracking1; Tracking2; Tracking3; Tracking4; Tracking5; Tracking6; Tracking7“

soll zu:

Pos. 1“ „Stückzahl 1“ „Tracking1“
„Pos. 1“ „Stückzahl 1“ „Tracking2“
„Pos. 1“ „Stückzahl 1“ „Tracking3“
„Pos. 2“ „Stückzahl 1“ „Tracking4“
„Pos. 3“ „Stückzahl 1“ „Tracking5“
„Pos. 3“ „Stückzahl 1“ „Tracking6“
„Pos. 3“ „Stückzahl 1“ „Tracking7“

transformiert werden?

Viele Grüße,

Rocco

Hallo Rocco,

genau, es steht nach dem Splitten auf Anzahl in jeder Zeile bei „Trackingnummer“ das selbe drin. Also immer diese 7 gleichen Nummern.

Und ich brauche je eine davon pro Zeile.

VG
Enrico

Hallo,

ich schalt mich mal ein. Das ist garnicht mal so einfach zu lösen. Im Grunde muss man in jeder Zeile wissen, wie groß die Summe der Stückzahlen aus allen vorherigen Zeilen ist.
Falls ich nicht eine groben Denkfehler haben, lässt sich das nur lösen, indem man über das Spreadsheet in Freemarker iteriert.

Ich hatte initial an eine Lösung im Mapper gedacht, die wollte aber einfach nicht wie gewünscht funktionieren. Deshalb hier die Alternative über einen HTMLTextWriter.

Hier das Skript:

<#assign current_index_offset = 0>
<#list spreadsheet@SpreadsheetCSVReader_3.getRows() as row>
<#list 0…row.get(„Stückzahl“)!?number-1 as index>
${row.get(„Position“)},${row.get(„Stückzahl“)},${row.get(„Tracking-Nummern“)!?split(’;’)[index+current_index_offset]}
</#list>
<#assign current_index_offset = current_index_offset + row.get(„Stückzahl“)!?number> <#-- Verschiebe den index um $$Stückzahl$$ Spalten →
</#list>

Aus dem Spreadsheet

erstellt das Skript die komma-seperierte Liste

grafik

Bitte beachte, dass du die Variablen, also spreadsheet@SpreadsheetCSVReader_3 sowie die Spaltenname (Position,Stückzahl und Tracking-Nummern) anpassen musst.

Hier nochmal eine detailierte Erklärung des Skripts:

<#assign current_index_offset = 0>
Die Variable current_index_offset speichert die Summe aus der Stückzahl aller bisherigen Spalten. Anfangs steht sie auf 0.
<#list spreadsheet@SpreadsheetCSVReader_3.getRows() as row>Äußere Schleife über die Zeilen im Inputspreadsheet
<#list 0…row.get(„Stückzahl“)!?number-1 as index>Innere Schleife
Die Schleife wird so häufig durchschritten, wie die Stückzahl vorgibt. Die Variable index wird von 0 hochgezählt.
${row.get(„Position“)},${row.get(„Stückzahl“)},${row.get(„Tracking-Nummern“)!?split(’;’)[index+current_index_offset]}
Hier wird die Ausgabe geschrieben. Aus der Liste der Tracking-Nummern wird nur ein Element genommen. Der Index des Element berechnet sich aus der inneren Schleifenvariable index und current_index_offset
</#list> Ende der inneren Schleife
<#assign current_index_offset = current_index_offset + row.get(„Stückzahl“)!?number>
Nun wird noch die Variable um die Stückzahl bzw. bearbeiteten Tracking-Nummern erhöht.
</#list>Ende der äußeren Schleife

Wünsche einen schönen Abend,
Gustav

1 Like

Hallo Enrico,

ich habe auch noch einen ähnlichen Ansatz.

Du brauchst hierfür aber noch eine OderNummer oder sowas, um die Zeilen pro Auftrag wie im Bild zu gruppieren.

Danach packst du einen HTMLTextWriter mit folgender Logik:

Die Idee dabei: Erstmal alles in eine Zeile.
Dann iterierst du über die Menge, innerhalb des Loops dann noch x mal (die reale Menge pro Position) und gibst dabei den Index der Position (eigentlich der Index der Menge) dazu aus. Vor dem Durchlisten legst du noch einen Zählvariable fest, die den Index der Trackingnummern bestimmt. Am Ende kommt eine CSV raus die wieder als Spreadsheet eingelesen oder als Datei verschickt werden kann. und nicht vergessen bei der Menge fest eine 1 einzutragen.

Viele Grüße,

Rocco

1 Like

Vielen Dank für eure Tips!
So komme ich erstmal weiter

Viele Grüße
Enrico