Neues Thema starten

Loop oder Repeat Funktion

Ich bin es wieder... :)


Gibt es eine Art Loop Funktion für bestimmte Steps innerhalb eines Flows? Bisher habe ich nichts gefunden.


Falls nicht, vielleicht könnt Ihr mir auch anders helfen:


Sheet wird gefiltert nach Aufträgen, die Bestand >0 sind (ziehe vorher die Stocks aus Plenty) und sollen dann angelegt werden.

Nun ist aber das Problem: 3 Gleiche Positionen bestellt von unterschiedlichen Kunden - 2 im Bestand. Filter lässt alle 3 durch, da Bestand größer 0 (2 muss er ja auch durchlassen) und 1 Artikel wird überverkauft.


Er soll also nur so viele gleiche Positionen durchlassen, wie auch im lager verfügbar ist.

Man könnte die Aufträge einzeln durchlassen und jedesmal mit PlentyGetStocks aktualisieren und dann wieder filtern, aber Ohne Loop ist das fragwürdig und würde zu einem ewigen Flow führen bei einer gewissen Anzahl Artikel.


Vielleicht habt Ihr ja eine Lösung dafür?


Danke + Grüße

Enrico



Hallo Enrico, 


eine Loop Funktion gibt es nicht mehr. Du könntest das Problem aber z.B. mit einem Counter lösen. Das Feature ist noch recht neu und undokumentiert. Du findest im Forum unter https://synesty.freshdesk.com/discussions/topics/11000013636 einige Informationen zum Counter.


Die Logik/das Skript müsste dann in etwa wie folgt aussehen (Beispiel, Spaltennamen etc. musst du anpassen): 

   

<#if SKU! != "" && (meta.counter.get(SKU!) < GesamtbestandArtikel?number)>
  <#if GesamtbestandArtikel?number >= (meta.counter.get(SKU!) + quantity?number)>
    <#-- Bestellposition vollständig lieferbar-->
    <#-- counter um quantity hochzählen -->
     <#list 1..quantity?number as num><#assign meta.counter.inc(SKU!) /></#list>
  <#else>
    <#-- Bestellposition nicht vollständig lieferbar-->
  </#if>
</#if>

 

  

Ich bin leider noch nicht ganz sicher, ob das so passt. Bezieht sich die Quell-SKU in dem Skript nun auf eine bestimmte oder schaut er nach "gleichen" SKU´s?


Ich weiß noch nicht wie ich das im Mapper und im Filter einbinde.


Es handelt sich immer um unterschiedliche Bestellungen, also können die Texte wegfallen. Es soll eben nur durch den Filter was auch da ist. Ich denke hier liegt die größte schwierigkeit. Denn man müsste wissen, ob der Filter Sheets auch von oben nach unten abarbeitet oder nicht.


Ich brauche ja dann einmal einen Code der immer "gleiche" SKU´s hochzählt, so dass alle "gleichen" SKU´s jeweils getrennt mit einem neuen Counter starten. 


Dann müssen diese Counter jeweils mit der Anzahl innnerhalb des Auftrages zusammengezählt werden.


Diese zusammenzählung muss dann widerrum mit dem Gesamtbestand abgeglichen werden.


Kann ich dann Gruppierungen nach 2 Faktoren machen? Denn ich müsste ja nach SKU Gruppieren und diese dann widerrum so, dass mit der größten Menge angefangen wird, sonst funktioniert der Filter auch nicht. 


Im Detailbeispiel stelle ich mir das so vor, wie im Anhang, vielleicht kann ich es damit besser erklären.


Danke und Grüße

Enrico








txt
(1.13 KB)

Hi Enrico, 


ich habe die Antworten direkt unter deine Fragen gepackt.


Ich bin leider noch nicht ganz sicher, ob das so passt. Bezieht sich die Quell-SKU in dem Skript nun auf eine bestimmte oder schaut er nach "gleichen" SKU´s? 

Es bezieht sich auf die Quellspalte SKU -> Er schaut nach gleichen SKUs (Ein Counter pro SKU).


Ich weiß noch nicht wie ich das im Mapper und im Filter einbinde. 

Im Mapper in das Wert Feld, im Filter könntest du dann alle Positionen mit "verfügbarerMenge" < 0 rausfiltern


Es handelt sich immer um unterschiedliche Bestellungen, also können die Texte wegfallen. Es soll eben nur durch den Filter was auch da ist. Ich denke hier liegt die größte schwierigkeit. Denn man müsste wissen, ob der Filter Sheets auch von oben nach unten abarbeitet oder nicht. 

Die Texte sind Freemarker Kommentare die du einfach entfernen kannst. Sheets werden von oben nach unten abgearbeitet.


Ich brauche ja dann einmal einen Code der immer "gleiche" SKU´s hochzählt, so dass alle "gleichen" SKU´s jeweils getrennt mit einem neuen Counter starten.  

Wie in der 1. Frage -> Ein Counter pro SKU. counter.get(SKU) gibt dir den Zählerstand für die spezielle SKU und  counter.inc(SKU) erhöht den Zählerstand um eins für diese spezielle SKU 


Dann müssen diese Counter jeweils mit der Anzahl innnerhalb des Auftrages zusammengezählt werden. 

Das passiert mit <#list 1..quantity?number><#assign meta.counter.inc(SKU!) /></#list> Der Zählerstand für die SKU wird um die Anzahl in der Spalte quantity erhöht.

 

Diese zusammenzählung muss dann widerrum mit dem Gesamtbestand abgeglichen werden. 

Den Gesamtbestand muss du dir (am besten per Querverweis aus einem Datastore) für diese SKU holen. Die Abfrage ob der Gesamtbestand in der Zeile/für die Position ausreicht ist dann <#if GesamtbestandArtikel >= (meta.counter.get(SKU!) + quantity?number)>


Kann ich dann Gruppierungen nach 2 Faktoren machen? Denn ich müsste ja nach SKU Gruppieren und diese dann widerrum so, dass mit der größten Menge angefangen wird, sonst funktioniert der Filter auch nicht.  

Du kannst dafür 2 SpreadsheetMapper verwenden. Erst sortieren und dann gruppieren. Ich denke aber, dass du die Gruppierung nicht benötigst 


Im Detailbeispiel stelle ich mir das so vor, wie im Anhang, vielleicht kann ich es damit besser erklären. 


VG Torsten


Hallo Torsten,
ich bekomme Fehler im mapper und weiß nicht warum. Habe deine Beispiele übernommen, teils angepasst.
Ich bin in Freemarker leider erst ganz am Anfang. Eventuell kann sich jemand von euch die letzten 3 Spalten im Mapper (Step 10) in meinem Projekt mal ansehen, Supportuser ist erstellt.

 

Habe dir im Ticket (#6330) geantwortet.

Anmelden um einen Kommentar zu veröffentlichen