In Bearbeitung [WAWI-50281] Schwerer Fehler in dot liquid führt zu Fehlberechnungen - Typen Deklaration Problem

  • Temporäre Senkung der Mehrwertsteuer Hier findet ihr gesammelt alle Informationen, Videos und Fragen inkl. Antworten: https://forum.jtl-software.de/threads/mehrwertsteuer-senkung-vom-01-07-31-12-2020-offizieller-diskussionthread-video.129542/

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
Seit ca. Wawi 1.5.30.1 gibt es einen Bug in Dotliquid.

Code:
{% assign zahl = 100 -%}
{% assign faktor = 0.01 -%}\

{% assign ergebnis_1 = faktor | Times: zahl  -%}\
{% assign ergebnis_2 = zahl | Times: faktor  -%}\
{{ ergebnis_1 }} = {{ ergebnis_2 }}
Dieser Code liefert 1 = 0

Offenbar ist der Typ der Ergebnis Variable nur noch anhängig vom ersten Faktor. BÖSE. Ticket mache ich gleich auf...

John
 

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
Addition ist ebenfalls betroffen

Code:
{% assign zahl = 100 -%}
{% assign faktor = 0.01 -%}\

{% assign ergebnis_1 = faktor | Plus: zahl  -%}\
{% assign ergebnis_2 = zahl | Plus: faktor  -%}\
{{ ergebnis_1 }} = {{ ergebnis_2 }}
100,01 = 100

...vermutlich alle Rechenarten.
 

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
Es hilft auch nicht, die Variablen durch erstmalige Initialisierung auf einen passenden Datentyp zu zwingen.

Wie kann das sein? Wird der Datentyp im nachhinein auf Integer umdeklariert? Wird ja immer schlimmer!

Code:
{% assign zahl = 100 -%}
{% assign faktor = 0.01 -%}\

{% assign ergebnis_1 = 0.1 -%}
{% assign ergebnis_2 = 0.1 -%}

{{ ergebnis_1 }} = {{ ergebnis_2 }}

{% assign ergebnis_1 = faktor | Plus: zahl  -%}\
{% assign ergebnis_2 = zahl | Plus: faktor  -%}\

{{ ergebnis_1 }} = {{ ergebnis_2 }}
liefert

0,1 = 0,1

100,01 = 100
 

Dominic Nelle

Moderator
Mitarbeiter
18. Januar 2016
161
54
Code:
{% comment -%}
Hier ist "zahl" ein Integer.
{% endcomment -%}
{% assign zahl = 100 -%}
{% assign faktor = 0.01 -%}\
{% assign ergebnis_1 = faktor | Times: zahl  -%}\
{% assign ergebnis_2 = zahl | Times: faktor  -%}\
{{ ergebnis_1 }} = {{ ergebnis_2 }}

{% comment -%}
Hier ist "zahl" ein Double.
{% endcomment -%}
{% assign zahl = 100.00 -%}
{% assign faktor = 0.01 -%}\
{% assign ergebnis_1 = faktor | Times: zahl  -%}\
{% assign ergebnis_2 = zahl | Times: faktor  -%}\
{{ ergebnis_1 }} = {{ ergebnis_2 }}
So geht es ;)
 

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
@Dominic Nelle danke für das Beispiel, aber es lässt sich so nicht in die Praxis übertragen, weil man nicht sicherstellen kann, daß alle Variablen einer Berechung als Double initialisiert werden.

Beispiel aus einem Workflow im Bereich Rechung
Code:
{% assign WarenWertNettoGesamt = 0 -%}\
{%- for pos in Vorgang.Auftrag.Positionen -%}\
{% assign WarenWertNettoGesamt = WarenWertNettoGesamt | Plus: pos.NettopreisGesamt  -%}\
{%- endfor -%}\

{{ WarenWertNettoGesamt }}
pos.NettopreisGesamt kommt mit Sicherheit nicht Integer daher. Trotzdem wird er als solcher aufsummiert. Das hier erzeugt im Ergebnis einen Rundungsfehler

Ich finde, den Bug eindeutig. Aktuell wird das Kommutativgesetz der Mathematik verletzt und das geht nicht.
In einer Umgebung mit expliziter Typendeklaration, ja, da bin ich selbst für korrekte Typen verantwortlich. Das ist aber in dotliquid nicht der Fall. Ich kann gar nicht deklarieren. Also müßt ihr Euch darum kümmern und zwar korrekt.

Viele Grüße

John
 

daniel.barredo.diaz

Moderator
Mitarbeiter
1. Februar 2016
21
6
Hi John,

pos.NettopreisGesamt kommt mit Sicherheit nicht Integer daher
Schau dir das Beispiel von Dominic nochmal an. Es geht in erster Linie nicht um die Variable dir wir zur Verfügung stellen.
Der von dir deklarierte "WarenWertNettoGesamt" = 0 ist der Integer der hier Probleme bereitet. Versuch die gleiche Berechnung bitte einmal mit 0.00 als initialem Wert.

weil man nicht sicherstellen kann, daß alle Variablen einer Berechung als Double initialisiert werden.
Dafür gibt es in DotLiquid einen eigenen Filter: ToDouble https://guide.jtl-software.de/jtl-wawi/vorlagen/filter-in-dotliquid/#als-zahl-todouble


Also müßt ihr Euch darum kümmern und zwar korrekt
Hier würde ich dir sogar Recht geben, wenn wir Einfluss darauf hätten. Wäre DotLiquid meine eigene Library würde ich einiges anders machen.
In der JTL-Wawi verwenden wir aktuell DotLiquid in der Version 1.7.0.0
Siehe dazu auch:
http://dotliquidmarkup.org/
https://github.com/dotliquid/dotliquid


Nach meinem Verständnis ist Liquid eine Template-Sprache für Shopify-Themes. (https://shopify.github.io/liquid/)
Die .Net-Portierung DotLiquid gibt unseren Kunden eine einfach zugängliche Möglichkeit E-Mail und Designvorlagen dynamisch zu gestalten.
Für die meisten Textoperationen in Workflows oder dem Amazon Lister ist sie auch ausreichend.

Falls du allerdings mit dem ToDouble-Filter nicht zufrieden bist gibt es immer noch die Möglichkeit auf SQL auszuweichen.

Mit DirectQuery oder DirectQueryScalar könntest du Berechnungen in SQL durchführen und das Ergebnis dann nochmal in Liquid behandeln.
Mir selbst fallen Berechnungen in SQL auch wesentlich leichter als mit umständlichen Filtern und nicht klar erkennbaren Datentypen in Liquid.


Viele Grüße,
Daniel
 

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
@daniel.barredo.diaz Danke für Deine Ausführungen aber was mache ich, wenn ich einen Variable, die durch Euch als Integer bereitgestellt wird (z.B. Anzahl der Positionen im Auftrag) mit einer Fließkommazahl verrechnen muß? Bsp:

Code:
{% assign test = 0.0 -%}
{% assign test = Vorgang.Auftrag.Positionen.Anzahl | Plus: 0.01 -%}
Funktioniert nicht. Ja, ich kann die Summanden hier umdrehen. Aber das kann es ja wohl nicht sein.
Dein Vorschlag mit ToDouble erwartet als Eingabe einen String. Soll ich den Integer in einen String konvertieren, um ihn dann in einen Double zu wandeln?!?

Bitte beachte auch: Das Problem gab es z.B. mit Wawi 1.5.26.0 noch nicht. Aus meiner Sicht hat sich da ein Bug eingeschlichen, ob nun bei Euch oder in der externen Bibliothek.

Viele Berechnungen, die es hier im Forum als Beispiele gibt oder die draussen bei Kunden laufen, werden Fehler nach dem Wawi Update liefern.

Ich melde mich ja hier auch nur, weil es bei Kunden von mir gekracht hat und vorher lief.

Viele Grüße

John
 

daniel.barredo.diaz

Moderator
Mitarbeiter
1. Februar 2016
21
6
Hi John,

mir sind keine Änderungen bekannt. Die DotLiquid 1.7.0.0 verwenden wir schon ewig.
Auch an dem Feld Anzahl hat sich nichts geändert.

Viele Berechnungen, die es hier im Forum als Beispiele gibt oder die draussen bei Kunden laufen, werden Fehler nach dem Wawi Update liefern
Das wäre nicht gut. Ich werde das mal in der 1.5.26.0 nachstellen.
Du sagst dein erster Beitrag in diesem Post lieferte in der alten Version noch das richtige Ergebnis?

Btw. das Ticket finde ich leider in unserem System nicht. Könntest du nochmal darauf antworten?


Viele Grüße,
Daniel
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
258
66
Hannover

John

Sehr aktives Mitglied
3. März 2012
1.366
128
Berlin
Hier noch deutlicher:

Code:
{% assign test = 0.01 -%}
{% assign test = Vorgang.Auftrag.Positionen.Anzahl | Plus: test | Plus: 0.01 -%}
{{test}}
berechnet in betroffenen Versionen falsch. Hingegen

Code:
{% assign test = 0.01 -%}
{% assign test = test | Plus: Vorgang.Auftrag.Positionen.Anzahl | Plus: 0.01 -%}
{{test}}
berechnet auch in betroffenen Versionen richtig.

@T4DT.GmbH und wie addiert man dann einen int und einen double, außer die Reihenfolge der Summanden entsprechend halten?
Btw. die Operation wird ja nicht auf dem int ausgeführt, sondern in meinem Beispiel auf der Variablen "Test", die in der ersten Zeile als Double initialisiert wurde. Durch die Verrechnung mit dem int wird sie aber vom Double zum int und das ist imho fatal.

@daniel.barredo.diaz Alle meine Beispiele habe ich eben mit 1.5.24.1 getestet. Funktioniert darin. Mit 1.5.26.x gehts imho auch noch, habe ich ber nicht mehr zur Hand. Die Änderung ist irgendwann am danach.

Ticket#2020101910002763 - offen seit gestern. Bei der Nennung oben fehlte die letzte Ziffer.

Viele Grüße

John
 
Zuletzt bearbeitet:

daniel.barredo.diaz

Moderator
Mitarbeiter
1. Februar 2016
21
6
Seit ca. Wawi 1.5.30.1 gibt es einen Bug in Dotliquid.

Code:
{% assign zahl = 100 -%}
{% assign faktor = 0.01 -%}\

{% assign ergebnis_1 = faktor | Times: zahl  -%}\
{% assign ergebnis_2 = zahl | Times: faktor  -%}\
{{ ergebnis_1 }} = {{ ergebnis_2 }}
Dieser Code liefert 1 = 0

Offenbar ist der Typ der Ergebnis Variable nur noch anhängig vom ersten Faktor. BÖSE. Ticket mache ich gleich auf...

John

Guten Morgen,

ich habe das Skript mal in der 1.5.24.1 und der zukünftigen 1.5.33.0 verglichen.

Ergebnis in 1.5.24.1: 1,00 = 1,00
Ergebnis in 1.5.33.0: 1 = 0

Für die Version 1.5.28.0 wurden die Filter in DotLiquid erweitert.
Möglicherweise hatte diese Anpassung ein paar ungewünschte Nebeneffekte. Die genaue Ursache kann ich dir noch nicht sagen.

Meine Kollegen prüfen das Problem bereits und sobald ich ein passendes Ticket habe wird hier im Thread natürlich aktualisiert.

@John Vielen Dank für den Hinweis auf das Problem!
Meine Workarounds helfen dir eventuell trotzdem erstmal weiter.
Mit
{% assign zahl = 100.00 -%}
bekomme ich aktuell 1 = 1 als Ergebnis.

Viele Grüße,
Daniel
 
Ähnliche Themen Forum Antworten Erstelldatum des Themas
Neu LS POS WAWI-Rechnung erstellen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Keine Verbindung von der Wawi zum Shop 5 JTL-Shop - Fehler und Bugs 0
Neu Nach CSV Kundenimport - Neukunden einlesen in WAWI Allgemeine Fragen zu JTL-Shop 0
Neu nach Wechsel vom Testsystem (Wawi) ist keine Verbindung zur aktiven Wawi möglich Shopware-Connector 0
Neu POS Artikelmenge verfügbar - Abgleich Wawi JTL-POS - Fehler und Bugs 1
Neu WaWi RemoteDesktop User helfen Usern - Fragen zu JTL-Wawi 2
Neu Artikelmport von CSV-Datei mit Kategorien/Subkategorien in bestimmte Unterkategorie in der Wawi JTL-Ameise - Ideen, Lob und Kritik 1
Neu Merkmale aus den Variationen (Kinderartikel) werden nicht aus der Wawi in die Ebay Attribute automatisch übernommen eBay-Anbindung - Fehler und Bugs 0
Neu Wie Buche ich Bar gekaufte Ware in die Wawi User helfen Usern - Fragen zu JTL-Wawi 0
Neu Ansprechpartner Export -> Import Wawi wird nicht übernommen JTL-Ameise - Fehler und Bugs 1
Neu Daten aus dem Shop in die Wawi holen ? Arbeitsabläufe in JTL-Wawi 1
Neu Upgrade MSSQL Express 2017 auf MSSQL Express 2019 - JTL-Wawi 1.5.33.0 Installation von JTL-Wawi 0
Neu Zwei Lieferanten (sind der selbe Lieferant) in der WAWI zusammenführen Arbeitsabläufe in JTL-Wawi 0
Neu Wawi 1.5.34.0 > Connector 2.7 zerschießt Shopware 5.6.9 > 502 bad Gateway Shopware-Connector 14
Neu JTL WAWI & JTL-Packtisch druckt falschen EAN Code bei Etikettendruck Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 1
Neu Nach Update JTL Wawi auf 1.5.34.0: Sortierungskonflikt / Kollationen verändert JTL-Wawi - Fehler und Bugs 5
Neu Kompatibilität JTL Shop 4.06 (Build9) mit JTL Wawi 1.4 oder 1.5 Allgemeine Fragen zu JTL-Shop 1
Gelöst Lizenzschlüssel lässt sich nicht in JTL Wawi eintragen Gelöste Themen in diesem Bereich 6
Neu Wie kann das sein? Ameise sagt 414 Artikel importiert, WAWI sagt 404 Artikel vorhanden User helfen Usern - Fragen zu JTL-Wawi 4
Neu Lieferschwelle in Wawi eingerichtet JTL-Shop berechnet trotzdem die deutsche USt. Steuer User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kein Folgeabgleich zw. WAWI und POS JTL-POS - Fehler und Bugs 3
Neu Fehler beim Update der WAWI auf eine Version ab 29.0 - Lösung bei mir... Installation von JTL-Wawi 0
Neu Keine Verbindung zur WAWI möglich. Die Shop-URL verweist nicht auf einen gültigen Shop! Bitte prüfen Sie die Connector-Konfiguration Allgemeines zu den JTL-Connectoren 0
Neu Import Avocado-Auftragsdaten in JTL Wawi Schnittstellen Import / Export 0
Neu WAWI SHOP Lieferzeiten User helfen Usern - Fragen zu JTL-Wawi 4
Neu [WAWI] - Artikelname für Ausgabewege User helfen Usern - Fragen zu JTL-Wawi 1
Neu Ebay Merkmale in Wawi ziehen ? Einrichtung und Installation von JTL-eazyAuction 1
Neu Wareneingang über WaWi, EK Preis 0 ? User helfen Usern - Fragen zu JTL-Wawi 2
Neu JTL Wawi Apple M1 Chip? Installation von JTL-Wawi 0
Neu Positiver Wareneingang in Wawi gebucht statt Warenausgang JTL-Wawi - Fehler und Bugs 5
Beantwortet Überverkauf im Shop deaktivieren, unabhängig von Wawi Einstellung Allgemeine Fragen zu JTL-Shop 2
Neu Problem Erstimport der Kunden Shopware 5.6.9 zu JTL-Wawi 1.5.33 Shopware-Connector 5
Neu Keine Zahlungsart an JTL WaWi übertragen bei bei Nullbon (Umtausch gegen Artikel gleichen Warenwertes) JTL-POS - Fehler und Bugs 1
Neu Verkauf über POS steht in WAWI auf "Ausstehend" JTL-POS - Fehler und Bugs 1
Neu Jtl shop + jtl wawi Ende der Probleme? Allgemeine Fragen zu JTL-Shop 0
Neu JTL Wawi 1.5.32.0 Amazon selbsterstelle Produktseite Fehler 8115 User helfen Usern - Fragen zu JTL-Wawi 1
In Diskussion Wawi 1.5.25 - Workflow - mehrere Replace in einem Workflow-Durchgang JTL-Workflows - Ideen, Lob und Kritik 4
Neu Allgemeine Fragen zu JTL WaWi Client (Mehrplatzinstallation) User helfen Usern - Fragen zu JTL-Wawi 1
Neu GLS Retourenlabel aus der WAWI drucken User helfen Usern - Fragen zu JTL-Wawi 0
Beantwortet [WAWI] - Standardlager wird nicht ausgewählt JTL-Workflows - Fehler und Bugs 1
In Diskussion Daten löschen und Connector mit neuer Wawi-Instanz verbinden Shopware-Connector 4
In Diskussion Zahlungsart kommt mit falschem Namen in die Wawi? Shopware-Connector 2
Gelöst [WAWI-42192] - GUI für Amazon Angebotsmapping erstellen Gelöste Themen in diesem Bereich 0
Neu Chinesische Schriftzeichen werden erfolgreich zu Ebay übermittelt aber verschwinden danach direkt wieder aus der WaWi JTL-Wawi - Fehler und Bugs 0
Neu Mehrere Positionen an JTL Wawi senden (richtige Steuern übermitteln) WooCommerce-Connector 0
Neu JTL Wawi - WooCommerce Fehler beheben Dienstleistung, Jobs und Ähnliches 0
Neu Hilfe bei Umzug der JTL WAWI und des Servers gesucht Dienstleistung, Jobs und Ähnliches 1
Neu Wawi Connector Woocommerce Lizenz-Logbuch meldet Wrong Token WooCommerce-Connector 0
Neu WAWI Picklisten pro Lager zuordnen Arbeitsabläufe in JTL-Wawi 2
Neu wawi installation probleme User helfen Usern - Fragen zu JTL-Wawi 6
Ähnliche Themen