Inaktiv [DotLiquid] Variablenzuweisungen (Summen) in einer Schleife

isential

Aktives Mitglied
26. Oktober 2017
9
0
Ist es möglich, innerhalb einer Schleife eine Variable aufzuaddieren? Ich möchte über alle Positionen eines Auftrags schleifen und einige Werte dabei aufsaldieren, um deren Summe auszugeben. Unter anderen würde ich gerne die einzelnen Rabatte zusammenzählen, um den Gesamtrabatt auszugeben.

Im Voraus vielen Dank!

René
 

isential

Aktives Mitglied
26. Oktober 2017
9
0
Nun bin ich nach umfangreicher Suche ein kleines Stück weiter, was die Syntax angeht. Ich habe folgenden Code in der Vorlage:

Code:
{% assign Gesamtrabatt = 0.0 -%}
{% for Artikelbeschreibungen in Vorgang.Positionen -%}
{% assign Gesamtrabatt = Gesamtrabatt | plus: Artikelbeschreibungen.RabattGesamt -%}
<ZEILE>
NUMMER{{ Tabulator }}{{ Artikelbeschreibungen.Artikelnummer |Trim }}
BEZEICHNUNG{{ Tabulator }}Artikelbezeichnung: {{ Artikelbeschreibungen.Artikelbezeichnung | Trim }}
MENGE{{ Tabulator }}{{ Artikelbeschreibungen.Menge | Nummer: 'N4','en-US' }}
BRUTTOGEWICHT{{ Tabulator }}{{ Artikelbeschreibungen.VersandgewichtEinzel | Nummer: 'N4','en-US' }}
STUECKPREIS{{ Tabulator }}{{ Artikelbeschreibungen.NettopreisEinzel | Nummer: 'N4','en-US' }}
RABATT_PROZ{{ Tabulator }}{{ Artikelbeschreibungen.RabattProzent | Nummer: 'N4','en-US' }}
RABATT_GESAMT{{ Tabulator }}{{ Artikelbeschreibungen.RabattGesamt | Nummer: 'N4','en-US' }}
</ZEILE>
{% endfor -%}
RABATT_BRUTTO{{ Tabulator }}{{ Gesamtrabatt | Nummer: 'N4','en-US' }}

Ich bekomme bei meinem Beispiel mir Rabatt folgende Ausgabe:

Code:
<ZEILE>
NUMMER   127
BEZEICHNUNG   Artikelbezeichnung: Als Top Artikel markiertes Produkt
MENGE   2.0000
BRUTTOGEWICHT   0.0000
STUECKPREIS   66.3866
RABATT_PROZ   10.0000
RABATT_GESAMT   15.8000
</ZEILE>
<ZEILE>
NUMMER   61
BEZEICHNUNG   Artikelbezeichnung: Produkt mit selbstdefinierten Meta-Keywords
MENGE   3.0000
BRUTTOGEWICHT   0.0000
STUECKPREIS   40.3361
RABATT_PROZ   5.0000
RABATT_GESAMT   7.2000
</ZEILE>
RABATT_BRUTTO   0.0000

Bis auf die Summe (letzte Zeile RABATT_BRUTTO bzw. Gesamtrabatt) alles in Ordnung. Rabate sind vorhanden, die Summe funktioniert jedoch nicht und ich komme nicht drauf.

Was mache ich hier falsch?

Im Voraus vielen Dank!

René
 
Zuletzt bearbeitet:

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Hallo René,

das liegt daran, dass Du die nicht existierende Array-Variable Vorgang.Positionen benutzt. Ich kann zwar in Deiner Beispiel-Ausgabe oben sehen, dass Du darüber offenbar Werte ausgegeben bekommst, aber das ist mir ein Rätsel, denn bei mir (1.3.10.0-RC) funktioniert das NICHT und die Variable oder eher das Array Vorgang.Positionen gibt es dort definitiv NICHT. - Richtig wäre hier Vorgang.AuftragsPositionen.Positionen.

Hier mal eine Minimallösung, die Dir nur den Brutto-Gesamtrabatt aufsummiert ausgibt ...
Code:
{% assign GesamtRabattBrutto = 0.0 -%}
{% for AuftragsPosition in Vorgang.AuftragsPositionen.Positionen -%}
{% assign GesamtRabattBrutto = GesamtRabattBrutto | Plus: AuftragsPosition.RabattGesamt -%}
{% endfor -%}
{{ GesamtRabattBrutto | FormatNumber: 'N2','de-DE' }}

Und der Vollständigkeit halber hier auch noch die Lösung, die Dir den Netto-Gesamtrabatt aufsummiert ausgibt ...
Code:
{% assign GesamtRabattNetto = 0.0 -%}
{% for AuftragsPosition in Vorgang.AuftragsPositionen.Positionen -%}
{% assign EinzelRabattNetto = AuftragsPosition.NettopreisEinzel | Times: AuftragsPosition.Menge | Times: AuftragsPosition.RabattFaktor -%}
{% assign GesamtRabattNetto = GesamtRabattNetto | Plus: EinzelRabattNetto -%}
{% endfor -%}
{{ GesamtRabattNetto | FormatNumber: 'N2','de-DE' }}

Bei der Lösung für den Netto-Gesamtrabatt muss ich den Einzelrabatt in einer separaten Variable "vorberechnen", um sie dann auf den Gesamtrabatt zu addieren, weil die DotLiquid Filter nur total begrenzt geschachtelt werden können und im Zweilfel resultiert dann immer 0, nicht lustig ... :confused:

Gruß,
Ingmar
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Hallo René,

bei den beiden Lösungen und auch bei meiner Aussage zu Vorgang.Positionen hier drüber bin ich davon ausgegangen, dass Du das Ganze in einem Wawi- Workflow benutzen wolltest, jetzt war ich aber gerade an einer anderen Sache dran, die sich im Bereich Vorlagen > Export abspielt und siehe da, dort gibt es tatsächlich Vorgang.Positionen.

Und dort bekomme ich Deinen Code mit der Änderung eines einzigen Buchstabens sofort zum Laufen: Ändere mal das kleine "p" von "plus" in ein großes "P" ... ;)

Das ist dann aber immer noch der Brutto-Rabatt und falls Du den Netto-Rabatt haben willst, findest Du den Weg dahin nach wie vor hier drüber in meinem vorherigen Beitrag. Das funktioniert ganz analog: Zwischenvariable erzeugen, in der Du über NettopreisEinzel * Menge * RabattFaktor den Positions-NettoRabatt errechnest und danach addierst Du diesen Wert über "Plus:" mit großem "P" auf Deine Variable mit dem GesamtRabatt drauf.

Gruß,
Ingmar
 
  • Gefällt mir
Reaktionen: isential

isential

Aktives Mitglied
26. Oktober 2017
9
0
Vielen Dank! Das war's! Ohne dass jemand über die Schulter schaut, dreht man sich oft im Kreis. Jetzt funktioniert es prima.

Wenn ich ein paar kleine Fragen/Anmerkungen einschieben darf?

  1. Kommt man schneller zu den Vorlagen? Ich muss immer über "Admin | Druck-, E-Mail-, Exportvorlagen | Vorlagensets | Exporieren | Vorlage | Bearbeiten" gehen, was jedes Mal viel Geklicke bedeutet. Gibt es eine Möglichkeit, diesen Vorlageneditor direkt mit der Vorlage aufzurufen?


  2. Kann man im Vorlageneditor, ohne diesen zu verlassen, die gerade zu bearbeitende Vorlage speichern? Ich muss immer auf "OK" klicken und dann auf "Speichern". Dann bin ich wieder draußen und muss mich mühselig wieder in den Vorlageneditor klicken.


  3. Könnte man dem Vorlageneditor das Verlassen beim betätigen der ESC-Taste nicht abgewöhnen? Einfach raus, ohne zumindest eine Abfrage, ist etwas suboptimal. Wenn man nicht aufpasst, sind alle Edits weg.

Nochmals herzlichen Dank!

René
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.292
395
Hi René,

bevor ich Deine Fragen beantworte auch von mir noch eine kleine Anmerkung, weil eine Sache oben wichtig und nicht direkt nachvollziehbar ist ...

Vielleicht hast Du Dich gewundert, warum ich oben für die Berechnung des Artikel-NettoRabatts den Weg über NettoPreisEinzel * BestellMenge * RabattFaktor gewählt habe und nicht einfach NettoPreisGesamt * RabattFaktor genommen habe. Der (wichtige!) Grund dafür ist, das die Variable NettopreisEinzel den *unrabattierten* Netto-Einzelpreis enthält, die Variable NettopreisGesamt aber den *rabattierten* Netto-Gesamtpreis! - Ob das Sinn macht und falls ja, welchen, kann nur JTL sagen ...

1. Nein, da kommt man leider nicht schneller hin. An der Software-Ergonomie gibt es auch insgesamt noch einiges zu feilen, wie auch Deine weiteren Fragen zeigen...
2. Ich gehe mal davon aus, dass Du auch hier den Bereich "Export" meinst und dann lautet die Antwort auch hier "nein". Grundlegende Editor-Funktionen fehlen einfach. IM Editor speichern zu können ist eigentlich eine Forderung der späten 70er Jahre...
>> In den Druck-Vorlagen kannst Du zwar im Vorlageneditor selbst "Speichern", aber wenn Du danach aber im übergeordneten Menü nicht noch einmal auf "Speichern" klickst, wird nichts gespeichert. - Wow, das ist echt schon Anti-Ergonomie!
3. Nicht Schließen mit ESC: Da bin ich selbst aktiv Leidtragender, siehe hier und hier. Das hat gottseidank zu diesem Ticket geführt und das Problem ist seit der 1.3.7.0 - effektiv also in der bald kommenden 1.3er Wawi gelöst.

Gruß,
Ingmar
 

isential

Aktives Mitglied
26. Oktober 2017
9
0
Danke. Hast du mir sehr geholfen.

Ja, die Ergonomie scheint ein wenig unterentwickelt zu sein, aber einem geschenkten Gaul schaut man nicht ins Maul...

Ich verwende JTL eigentlich als Interface zu Magento, Amazon und ebay. Alles andere passiert im eigenen ERP-System.

Schönen Sonntag!

René
 
Ähnliche Themen

Ähnliche Themen