1 1 Punkt

Moin nochmal,

beim weiteren Testen ist mir noch Folgendes untergekommen:
Beim Versuch, einen Lieferschein über den Standardlagerplatz ohne Prüfung der Lagermenge auszulagern, wird der Fehler

Can't call method "parts_id" on an undefined value at /usr/local/src/lx-office-erp/SL/Controller/DeliveryOrder.pm line 1260.

geworfen. Ich habe den gesamten Workflow über Angebot, Auftragseingang¹, Auftragsbestätigung, Anzahlungsrechnung, Lieferschein verwendet, falls das von Belang ist.

Der Fehler ist in der Steigmann-Werft-Demo reproduzierbar.

Hab dann mal ein wenig nachgeforscht und gefunden, dass ins Array @transfer_requests bereits eine dereferenzierte parts_id gepusht wird. Da ich nicht wusste, wofür das nochmal gut sein kann, habe ich zusätzlich das ganze Item mit dazu gepusht (anstatt einfach die Zeile 1260 entsprechend zu ändern), damit der Vergleich in Zeile 1260 nicht fehlschlägt.

push @transfer_requests, {
  'delivery_order_item'    => $item,
  'delivery_order_item_id' => $item->id,
  'warehouse_id'           => $part->warehouse_id || $default_warehouse_id,

Damit hat das zwar soweit funktioniert, das Auslagern läuft aber dahinter in eine Endlosschleife (ich bekomme einen Timeout-Fehler von mod_fcgi).

Das schaue ich mir dann nach dem Aufstehen nochmal an, vielleicht schaut ja auch mal jemand anders darüber. ;-)

Grüße,

Hannes

1 Antwort

0 0 Punkte

Hallo Hannes,

ich habe mir den Fehler angeschaut und habe hin behoben.

Der Fix ist aktuell noch auf einem separaten Zweig. Dieser kommt in den Hauptzweig, sobald er die Qualitätskontrolle durchlaufen hat.

Link zum Fix

Du hattest das Problem richtig erkannt, nur dein Lösungsansatz hat, wie du auch selber festgestellt hast, zu einer Dauerschleife geführt. Denn die Objektstruktur würde dann wie folgt aussehen:

Lieferschein → Lieferschienposition → Lagerbewegung┐
                          ↑                        |
                          └────────────────────────┘

Durch cascade wird dann immer "weitere" Objekte gefunden (es wird nicht geschaut, ob ein Objekt schon abgearbeitet wurde). Delete wird aufgerufen, um die Lagerbewegungen der Position neu zu schreiben, indem alle alten gelöscht werden und die aktuellen geschrieben werden. Ich hoffe ich konnte dir beim Verständnis bisschen weiter helfen.

Viele Grüße,
Tamino Steinert

Ähnliche Fragen

0 0 Punkte
1 1 Antwort
fjw Gefragt 30, Nov 2024
Debian 12 mit PostgreSQL 13 vor Upgrade apache2 gestoppt, dann ZIP entpackt und die Ordner (siehe unten) von 3.7.0 in 3.9.1 kopiert komplette Fehlermeldung: Die Datenbank...
0 0 Punkte
2 2 Antworten
Matt Gefragt 10, Nov 2024
Hallo zusammen, ich habe gerade die Version 3.9.2 in einem CT-Container unter Proxmox (Unbuntu 22-04) installiert. Es gab keinerlei Problemem die Perl-Pakete sind lt Scri...
0 0 Punkte
3 answers 3 Antworten
DemoFreak Gefragt 30, Okt 2024
Moin, ich habe meine Testinstallation heute von 3.8.0 auf 3.9.1 geupgraded, das funktioniert auch bis auf einen Punkt: anzeigen und anlegen von Lieferscheinen (Einkauf un...
0 0 Punkte
1 1 Antwort
Werner_Hahn Gefragt 27, Mär 2014
Hallo, bisher haben wir hier so gearbeitet: Im Laufe der Woche mehrere Aufträge erstellt und daraus Lieferscheine erstellt. (Zuerst die Aufträge damit die richtigen Kun...
0 0 Punkte
2 answers 2 Antworten
i440bx Gefragt 27, Dez 2024
Hallo ihr, frohe Weihnachten an das Team nachträglich und vorsorglich einen guten Rutsch in 2025 :) Nachdem ich dieses Problem lösen konnte: https://forum.kivitendo.de/...