Probleme in Version 2.9.10 beim Stornieren von Belegen

In diesem Forum können Fragen zum OrderSprinter gestellt werden.
MrTeufel
Beiträge: 41
Registriert: Mi 21. Jul 2021, 22:47

Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von MrTeufel »

Fehlermeldung „Serverantwort unbekannt“

https://youtube.com/shorts/CEzlMgZB0y8
MrTeufel
Beiträge: 41
Registriert: Mi 21. Jul 2021, 22:47

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von MrTeufel »

Bild
MrTeufel
Beiträge: 41
Registriert: Mi 21. Jul 2021, 22:47

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von MrTeufel »

Code: Alles auswählen

172.18.0.2 -  16/Nov/2025:21:40:52 +0000 "POST /php/contenthandler.php" 500
NOTICE: PHP message: PHP Fatal error:  Uncaught PDOException: SQLSTATE[25001]: Active sql transaction: 1568 Transaction characteristics can't be changed while a transaction is in progress in /var/www/html/webapp/php/commonutils.php:452
Stack trace:
#0 /var/www/html/webapp/php/commonutils.php(452): PDOStatement->execute()
#1 /var/www/html/webapp/php/commonutils.php(577): CommonUtils::execSql()
#2 /var/www/html/webapp/php/bill.php(1235): CommonUtils::setTransactionSerializable()
#3 /var/www/html/webapp/php/bill.php(1320): Bill::cashActionCoreTask()
#4 /var/www/html/webapp/php/bill.php(2150): Bill::doCashActionCore()
#5 /var/www/html/webapp/php/bill.php(237): Bill->cancelBill()
#6 /var/www/html/webapp/php/contenthandler.php(87): Bill->handleCommand()
#7 {main}
  thrown in /var/www/html/webapp/php/commonutils.php on line 452
172.18.0.2 -  16/Nov/2025:21:40:52 +0000 "POST /php/contenthandler.php" 200
172.18.0.2 -  16/Nov/2025:21:40:53 +0000 "POST /php/debug.php" 200
MrTeufel
Beiträge: 41
Registriert: Mi 21. Jul 2021, 22:47

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von MrTeufel »

Fix:

Code: Alles auswählen

diff --git a/webapp/php/bill.php b/webapp/php/bill.php
index 0dc3ba15..0e705282 100755
--- a/webapp/php/bill.php
+++ b/webapp/php/bill.php
@@ -1231,9 +1231,11 @@ class Bill {
                }

                CommonUtils::log($pdo, "QUEUE", "Cash action with money '$money' at billtime '$datetime' with cashtype '$cashtype' of payment " . $paymentid);
-               if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+               $startedTransaction = false;
+               if ($allowOwnTransactions == ALLOW_TRANSACTIONS && !$pdo->inTransaction()) {
                        CommonUtils::setTransactionSerializable($pdo);
                        $pdo->beginTransaction();
+                       $startedTransaction = true;
                }

                $nextbillid = self::testForNewBillIdAndUpdateWorkTable($pdo);
@@ -1286,12 +1288,12 @@ class Bill {

                $status = self::signValueByTseAndUpdateBill($pdo, $lastId, $signStr);
                if ($status["status"] != "OK") {
-                       if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+                       if ($startedTransaction) {
                                $pdo->rollBack();
                                CommonUtils::resetTransactionIsolationLevel($pdo);
                        }
                }
-               if ($allowOwnTransactions == ALLOW_TRANSACTIONS) {
+               if ($startedTransaction) {
                        $pdo->commit();
                        CommonUtils::resetTransactionIsolationLevel($pdo);
                }
diff --git a/webapp/php/commonutils.php b/webapp/php/commonutils.php
index 31d2e7f9..4827747c 100755
--- a/webapp/php/commonutils.php
+++ b/webapp/php/commonutils.php
@@ -574,10 +574,16 @@ class CommonUtils {
        }

         public static function setTransactionSerializable($pdo) {
-                CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',null);
+                       if (method_exists($pdo, 'inTransaction') && $pdo->inTransaction()) {
+                               return;
+                       }
+                       CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL SERIALIZABLE',null);
         }
         public static function resetTransactionIsolationLevel($pdo) {
-                CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ',null);
+                       if (method_exists($pdo, 'inTransaction') && $pdo->inTransaction()) {
+                               return;
+                       }
+                       CommonUtils::execSql($pdo, 'SET TRANSACTION ISOLATION LEVEL REPEATABLE READ',null);
         }

        public static function callPlugin($pdo,$fct,$condition) {
pichel
Administrator
Beiträge: 1447
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von pichel »

Hallo,

erst mal vielen Dank für den Fehlerbericht und den Lösungsvorschlag.

Ich schlage allerdings einen anderen Weg vor. Sowie ich das im Moment sehe, habe ich in der Signatur von doCashActionCore versehentlich $allowOwnTransaction als bool deklariert, es ist aber ein int. In PHP wird ein int-Wert beim Übergeben an einen bool-Parameter automatisch in einen Boolean konvertiert.

Zum Hintergrund: Ich hatte ursprünglch noch mehr Optionen vorgesehen und deswegen wollte ich mich nicht auf einen booleschen Wert festlegen (ok, im Nachhinein hätte auch ein bool gereicht...). Mit der richtigen Signatur in bill.php sollte es jedenfalls funktionieren:

Code: Alles auswählen

public static function doCashActionCore($pdo,$money,$remark, $datetime,$userId,$cashtype,$paymentid,int $allowOwnTransactions,$checkForPermissions)
Bevor ich das in eine neue Version gieße, möchte ich es aber noch etwas mehr testen.

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Christoph3751

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von Christoph3751 »

Der Fehler kommt nur wenn man die Zahlung mit Wechselgeldrechner macht.
Ohne Wechselgeldrechner ist Storno ohne Fehler möglich.

LG
Christoph
pichel
Administrator
Beiträge: 1447
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von pichel »

Es ist die Stornierung von Bon und Trinkgeld. Ich werde bald eine korrigierte Version veröffentlichen
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
pichel
Administrator
Beiträge: 1447
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Probleme in Version 2.9.10 beim Stornieren von Belegen

Beitrag von pichel »

Moin,

ich habe heute morgen die Version 2.9.11 veröffentlicht. darin ist das Problem gelöst.

Viele Grüße,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Antworten