Debugging "Leider ist etwas schief gelaufen"

Moin zusammen,

Wir bekommen neuerdings auf folgender Seite eine „Leider ist etwas schief gelaufen“
https://shop.gws-schlobohm.de/Ladungssicherung/

Da sollte eine Kategorie-Übersicht angezeigt werden. Dieser Fehler ist nun nach nach rund 3 Monaten das zweite Mal aufgetaucht, ohne dass wir den eigentliche Grund erfassen konnte. Lösung beim ersten Mal: Wenn die Kategorie neu erstellt wird, alle Produkte reinkopiert werden, das gleiche Layout ausgewählt wird, die defekte Kategorie gelöscht wird und die neuerstellte Kategorie wie so wie die alte umbenannt wird, funktioniert wieder alles. D.h. die Kombination aus den vorhanden Produkten und Layouts funktioniert offensichtlich grundsätzlich.

Zuvor erfolglos versucht haben wir,

  • kürzlich geänderte Produkte testhalber deaktiveren
  • ein Standard-Layout für die defekte Kategorie zuzuweisen
  • Nach jedem Schritt Caches geleert / aufgewärmt / Indizes aktualisert

Das kann auf Dauer aber nicht die Lösung sein. Wie kann man nun herausfinden, was da passiert ist.

Folgendes gibt das Log aus nach dem Aufrauf der o.g. Seite:

[2021-03-05 08:31:52] request.CRITICAL: Uncaught PHP Exception TypeError: „Argument 1 passed to Shopware\Core\Content\Product\SalesChannel\Price\ProductPriceDefinitionBuilder::getCurrencyPrice() must be an instance of Shopware\Core\Framework\DataAbstractionLayer\Pricing\PriceRuleEntity, null given, called in /home/users/gws-schlobohm/www/gws-schlobohm.de/shopware2020/vendor/shopware/core/Content/Product/SalesChannel/Price/ProductPriceDefinitionBuilder.php on line 157“ at /home/users/gws-schlobohm/www/gws-schlobohm.de/shopware2020/vendor/shopware/core/Content/Product/SalesChannel/Price/ProductPriceDefinitionBuilder.php line 209 {„exception“:"[object] (TypeError(code: 0): Argument 1 passed to Shopware\Core\Content\Product\SalesChannel\Price\ProductPriceDefinitionBuilder::getCurrencyPrice() must be an instance of Shopware\Core\Framework\DataAbstractionLayer\Pricing\PriceRuleEntity, null given, called in /home/users/gws-schlobohm/www/gws-schlobohm.de/shopware2020/vendor/shopware/core/Content/Product/SalesChannel/Price/ProductPriceDefinitionBuilder.php on line 157 at /home/users/gws-schlobohm/www/gws-schlobohm.de/shopware2020/vendor/shopware/core/Content/Product/SalesChannel/Price/ProductPriceDefinitionBuilder.php:209)"} []

Hat jemand eine Idee, wo man da ansetzen kann, ohne jedes Mal die Kategorie neuerstellen zu müssen?

Viele Grüße
Björn


Shopware CE v6.3.5.1
PHP 7.4.14
MariaDB 10.3.28

Hat keiner eine Idee was da schief läuft?

Wenn der Kunde irgendwas falsch gemacht hat, irgendeinen Wert falsch gesetzt hat, dann müsste das doch eigentlich bereits an der Stelle im Backend beim Speichern gemeckert werden. So haben wir jetzt einen Fehler, der irgendwann einfach da war und den wir bis auf den Log-Eintrag nicht weiter deuten können.

Hilft dir das hier weiter?

Hallo Thomas,

leider nicht, in der DB ist in unserem Fall in product_price in der Spalte quantity_end überall NULL hinterlegt, wo eine 0 eingetragen wurde. Wir wüsten gerne, was hier passiert ist. Wenn ich die Kategorie neu anlege, alle Produkte reinkopiere, das gleiche Layout zuweise, geht’s ja wieder.

Viele Grüße
Björn

Also ich kann dir sagen dass es schon ziemlich sicher an nem Produkt liegt wo kein (richtiger?) Preis hinterlegt ist. Zumindest dem Programmcode nach.
Du könntest ja einfach mal in der Datei ‚vendor/shopware/core/Content/Product/SalesChannel/Price/ProductPriceDefinitionBuilder.php‘ in Zeile 135 direkt nach dem Beginn der Funktion buildPriceDefinitionForQuantity() ein print_r($product) machen und danach in Zeile 139 nach ‚$prices = $this->getFirstMatchingPriceRule($product->getPrices(), $context);‘ ein print_r($prices);

Alternativ kann man auch xdebug drauf ansetzen.
Und ja, es gibt sicherlich deutlich schönere Möglichkeiten als print_r(), aber afaik müsste das schon erstmal funktionieren.

Alternativ können wir das auch gemeinsam machen. Kann halt dabei sein dass der Shop kurzzeitig mal ned geht… wäre schöner wenn ihr ein Testsystem hättet.

Thomas

Hallo Thomas,

vielen Dank für Deine Unterstützung und den Input und sorry für die verspätete Rückmeldung. Die zusätzlichen Zeilen haben leider keine Änderungen oder neue Erkenntnisse gebracht. Ich möchte auch ungern in Core-Dateien handwerken.

Zwischenzeitlich konnte ich das Produkt ausfindig machen, welches „defekt“ war. Dieses Produkt war auch dafür verantwortlich, sobald es in der Kategorie-Übersicht erscheinen sollte, dass die komplette Kategorie nicht mehr geladen wird.

Das betroffene Produkt habe ich deaktiviert und 1:1 neu erstellt. Dabei ist mit aufgefallen, dass in der defekten Version die beiden Felder für die Einkaufspreise nicht vorhanden sind. Evtl. lag dort das Problem. Ich habe jetzt nicht vor Augen, ob diese Felder irgendwann zwischenzeitlich mal hinzugefügt wurden bzw. warum sie im ursprünglichen fehlen.

Was ich an dieser Stelle vermisst habe, ist eine Fehlerlog, dass genau dieses Produkt bzw. ein fehlende oder problematische Felder benennt.

Viele Grüße
Björn