Dass man meistens keine einheitlichen Margen hat, ist klar, wäre auch zu schön... - Je ein
Workflow pro Artikelnummer klingt aber gar nicht gut. Ich würde Dir stattdessen vorschlagen, dass Du wie folgt vorgehst...
1. In
Artikel > Eigene Felder erst eine Gruppe
Preise und darin ein Eigenes Feld
Marge anlegen, Datentyp
Fließkommazahl und Ort vielleicht
Allgemein, damit Du es gleich auf der ersten Seite (=Erster Tab) in den Artikeldetails hast.
2. Dort pflegst Du Deine Margen und das gute ist, Du kannst die Margenwerte auch über die
Ameise im- und exportieren. Das ist schon mal viel wert.
3. Meine Workflow-Zeile von oben wie folgt ändern...
Code:
{% assign marge = 1.0 | Minus: Vorgang.Artikel.EigeneFelder.Preise.Marge %}
{% if marge <> 0 %}
{{ Vorgang.Artikel.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | DividedBy: marge }}
{% else %}
{{ Vorgang.Artikel.Allgemein.PreiseEinheiten.VK-Netto }}
{% endif %}
4. Damit greift die Funktion auf Deine als
Eigenes Feld angelegte
Marge zu, subtrahiert sie von 1, um dann damit den neuen VK-Netto zu berechnen. Und das If() Konstrukt ist dafür gedacht, falls Du einmal aus Versehen eine Marge von 1.0 eingibst, was nicht definiert ist und eine Division durch 0 ergibt, denn dann wird stattdessen der ehemalige VK-Netto zurückgeliefert und weiterverwendet.
Und wenn Du den neuen VK-Netto zum Beispiel für Deutschland mit zwei Nachkommastellen und mit Dezimalkomma geliefert bekommen willst, dann erweiterst Du das Ganze einfach so...
Code:
{% assign marge = 1.0 | Minus: Vorgang.Artikel.EigeneFelder.Preise.Marge %}
{% if marge <> 0 %}
{% assign vknetto = Vorgang.Artikel.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | DividedBy: marge %}
{{ vknetto | FormatNumber: 'N2', 'de-DE' }}
{% else %}
{{ Vorgang.Artikel.Allgemein.PreiseEinheiten.VK-Netto }}
{% endif %}
Stücklisten: Ich habe dann noch probiert, ob ich bei einem Wareneingang für einen Stücklistenartikel andere Margen einsetzen kann (falls das überhaupt Sinn macht...), aber das funktioniert nicht, denn Stücklistenartikel werden beim Wareneingang in ihre Komponenten zerlegt und jede Komponente wird einzeln, also als eigener Artikel vereinnahmt. Damit liefert aber jede Postition des Stücklistenartikels in der Variable
Vorgang.Artikel.Sonstiges.IstStückliste den Wert
False zurück und damit wird klar, dass Stücklisten beim Wareneingang zwar angegeben werden können, man sie per
DotLiquid aber nicht als Stücklisten erkennt.
DotLiquid Infos und Vorgehen beim Lernen
Ich bin selbst auch noch lange nicht sattelfest mit DotLiquid und stolpere auch noch eher in der Gegend rum. Ob es z.B. im letzten Beispiel oben eine Möglichkeit gibt, den Wert zu dividieren und gleichzeitig zu runden, man also die Filter (DivideBy, FormatNumber) irgendwie schachteln kann, ist mir noch nicht klar. Im Web habe ich nichts dazu gefunden und für reines Trial & Error ist das Leben zu kurz. Es kann also sein, dass das oben viel einfacher geht, es geht aber eben auch so...
Es gibt aber schon einiges an Dokumentation zu Liquid und DotLiquid im Netz, auch von JTL, aber insgesamt bleibt noch genügend Raum für Fehler und frustriertes Rumprobieren. Mir selbst hilft dabei immer, die Terme, die ich haben will, ganz auf "Anfang" zurückzuschrauben. Will ich also wie oben beim "assign" eine JTL Variable von 1 abziehen, dann funktioniert das garantiert erst einmal NICHT, also schaue ich mit normalen Zahlen, wo die Fallstricke liegen. Die zugrundeliegende Sprache
Liquid z.B. subtrahiert mit "minus",
DotLiquid mit "Minus" und ignoriert "minus" einfach. Das kann dich schon mal 'ne Stunde kosten und die Dinge einfach halten hilft hier immens, weil dann weniger mögliche Fehlerursachen existieren.
JTL Guide Seiten
https://guide.jtl-software.de/Kategorie:JTL-Wawi:Vorlagen und dort Reiter "DotLiquid"
https://guide.jtl-software.de/DotLiquid_für_JTL-Anwender
Was zum Lernen direkt in der
Wawi exzellent ist, sind die Exportvorlagen im Bereich "Admin > Druck/Email/Exportvorlagen". Dort gibt es für viele der Vorlagentypen auch vorbereitete Exportvorlagen und die sind randvoll mit praktischen Beispielen für alles, was DotLiquid ausmacht. Der Editor in der JTL Wawi hat außerdem auch eine Intellisense Hilfe, die Dir Infos zu den Eigenschaften und Methoden der Objekte, die Du gerade in den Fingern hast, anzeigt.
>>> Nur niemals im JTL Editor ESC drücken, dann biste Deine Arbeit los (zumindest bis 1.2.1.0) ...
Shopify Liquid
Die Sprache Liquid stammt von
Shopify und hier findest Du auch komplette Referenzen auf die Sprache, ihre Struktur und ihren Umfang in sehr schön gestalteter und leicht verständlicher Form:
https://shopify.github.io/liquid/. Diese Seite ist für mich die Referenz zum Kennenlernen der Funktionen und der Logik.
DotLiquid
DotLiquid (
http://dotliquidmarkup.org/) ist eine Portierung von Liquid nach C# und das Ziel ist, eine komplette und voll kompatible .NET Implementierung von Shopify Liquid zu sein. Deshalb verweist DotLiquid für Sprachinformationen auch auf die Shopify Seiten, es gibt aber Abweichungen vom Liquid-Sprachstandard, siehe hier...
https://github.com/dotliquid/dotliquid/wiki/DotLiquid-for-Designers. Falls etwas partout nicht funktionieren will, einmal hier schauen, ob es Gründe gibt.
Eine weitere gute Referenz zum Lernen mit vielen praktischen Beispielen findest Du hier:
http://dyn365apps.com/2017/01/29/qu...ne-reference-manual-for-dynamics-365-portals/