Gelöst [WAWI-16430] [WAWI-20025] DotLiquid: Abfrage gibt seltsamen String aus

SebiW

Sehr aktives Mitglied
2. September 2015
3.090
1.615
Hallo zusammen,
ich komme wohl gerade wieder einmal an meine DotLiquid Grenzen und wollte fragen ob einer von Euch vielleicht behilflich sein kann.

Ich bastele an einer automatischen Kalkulation. In Schritt 1 möchte ich erstmal nur Vorschalgswerte erzeugen. Dazu setze ich mit folgender erweiterten Eigenschaft einen Wert in ein Funktionsattribut der Klasse "Preis":

{% assign EK = Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | FormatNumber: 'N4', 'de-DE' -%}
{% if EK <= 0,01 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 9 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,01 and EK <= 0,02 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 6.5 | FormatNumber: 'N4', 'de-DE'}}
.
.
.
{% else -%}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 2.17 | FormatNumber: 'N4', 'de-DE'}}
{% endif %}

Daraus ableitend wollte ich nun in einem weiteren Workflow einen Mindestabverkaufspreis in ein weiteres Funktionsattribut vom Typ Preis folgendermaßen setzen:

{{Vorgang.Attribute.Global.Autokalkulation.KALK-Abverkauf.Einsprachig | Times: 0.79 | FormatNumber: 'N4', 'de-DE'}}

Allerdings ist der Wert, der hier aus Vorgang.Attribute.Global.Autokalkulation.KALK-Abverkauf.Einsprachig ausgelesen wird eine 15stellige Zahl. Ich vermute mir fehlt hier nur irgendein Parameter? Der Wert beim Artikel öffnen und in allen sonstigen Abgleichen sieht richtig aus und funktioniert problemlos.

Ich habe ein ähnliches Problem hier dokumentiert gefunden:
https://forum.jtl-software.de/threa...eines-artikels-vom-typ-fliesskommazahl.98022/

Ist das tatsächlich ein Bug?
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.295
407
@SebiW - Dann würde ich Dich bitten, hier Deinen kompletten DotLiquid Code zu posten, denn dann probiere ich gerne schnell durch, ob das Problem in der 1.3.3.0 tatsächlich gelöst ist...
 

SebiW

Sehr aktives Mitglied
2. September 2015
3.090
1.615
Hi Gutberle, klar kein Problem:

Als Vorarbeit habe ich zwei Funktionsattribute des Datentyps "Preis" mit den Namen KALK-Mindestpreis und KALK-Abverkauf erzeugt. Diese befülle ich in zwei Schritten. KALK-Mindestpreis befülle ich so:

{% assign EK = Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | FormatNumber: 'N4', 'de-DE' -%}
{% if EK <= 0,01 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 9 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,01 and EK <= 0,02 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 6.5 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,02 and EK <= 0,04 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 5 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,04 and EK <= 0,1 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 4 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,1 and EK <= 0,5 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 3 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 0,5 and EK <= 1 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 2.3 | FormatNumber: 'N4', 'de-DE'}}
{% elsif EK > 1 and EK <= 5 %}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 2.2 | FormatNumber: 'N4', 'de-DE'}}
{% else -%}
{{Vorgang.Allgemein.PreiseEinheiten.Ø_Einkaufspreis-Netto | Times: 2.17 | FormatNumber: 'N4', 'de-DE'}}
{% endif %}

In einem zweiten Workflow Schritt lese ich dann das Feld aus um es modifiziert in KALK-Abverkauf zu schreiben:

{{ Vorgang.Attribute.Global.Autokalkulation.KALK-Mindestpreis.Einsprachig | TIMES: 0.66 | FormatNumber: 'N4', 'de-DE'}}

In meinem Beispiel Artikel wird hier aus dem Wert 7,92 entspannt die Zahlt 792.000.000.000.000,0000

Da ich jetzt mit der Umsetzung dieses Systems nicht beliebig warten kann werde ich wohl mit einem Freitextfeld arbeiten müssen. Das macht die ganze Geschichte gleich nochmal komplizierter, sehr unfein. Jetzt dachte ich endlich das letzte große Problem der Wawi für uns behoben zu haben und dann grätscht so ein Mist dazwischen, verdammich :(
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.295
407
Hallo @SebiW,

an Deinen DotLiquid Künsten liegt es nicht, das Einzige, was Du am oberen Teil noch verbessern kannst, ist hinten am Ende der {% elseif ... %} Zweige jeweils ein "-" zu ergänzen, denn aktuell wird vor dem eigentlichen Preis noch eine Leerzeile erzeugt. Das schluckt der Workflow aber wie's scheint auch wie es aktuell ist, der Vorschlag ist also eher "kosmetisch", oder sagen wir mal "hygienisch" ... ;)

Das Funktionsattribut KALK-Mindestpreis wird bei mir sowohl in der 1.2.3.7 wie auch in der 1.3.3.0 BETA2 korrekt gesetzt, aber da wo die 1.2.3.7 bei der Abfrage des KALK-Mindestpreis Wertes noch immer eine ~verdammt große Zahl~ mit 12 Nullen vor dem Komma daraus macht, ist (zumindest) dieser Fehler in der 1.3.3.0 BETA2 behoben.

Aber zu früh gefreut, denn was auch in der 1.3.3.0 BETA2 nicht funktioniert ist das Multiplizieren des Wertes mit 0.66. Egal, was ich für einen Teiler nehme, also Dezimal- oder Ganzzahl, um auch das zu prüfen ...
Code:
{{ Vorgang.Attribute.Global.Autokalkulation.KALK-Mindestpreis.Einsprachig | TIMES: 0.66 | FormatNumber: 'N4', 'de-DE'}}
... der Rückgabewert ist und bleibt immer gleich dem aus KALK-Mindestpreis gelesenen Originalwert.

@Rico Giesler - Hier ist definitiv ein Bug Zuhause. Soll ich das im Rahmen des Pilotprogramms berichten, oder willst Du das prüfen und dann ggfls. intern machen?

Gruß,
Ingmar
 

SebiW

Sehr aktives Mitglied
2. September 2015
3.090
1.615
Hallo Gutberle,

danke für Dein Feedback. Da das meine erste größere DotLiquid Aktion ist lag es erstmal Nahe von einem Fehler meinerseits auszugehen. Gut zu wissen, dass ich erstmal grundsätzlich nichts falsch gemacht habe.

Danke auch für Deinen Tip mit dem -%, ich hab mich wirklich schon gewundert wo das her kam, mir jetzt aber einfach mit nemm Zwischenworkflow geholfen gehabt:

{{ Vorgang.Attribute.Global.Autokalkulation.KALK-Mindestpreis.Einsprachig | StripNewlines }}

Wenn Du vielleicht noch 2 Tipps für mich hättest wäre ich enorm dankbar:
Wie krieg ich denn das Leerzeichen nach dem Datenfeld weg? Derzeit sieht die Ausgabe bei mir so aus:
"7,9200
"
und wenn ich mir obigen Workaround sparen kann spar ich ihn mir lieber. Ich vermute da fehlt am Ende des Datenfeldes einfach noch ein Endzeichen, richtig?

Und zweitens:
Eigentlich hatte ich vor die Ergebnisse gleich noch zu runden, dann in eine csv zu schreiben und via Ameise automatisch wieder importieren zu lassen (da man ja, warum auch immer, nur den Nettopreis via Workflow setzen kann).
Dazu hatte ich eigentlich die nötigen Funktionen ceil / floor und round ausgemacht. Ich kriege die aber ums verrecken nicht zum funktionieren. Sind die in JTL vielleicht gar nicht implementiert? Spätestens dann wirds mit der Autokalkulation langsam aber sicher wirklich schwierig...
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.295
407
@SebiW - Das Leerzeichen hinter dem Wert ist auch noch ein Newline und die grundsätzliche Regel lautet, dass alle Zeilen, die bei ihrer Ausgabe KEIN Newline erzeugen sollen, mit einem "-" abgeschlossen werden, das gilt also auch für Deine Zuweisungen. Hinter jedes "... DE'" muss also noch ein "-".

Die DotLiquid Funktionen round, ceil und floor (siehe hier) scheint es in der Wawi tatsächlich nicht zu geben, genau wie auch alle andere Math Filter aus der Liquid Sprache. Wenn Du im Editor Fenster hinter Deiner Variable nur ein "|" eingibst und dann einen (kurzen) Moment wartest, dann wird Dir ja ein Intellisense Fenster mit allen verfügbaren Funktionen angezeigt. Dort sind die drei aber natürlich auch nicht dabei, was extrem schade ist, aber dieses Fenster erspart Dir zumindest das Rätselraten.

Ich mache es normalerweise so, dass ich mir damit behelfe, das ganze in SQL nachzubilden, denn dort gibt es natürlich mit CEILING(Value2Ceil), FLOOR(Value2Floor) und ROUND(Value2Round,Decimals2Round) die notwendigen Funktionen. Das jetzt aber hier auszuführen, geht an einem Arbeitstag mit (gottseidank) eingehenden Aufträgen leider nicht. - Vielleicht finde ich Heute Abend die Zeit, Dir hier ein paar Beispiele zu posten ... ;)
 
Zuletzt bearbeitet:

SebiW

Sehr aktives Mitglied
2. September 2015
3.090
1.615
Hallo Gutberle,

danke nochmal für Deine Hilfe. Ich habs ja schon fast befürchtet, aber gut zu wissen, dass ich im Endeffekt an dieser Stelle mit der Arbeit aufhören kann. Von SQL Aktionen in einer erweiterten Eigenschaft habe ich leider keinerlei Ahnung.

Leider sind auch die Rundungsgruppen in der Ameise für uns nicht zu gebrauchen, da ein Gutteil unserer Artikel unter 10 Euro kostet und hier schlicht eine "Runde auf auf x,x9" Rundung fehlt.
Die Preiskalkulation in JTL bleibt also für uns weiterhin ein Drama, dass sich dank ständig variierender EKs immer weiter verschärft. Mist.

Wieso eine sonst do flexible und moderne Wawi eine solch RIESEN Lücke hat erschließt sich mir absolut nicht.
 

gutberle

Sehr aktives Mitglied
29. März 2011
1.295
407
Hi @SebiW,

ok, hier also nun wie versprochen ein paar Beispiele, wie man mit SQL Queries die in JTL's DotLiquid Implementierung fehlenden Funktionen ceil, floor und round "nachrüsten" kann. Erst kommen drei Code-Stücke, die jeweils einen der Werte zurückliefern und danach noch eine ökonomischere Variante, die alle drei Werte gleichzeitig berechnet und zurückliefert ...

CEILING(<Value>)
Code:
{% assign Value = Vorgang.Allgemein.PreiseEinheiten.VK-Brutto | FormatNumber: 'N14','en-US' -%}
{% assign CeilValue = 'SELECT CEILING(' | Append: Value | Append: ')' | DirectQueryScalar -%}

CeilValue({{ Value }})={{ CeilValue }}
>> CeilValue(5.39070024967194)=6
FLOOR(<Value>)
Code:
{% assign Value = Vorgang.Allgemein.PreiseEinheiten.VK-Brutto | FormatNumber: 'N14','en-US' -%}
{% assign FloorValue = 'SELECT FLOOR(' | Append: Value | Append: ')' | DirectQueryScalar -%}

FloorValue({{ Value }})={{ FloorValue }}
>> FloorValue(5.39070024967194)=5
ROUND(<Value>,<Decimals>)
Code:
{% assign Value = Vorgang.Allgemein.PreiseEinheiten.VK-Brutto | FormatNumber: 'N14','en-US' -%}
{% assign Decimals = '2' -%}
{% assign RoundValue = 'SELECT ROUND(' | Append: Value | Append: ',' | Append: Decimals | Append: ')' | DirectQueryScalar -%}

RoundValue({{ Value }},{{ Decimals }})={{ RoundValue | FormatNumber: 'N2','de-DE' }}
>> RoundValue(5.39070024967194,2)=5,39

Zur Funktion:

1. In der ersten Zeile lade ich meine Wunschvariable aus DotLiquid, hier also den VK-Brutto meines Artikels in eine Variable namens "Value" und formatiere sie gleich mit 14 Nachkommastellen und im US Format. Das klingt dämlich, aber was ich hier tatsächlich mache, ist die Variable so zu belassen, wie sie in der Datenbank vorliegt, nur eben als String, also als Text und mit Dezimalpunkt, denn so braucht es die SQL Abfrage.
2. Bei der ROUND() Funktion definiere ich in der zweiten Zeile noch die Dezimalstellen, auch als String=Text.
3. Dann stückele ich mir den SQL Query-String zusammen, bei CEILING() und FLOOR() noch nur mit Klammern um den Wert "Value" bei ROUND() auch noch mit den Dezimalstellen, mit Komma getrennt. Das ganze ergibt aber nur einen einfachen Textstring, der dann auch gleich über "DirectQueryScalar" als SQL Befehl ausgeführt wird.
4. In der jeweils letzten und etwas abgesetzten Zeile gebe ich das Ganze formatiert aus. Das sieht vielleicht kompliziert aus, sieht aber nur so aus, weil ich eine ganze Zeile mit Definition und Wert ausgeben. In Wirklichkeit wird der CeilValue z.B. völlig normal nur mit {{ CeilValue }} ausgegeben, die anderen ebenso einfach.

Ökonomischere Variante ...

Und hier noch eine Variante, bei der gleichzeitig alle drei Werte berechnet und dann zusammen in einer einfach abzufragenden Struktur zurückgeliefert ...
Code:
{% assign Value = Vorgang.Allgemein.PreiseEinheiten.VK-Brutto | FormatNumber: 'N14','en-US' -%}
{% assign Decimals = 2 -%}
{% capture query -%}
SELECT CEILING({{ Value}}) CeilVal, FLOOR({{ Value}}) FloorVal, ROUND({{ Value}},{{ Decimals }}) RoundVal
{% endcapture -%}
{% assign SQLValues = query | DirectQuery -%}
Wie Du siehst, ist die eigentliche Abfrage aller drei Werte in einer einzigen SQL Abfrage eigentlich sogar kürzer und leichter zu verstehen. Das liegt daran, dass ich hier mit dem DotLiquid Befehl "capture" arbeite, der es mir erlaubt, Text viel einfacher aus einzelnen Teilen zusammenzustückeln.

Die Werte werden dann wie folgt abgefragt ...
Code:
Value={{ Value }}
>> Value=5.39070024967194
Decimals={{ Decimals }}
>> Decimals=2
CeilVal({{ Value }})={{ SQLValues.Daten[0].CeilVal }}
>> CeilVal(5.39070024967194)=6
FloorVal({{ Value }})={{ SQLValues.Daten[0].FloorVal }}
>> FloorVal(5.39070024967194)=5
RoundVal({{ Value }},{{ Decimals }})={{ SQLValues.Daten[0].RoundVal | FormatNumber: 'N2','de-DE' }}
>> RoundVal(5.39070024967194,2)=5,39

Die Abfrage dieser Werte gestaltet sich ein bißchen anders, weil hier ein Vektor von Werten zurückgegeben wird. Deshalb greift man hier z.B. mit SQLValues.Daten[0].CeilVal auf den Ceiling Wert zu. Ist ja aber auch einfach, oder? ;)

Gruß,
Ingmar
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: SebiW

SebiW

Sehr aktives Mitglied
2. September 2015
3.090
1.615
Wo Gutberle,

vielen Dank für diesen riesen Block Information. Zu meinem Erschrecken scheine ich sogar teilweise zu begreifen wie ich das umsetze :D

Im Ernst, Wahnsinn, danke. Sieht so aus als würde ich meine Autokalkulation doch noch umsetzen können.

Vielen, vielen Dank!
 
Ähnliche Themen
Titel Forum Antworten Datum
Wawi 1.11 – viele Arbeitsabläufe sind schlechter geworden JTL-Wawi 1.11 1
Neu Belege aus JTL Wawi zu Lexoffice Schnittstellen Import / Export 5
Neu Amazon VCS Lite: Wie erstellt ihr unter Wawi 1.11 eine vollständige IGL-/ZM-Liste über alle Verkaufskanäle? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Gibt es in der WaWi-Datenbank einen Zeitstempel, der anzeigt wann ein Kunde sich in einem bestimmten Shop registriert hat? User helfen Usern - Fragen zu JTL-Wawi 3
Beantwortet [Shop 5.7.2 / Wawi 2.0.5] GPSR-Daten werden am Artikel nicht angezeigt trotz korrekter Übertragung und installiertem Plugin Allgemeine Fragen zu JTL-Shop 1
Neu Copy/Paste Abstürze seit JTL-Wawi 2.0.5 User helfen Usern - Fragen zu JTL-Wawi 4
Neu Amazon.com - kein Abgleich der Bestände Wawi 1.11.9 Amazon-Anbindung - Fehler und Bugs 0
Neu DSVGO konform 1000 Kunden in WaWi und Shop löschen! User helfen Usern - Fragen zu JTL-Wawi 4
Neu JTL Wawi 1.11.11 - Zahlungsabgleich bei FYRST Bank verlangt immer Passwort User helfen Usern - Fragen zu JTL-Wawi 0
Neu Wawi 1.11. Amazon Rechnungen (extern) in der Kundenansicht verschwunden ?! User helfen Usern - Fragen zu JTL-Wawi 2
Updatezwang beim öffnen der WAWI JTL-Wawi 1.6 13
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
Neu JTL Wawi 2.0 oder höher WooCommerce-Connector 0
Changelog jtl Wawi 2.0.5 JTL-Wawi 2.0 10
Login Wawi nicht möglich nach Update auf 1.11.11 JTL-Wawi 1.11 1
Neu Nach Wawi Update Probleme mit Rechnungsdrucker JTL-POS - Fehler und Bugs 4
JTL Wawi 1.11.xx langsam unbenutzbar! JTL-Wawi 1.11 4
Neu Plugin: JTL Exportformat Google Shopping gibt <g:google_product_category> unter Shop 5.7.1 und Wawi 2.0.4 nicht aus Plugins für JTL-Shop 1
Neu Rabatte aus dem JTL-Shop werden in der Wawi nur als Netto-Preis übernommen, Rabatt % gehen verloren Onlineshop-Anbindung 0
Wawi 1.11.9 Ständige Abstürze bei Aktualisierung Artikelstammdaten JTL-Wawi 1.11 4
ändern von Servernamen nach Neuinstallation von SQL und Verbindung mit neuem Server in der Wawi JTL-Wawi 2.0 2
Neu Ab Wawi 1.10 - JTL.Wawi.Pos.exe direkt ohne JTL-Administrator starten? Allgemeine Fragen zu JTL-POS 2
JTL APP - Fehlermeldung nach Update auf Wawi 1.11. JTL-Wawi App 6
JTL Wawi 1.11. - Fenstergröße - Artikel auf Einkaufsliste setzen JTL-Wawi 1.11 13
Neu Paypal Abgleich - Schnittstelle geändert- Wawi Update Erforderlich ! JTL-Wawi - Fehler und Bugs 12
Neu JTL-Wawi Shopabgleich per E-Mail überwachen (Warnungen & Fehler) Onlineshop-Anbindung 1
Neu Erstellung der Sitemap bei WaWi Abgleich funktioniert nicht Allgemeine Fragen zu JTL-Shop 0
Neu Bug? Führende Nullen bei Sendungsnummern verschwinden in JTL-Wawi 2.0.3 JTL-ShippingLabels - Fehler und Bugs 1
Nach Wawi Update keine Fehlermeldung mehr sichtbar kaufland.de - Anbindung (SCX) 2
DPD Cloud Labeldruck auf Zebra LP 2844-Z seit Update auf JTL-Wawi 1.11.x fehlerhaft JTL-Wawi 1.11 3
JTL-Wawi sucht falschen ShopType nach Gambio-Update JTL-Wawi 1.7 2
Wawi 1.11. Rechnungsanhang funktioniert nicht mehr bei Versandmail JTL-Wawi 1.11 6
Nach update 1.8>1.11 Kein Mandant in JTL-Wawi gefunden JTL-Wawi 1.11 5
POS anbinden an WAWI 1.11.10.0 JTL-Wawi 1.11 2
Emailvorlagen in WAWI JTL-Wawi 2.0 9
Wawi 1.11.10 : Feldinhalt "Kundenkommentar" fehlt beim Versand in WMS JTL-Wawi 1.11 0
Neu Eignes Feld aus Auftrag in Rechnung anzeigen lassen JTL-WaWi 1.11.10 Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Lizenz-Störung? Ich erhalte keinen Zugriff mehr zu meiner Wawi, egal welcher User JTL-Wawi 1.11 3
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
WAWI 2.0.0 erkennt keine Updates JTL-Wawi 2.0 1
Neu Umzug von sehr alter JTL Wawi Version auf neuen PC User helfen Usern - Fragen zu JTL-Wawi 3
Neu JTL REST API (on premise) - welche API Version ab welcher Wawi-Version? Changelog? Schnittstellen Import / Export 0
Wawi verschluckt Zeichen beim Mailversand JTL-Wawi 2.0 1
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Beantwortet [WAWI-85758] Nach Update auf 1.11.10 klappt stornieren über ios Wawi App nicht mehr JTL-Workflows - Fehler und Bugs 1
Wawi Meldung SQL Servicepack zu installieren - aber welches? Update SQL2022 CU24 nicht möglich JTL-Wawi 1.11 6
Keine Rückmeldung in JTL Wawi sobald SQL Server Memory durch Database Cache ausgeslastet ist JTL-Wawi 2.0 9
Neu Nach Update auf JTL-Wawi 2.0.3 keine WMS-Lager mehr auswählbar – Versand komplett blockiert JTL-Wawi 2.0 3
Problem mit Hermes Österreich Sendungsnummern – Fehler beim Amazon-Abgleich in JTL-Wawi JTL-Wawi 1.10 0

Ähnliche Themen